最近对可解释性平台Captum进行了实际操作。这是Facebook 发布的一个基于 Pytorch 的模型解释库。该库为许多新的算法(如:ResNet、BERT、一些语义分割网络等)提供了解释性,帮助大家更好地理解对模型预测结果产生作用的具体特征、神经元及神经网络层。针对图像分类问题,其可以快速定位影响结果的一些像素点,并进行可视化展现;而对于文本翻译等问题,能够可视化标注出不同单词的重要性,以及利用heatmap展示单词之间的相关性等。


1. 安装

首先是安装,其实只要电脑符合前置要求,安装起来非常简单。

  • Python >= 3.6
  • PyTorch >= 1.2

Conda的安装方法:

conda install captum -c pytorch

Pip的安装方法:

pip install captum

上面两种方法直接在命令行中运行即可。下面我们分别从结构化数据、非结构化数据(图像与文本)来看看目前的一些工作如何说明可解释性问题。本博客主要内容来源于官方教程(Captum Tutorials)。


2. 结构化数据

以泰坦尼克号数据集(titanic3.csv)为例,因变量为是否死亡。

模型使用两层带sigmoid激活函数的神经网络结构(第一层有12个隐藏节点,第二层为8个)。为了探寻模型的可解释性,我们首先利用Integrated Gradients 方法看数据的变量重要性(未来会将此方法介绍的具体论文写在博客中)。


由上图可以看出,年龄与性别对泰坦尼克号上的乘客生存情况有比较显著的影响,其中年龄越大,生存下来的概率越低,并且男性会更不容易生存下来。而对于其他变量,变量的重要性则相对没有这么大。

下面我们进一步探究神经网络每个神经元的可解释性,下图为第一层网络中每个神经元对结局的平均贡献:

可以看出,神经元10对结果有比较大的贡献,而神经元7与9基本没有贡献。而后我们关注两个对结果几乎没有贡献的神经元内样本的分布情况,发现基本集中在0附近,因此对是否生存这一结果的预测,没有太大的意义:

接着我们再关注与生存有强负相关的两个神经元,可以发现这两个神经元的样本结果主要都是为负数,并且分得也比较散:

为了进一步解释每个神经元的具体情况,我们展示神经元0与神经元10的具体输入特征对其的影响,发现对神经元0,影响最大的为年龄,并且也是负效应;对神经元10影响最大的则为男性这一哑变量,同样也为负相关,这从某种程度上解释了这两个变量最终的变量重要性比较高。


3. 图像数据

下面我们关注Captum上关于图像的一些可解释性的应用。注意,这里在运行的时候需要额外的下载权重,可能要稍微花费比较久的时间。

首先以一个城市交通图为例,介绍在图像上,Captum能做哪些事情。(本周只学了与重现了很少一部分,以后每周会实践一些可解释性的具体案例)
下图表示应用一个比较先进的语义分割网络的结果。

而后我们可以看分割网络中,具体一些特征图对结果的具体贡献情况,下图表示我们选择“bus”类别,看整体最后一层feature map对bus分割的贡献情况。可以发现,自行车对bus的分割基本没有贡献,而人与道路会对bus的分割有负贡献(这表示相对应的像素点更不可能被判为公交车)。

而后我们用另一种思路来展现可视化的情况,用的方法称为:Feature ablation(去年也有一篇文章利用此方法来考虑特征的重要性),其思想为将原本的某类我们关注的标签(特征)消去(对应像素点的值设置为0,看起来如同被黑色区域遮盖),而后看遮盖前与遮盖后的其他区域预测类别的差异。我们分别探究的遮盖火车与遮盖巴士后,其他标签的预测情况,为了更明显的看出遮盖label与其他label的相关情况,我们将遮盖的label置为0,也就是右图中的白色区域。

从第一行图中可以看出,公交车区域对火车的分割有着积极的贡献;第二行图中可看出背景和人对公交的预测有积极的贡献。而自行车区域对公交车与火车的预测几乎都没有影响。

下面用另外一张跳舞的图片,来复现上述模型的分割可解释性。由于图中只有分割类别中的“person”,因此只针对图中的人进行分割。

下图表示人的区域对其分割有积极影响(绿色区域),而背景与灯光对人物的分割有着抑制效应(红色区域)。

而由于只有两个类别(人物与背景),因此使用Feature ablation看不出效果。


4. 文本数据

最后介绍文本可解释性的一些应用,本次是进行Sentiment Analysis 的探究。

注意在运行代码前需要提前用pip安装好spacy库,以及配置好英文语言相关的文件:

python -m spacy download en

上面的代码,在Windows上需要在对应python.exe 的路径上打开命令行窗口(或者先cd到python.exe的路径上)进行相应代码的运行。(找不到的话推荐使用 everything 工具进行全电脑范围的搜索)

示例结果如下:

由于目前成熟的模型权重很大,而且需要下载很久,因此只使用网上找的一个训练比较差的权重进行测试(这里我们附在文章的附件中),结果如上图所示。模型可以关注每个单词对最终情感的贡献,绿色表示积极的贡献,红色表示消极词汇的贡献。有一些句子中表现的不是很好,比如有将the归为非常消极的词汇,但这种文本的可视化展现手段可以值得借鉴学习。


参考

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐