[重读经典论文]ZFNET——神经网络可视化的开山之作
1. 前言
ZFNet是一个深度卷积神经网络(CNN),由Matthew D. Zeiler和Rob Fergus于2013年在论文《Visualizing and Understanding Convolutional Networks》中提出,ZFNet就是以他们姓的首字母进行命名的,在ILSVRC-2013图像分类挑战中获得了冠军。(其实分类任务得分最高的是Clarifai,不过这个网络是Matthew他们利用ZFNET作为基础模型的集成模型,因此官方才把冠军给了ZFNET[1])
ZFNet是在AlexNet之后提出的,它的结构和AlexNet有很多相似之处,但在一些细节上进行了优化。ZFNet包括5个卷积层和3个全连接层,其中第一层卷积使用了较小的卷积核(7x7)和较大的步幅(2),以便更好地捕捉低级特征。另外,ZFNet中的pooling层使用的是3x3大小的非重叠区域,这比AlexNet中的4x4重叠区域更加精细。
除了对AlexNet的改进外,其实最重要的是本论文中采用的卷积神经网络可视化的方法,使用反卷积,将中间层feature map投射重构回原始输入像素空间,便于可视化每个feature map捕获的特征。
还有本论文做了很多非常有实用意义的消融实验,如
- 训练过程中不同层特征演化可视化。
- 图像平移、缩放、旋转敏感性分析。
- 图像局部遮挡敏感性分析(遮挡同一张狗脸图像的不同部位,分析结果变化)。
- 图像局部遮挡相关性敏感性分析(遮挡不同狗脸的同一部位,分析相关性)。
本论文可以说是深度神经网络可视化的开山之作,其中体现的创新性的思路及操作,对于理解和发展深度学习具有非常重要的意义。
2. 特征可视化
2.1. 可视化操作
我们知道,卷积神经网络通过逐层卷积将原始像素空间逐层映射到特征空间,深层feature map上每个位置的值都代表与某种模式的相似程度,但因为其位于特征空间,不利于人眼直接观察对应的模式,为了便于观察理解,需要将其映射回像素空间。
可视化操作,针对的是已经训练好的网络,或者训练过程中的网络快照,可视化操作不会改变网络的权重,只是用于分析和理解在给定输入图像时网络观察到了什么样的特征,以及训练过程中特征发生了什么变化。
给定1张输入图像,先前向传播,得到每一层的feature map,如果想可视化第i层学到的特征,保留该层 feature map的最大值,将其他位置和其他feature map置0,将其反向映射回原始输入所在的像素空间。对于一般的卷积神经网络,前向传播时不断经历 输入→卷积 → 激活 → 池化……,可视化时,则从某一层的feature map开始,依次反向经历 反池化→ 反激活 → 反卷积 → …… → 输入空间,如下图所示,上方对应更深层,下方对应更浅层,前向传播过程在右侧从下至上,特征可视化过程在左侧从上至下。
反池化(unpooling):在前向传播时,记录相应max pooling层每个最大值来自的位置,在unpooling时,根据来自上层的map直接填在相应位置上,如下图所示,Max Locations “Switches”是一个与pooling层输入等大小的二值map,标记了每个局部极值的位置。
反激活:因为使用的ReLU激活函数,前向传播时只将正值原封不动输出,负值置0,“反激活”过程与激活过程没什么分别,直接将来自上层的map通过ReLU。
反卷积(deconv):实际上用转置卷积更为贴切,这个过程与卷积分享同样的卷积核,只是操作是转置卷积,对来自上层的feature map进行反卷积,结果继续向下传递。关于反卷积可以参考:什么是deconv操作(反卷积,转置卷积)
2.2. 可视化结果
如上图所示,训练完之后,对第一个卷积层后的feature map,选取造成其激活值最大的前九个原图patch进行展示,可以看到第一个卷积核主要用来捕捉斜下的线。
上图是第二个卷积层后面输出的feature map,这里选了16个feature map,右边是能够使得某个feature map激活最大的前9个patch(来自验证集),对应的左边的图,是在这些实际的feature map上,使用前面介绍的可视化操作进行转化到原始像素空间的图。
如上图所示,随着层数越来越深,捕捉到的特征也越来越抽象,从原来的层1捕捉颜色和线条信息,到层5捕捉更复杂的草地、眼睛、狗狗。
2.3. 不同卷积层收敛速度
上图主要观察不同卷积层卷积核的收敛速度。选取1到5层的若干个feature map进行观察,横轴是某个feature map,纵轴是epoch(选取1,2,5,10……64),展示的内容,是选取在训练中最大激活值的feature map进行可视化。
可以看到,比较底层的feature map很快就收敛了,比较深的层如4、5,到了后面的epoch,最大激活值的feature map还在变,证明卷积核也在变动。
3. 模型改进
ZFNet的网络架构是在AlexNet基础上修改而来,与AlexNet相比,差异不大:
- 第1个卷积层,kernel size从11减小为7,将stride从4减小为2(这将导致feature map增大1倍)
- 为了让后续feature map的尺寸保持一致,第2个卷积层的stride从1变为2
仅这2项修改,就获得了几个点的性能提升。所以,重要的是为什么这样修改?这样修改的动机是什么?
这是因为,通过对AlexNet的特征进行可视化,文章作者发现第2层出现了aliasing。在数字信号处理中,aliasing是指在采样频率过低时出现的不同信号混淆的现象,作者认为这是第1个卷积层stride过大引起的,为了解决这个问题,可以提高采样频率,所以将stride从4调整为2,与之相应的将kernel size也缩小(可以认为stride变小了,kernel没有必要看那么大范围了),这样修改前后,特征的变化情况如下图所示,第1层呈现了更多更具区分力的特征,第二2层的特征也更加清晰,没有aliasing现象。
d是alexnet第二层卷积层feature map的可视化,可以发现有很多aliasing的现象,图e是zfnet第二层的情况。
4. 其他消融实验
4.1. 平移、缩放、旋转敏感性分析
这张图分别展示了竖直平移,缩放和旋转对分别对浅层特征,深层特征和分类结果的影响。
第二列表示变换后相对原图,第一卷积层提取的特征向量(由feature map压平)的欧氏距离,可以看到微小变化很大的影响。
第三列则表示第7卷积层后面的特征变量,在变换后的影响,可以看到平移和缩放都是线性的,而旋转则有一定的周期性,旋转90度为周期。
最后一列表示变换对分类概率的影响。
一般来说,小的变化对于模型的第一层都有非常大的影响,但对于最高层的影响却几乎没有。对于图像的平移、尺度、旋转的变化来说,网络的输出对于平移和尺度变化都是稳定的,但却不具有旋转不变性,除非目标图像时旋转对称的。
4.2. 局部遮挡敏感性分析
遮挡同一张狗脸图像的不同部位,分析结果变化。
上述结果表明,如果图像中的目标被遮挡,那么被正确分类的概率会显著降低,这表明这种可视化与激发特征图的图像结构式真正对应上的。即大概能知道位置。
4.3. 局部遮挡相关性敏感性分析
遮挡不同狗脸的同一部位,分析相关性。
通过遮挡某一个部位,分析遮挡前后的特征向量的变化,不同体现图片中的狗的某部位的隐式相关性。
5. 迁移学习
在ImageNet上预训练,固定权重,然后迁移到其他库上(Caltech-101、Caltech-256),重新训练最后的softmax classifier,只需要很少的样本就能快速收敛,且性能不错。
在Pascal Voc数据上效果也不错,但是比不上只在Pascal Voc数据集上训练的最好模型,原因可能是ImageNet 和Pascal Voc差异较大。
6. 特征分析
将卷积网络不同层的特征输出,作为输入特征分别送到svm和softmax中进行分类,得出分类的精度。可以看到,网络越深,提取的特征约有效,也证明这个时候能够提取出高层级的语义特征。
7. 参考
[1] Review: ZFNet — Winner of ILSVRC 2013 (Image Classification)
[2] 【精读AI论文】ZFNet深度学习图像分类算法(反卷积可视化可解释性分析)
(完)