论文笔记:Exploring Neural Networks with Activation Atlases

主要内容

本文在spatial activation visualization的基础上,通过对每个样本的activation vector进行数据降维到二维空间中,并且使用归因向量平均(average the attribution vectors)和特征反转(feature visualization)的方法,得到了反映出模型对于整个数据集的特征关注情况的**图谱(activation atlas)。可以通过**图谱分析模型对于一个类别物体在高等概念上的拆分认知(例如,模型认为 电车 = 窗户 + 起重机 + 建筑物),也可以对比两个类的关注不同点,对一个类别加上另一个类别的关注特征,使其被分类错误,达到一个adversarial patch的作用。

具体实现

本文讨论使用的模型为InceptionV1模型,该模型结构为:

论文笔记:Exploring Neural Networks with Activation Atlases

spatial action visualization

在先前工作中,feature visualization已经发展到spatial action visualization的程度了,它可以针对单个输入分析神经网络特征提取特征的特点。具体方法如下图所示:

论文笔记:Exploring Neural Networks with Activation Atlases

首先将输入图片分成用细小的网格分割出来,在此基础上将一小部分相邻的网格组成一个patch,原图会因此得到很多可能会重叠的patch。对于每个patch,单独进行分析和评价。对于一个patch,会选取一个中间层的neurons,利用他们的**值进行特征反转(feature visualization)过程,根据**值,通过迭代优化的方式,还原成一个图片patch,用于表达神经网络对于原patch部分提取的特征是什么。得到的效果就如图中最右侧的activation grid一样。

Aggregating Multiple Images

通过上面的方法,可以用中间层neurons的**值来得到模型对于单个图像各个局部特征提取的特点,那么如何将其扩展到能观察模型对于整个数据集上的特征提取分布情况呢?

答案就是使用数据降维技术,本文中使用的是t-SNE,它可以将高维数据投影到二维平面中,保留原始空间的一些局部结构。

首先,将数据集定为ImageNet中的100万+张图片,每一个图片都对应着一个随机选出来的**值向量(activation vector),这样就得到了100万+个**值向量,然后使用t-SNE技术将他们投影到二维空间中。然后将投影后的平面也进行网格划分,将同一个网格内所有的特征向量进行平均,得到每一个单元格的平均向量。之后使用特征反转方法将他们都变成还原后的图片。总体的效果如下:

论文笔记:Exploring Neural Networks with Activation Atlases

对于特征反转过程,作者使用的目标函数是():

                                                                            论文笔记:Exploring Neural Networks with Activation Atlases

并且在实际操作过程中,作者先基于**值向量计算出它们的归因向量(attribution vector),因为归因向量能够被认为显示各个网格中倾向于支持哪些类别,它的求法为:

                                                                          论文笔记:Exploring Neural Networks with Activation Atlases

然后计算归因向量的均值,再用它们进行特征反转操作,得到最终的**图谱(activation atlas)。

依靠特征图谱的模型分析

整个特征图谱看起来很乱,但是关注特定区域时,便可得知该部分的关注点了:

论文笔记:Exploring Neural Networks with Activation Atlases

在这个特征图谱的左上角,它主要关注的是哺乳动物的面部和五官等。

论文笔记:Exploring Neural Networks with Activation Atlases

接着向下移动视角,发现这部分关注点也是下移到动物的身体部位。

论文笔记:Exploring Neural Networks with Activation Atlases

再向下是动物的脚和接触的地面。

可以看出,**图谱的视角移动时,所对应的模型关注特征也是在语义上进行移动的。

论文笔记:Exploring Neural Networks with Activation Atlases

这条探测路线,就能看到关注点对应的是水果的数量从多到少,形状从大到小。

论文笔记:Exploring Neural Networks with Activation Atlases

这条探测路线是从海洋到隔壁的过渡过程。

之前的讨论部分,都是从模型同一个中间层抽取出来的**值向量进行的**图谱构造,下面来讨论从不同层提取**向量对于最后图谱的影响。对比的提取的层为以下三层:

论文笔记:Exploring Neural Networks with Activation Atlases

论文笔记:Exploring Neural Networks with Activation Atlases

得到的一个例子如图,可以看出,同样是对应卷心菜这一类的特征,越向后的中间层,得到的**图谱中的特征层面越整体。

Focusing on a Single Classification

针对一个输入,观察**图谱中和其密切相关的特征是什么(选取的是logits前面的一层,它和logit是线性连接的,因此很容易判断这一层的哪些特征对最后的决策影响强)。

论文笔记:Exploring Neural Networks with Activation Atlases

论文笔记:Exploring Neural Networks with Activation Atlases

对于救火船和电车这两个类别,**图谱中最相关的部分分别在上图中展示了,可以看出,在模型看来,救火船的语义是windows + crane-like apparatures + water,而电车是windows + crane-like apparatures + buildings。

Further Isolating Classes

既然能够分析出模型对于一个类别的认定中最相关的特征,那么就可以对比一下模型对于两个类的认知差别。

论文笔记:Exploring Neural Networks with Activation Atlases

上面是模型对于snorkel和scuba diver两个类别的认知组成,下面通过t-SNE将这些小区域重新排列:

论文笔记:Exploring Neural Networks with Activation Atlases

越靠近两边的网格特征,就是越能区分出类别的特征。可以看出。对于scuba diver这个类别,它的认知组成里面竟然有locomotive,那么在snorkel类别的图片中加入locomotive元素,会发生什么呢?

论文笔记:Exploring Neural Networks with Activation Atlases

可以看出在加入了适当的位置和大小的火车图片后,竟然能把snorkel的分类误导为scuba diver。而火车图片,也就是一种adversarial patch了!

最后列举一下这种adversarial patch的总体攻击情况吧:

论文笔记:Exploring Neural Networks with Activation Atlases