浅谈《Visualizing and Understanding Convolutional Networks》

内容简介:       
      此文是Matthew D. Zeiler在2014年发表在ECCV上的文章,当时基于CNN 的模型已经初露峥嵘,表现不俗,但探究不深,对于CNN为何取得如此好的效果以及如何改进网络结构没有明确的答案,这也正是该文重点研究分析的两个问题。作者通过反卷积手段实现可视化,通过可视化来分析每层的特征以及特征如何随模型训练而发生变化等,从而更好地改进模型结构。
文章内容:
反卷积实现可视化:
      作者以标准的有监督的cnn模型为基础,在每个卷积层后面附加了一个反卷积层,反卷积层可以看成是卷积层的逆过程,同样包含有卷积核以及pooling函数(或者说是逆函数),反卷积层的作用就是将输出特征重新映射为输入信号。这个过程,主要包含三个操作:1、unpooling ;2、矫正;3、反卷积。
unpooling:
       在卷积过程中,pooling操作是不可逆的,但这里采用了一种近似的手段,通过记录每个pooling区域最大值的位置信息,将最大值回填,其余位置补充为0近似的重构。
矫正:
       这个过程就是使用**函数的逆过程,正向计算中采用relu函数保证了非负性,这个约束在反过程中依然有效,所以这里也是直接采用relu函数。
反卷积:
       这里卷积核采用了正向卷积计算中的卷积核转置,与矫正过的输出特征卷积。
       以上三个操作流程如下图(fig1)所示,上面右半部分是正常的卷积、pooling等操作,左边就是反卷积的实现过程。下面显示了pooling及unpooling的过程,通过“switches“记录最大值的位置实现。
                                                                               浅谈《Visualizing and Understanding Convolutional Networks》  
                                             浅谈《Visualizing and Understanding Convolutional Networks》
特征可视化:
       模型通过训练以及反卷积操作后,提取9个效果最好的特征,并投到像素空间进行可视化。下图(fig2)展示了模型在ImageNet数据集上的一些特征提取和可视化。通过可视化,能够发现当输入特征存在一定变形时,我们的输出特征能够保持不变。比如layer5 的1行2列的9个图片,虽然图片内容不同,但特征提取均显示出了背景草地。同时,每层的可视化结果也都反映了网络的层次化特点,意思就是每个层的关注点不同,扫描到的特征不同,有重点关注轮廓颜色的,有注重差异的,有注重纹理的等等。


                                                          浅谈《Visualizing and Understanding Convolutional Networks》                                       浅谈《Visualizing and Understanding Convolutional Networks》
       作者除此之外,还做了遮挡实验,目的是探究图片哪些内容对最终分类结果产生重要影响,并对比了其他两个史上最好的两个模型,结论是他自己在ImageNet库上训练出来的这个模型秒杀其他,并证明了起泛化能力较强。

总结:
       本文三点贡献:1、反卷积的使用,使得特征能够可视化展示,并能够对模型进行改进;2、敏感实验使得该模型具有一定的解释性,神经网络一直称为黑箱操作,而文中通过遮挡操作得出对分类结果影响较大的部分,也算是点亮了黑箱中一盏灯吧;3、至今VGG、ResNet等卷积网络基于ImageNet的网络架构作为backone network,这也是作者实验的结果,一是网络深度很重要,二是ImageNet数据量大,类别多,所以提取特征更普遍。
       不得不说作者在CNN方面贡献之大,尤其是反卷积的提出,至今尚在使用在各个方面,如图片语义分割、图片去模糊化等等,所以好好学习一下反卷积网络,对自己以后好处大大的。当然CNN在NLP领域的应用主要是在多模态方面,由于词向量的整体性,不像图片可以局部扫描,使得CNN在文本领域的发挥有一定限制。