Visualizing and Understanding Convolutional Networks
文章目录
1:大纲总览
随着(1)可利用的训练集的不断扩张,(2)训练的设备的不断演进 还有 (3) 更多优秀的正则化模型策略的出现,神经网络模型表示出了越来越强的能力。
然而,对于它们为何表现得如此出色,或者如何才能得到改善,目前还没有明确的理解。本文为了解决这个问题,介绍了一种新的可视化技术。借助该技术,我们能够深入了解中间特征层的功能和分类器的操作,并根据理解来进行模型的改进。
ps:可视化工作可以分为两大类,一类是非参数化方法:这种方法不分析卷积核具体的参数,而是先选取图片库,然后将图片在已有模型中进行一次前向传播,对某个卷积核,我们使用对其响应最大的图片块来对之可视化;而另一类方法着重分析卷积核中的参数,使用参数重构出图像。本篇论文做的是第一类可视化方法
2:Approach
为了了解卷积操作,本文的思路了解中间层的特征激活值。本文使用了一种新的方式反卷积操作将这些激活值映射回输入像素空间,来探究了什么样的输入将会导致输出结果feature map中一个给定的激活值。
ps:一个反卷积网络可以被看成是一个卷积模型,这个模型使用和卷积同样的组件(过滤和池化),但是却是相反的过程,因此是将特征映射到像素。反卷积网络一开始是作为一种进行非监督学习的方法被提出,但是在这里,它仅仅用来探测一个已经训练好的卷积神经网络。
如上图所示,反卷积可视化以各层得到的特征图作为输入,进行反卷积操作,得到结果(就是前一层的特征图),从而用以验证显示各层提取到的特征图。为检验一个给定CNN的激活,我们就将该激活的feature map后接一个反卷积网络,然后通过:反池化、反激活、反卷积。重复上述过程不断直到原始输入层。
ps:因为每一层都有 C >= 1 个channel,所以为了单独研究某个channel,会将其余的activations设为0.
操作详解:Unpooling:
在卷积神经网络中,max-pooling操作是不可逆的,然而我们可以通过一系列switch变量来记录池化过程中最大激活值的坐标位置。在反池化的时候,根据switch变量的指示放置池化过程中最大激活值,把其它的值置为0,当然这个过程只是一种近似,因为我们在池化的过程中,除了最大值所在的位置,其它的值也是不为0的。过程如下图所示:
操作详解:Rectification:
CNN使用ReLU确保每层输出的激活之都是正数,因此对于反向过程,我们同样需要保证每层的特征图为正值,也就是说这个反激活过程和激活过程没有什么差别,都是直接采用relu函数。
操作详解:Filtering:
卷积过程使用学习到的过滤器对feature map进行卷积,为近似反转这个过程,反卷积使用该卷积核的转置来进行卷积操作
3:可视化结果分析
-
网络中特征的分层特性
第二层响应角落和其他的边缘/颜色信息,层三具有更复杂的不变性,捕获相似的纹理,层四显示了显著的变化,并且更加类别具体化,层五则显示了具有显著姿态变化的整个对象。
-
训练过程中的特征演化 这一点正好与深层网络的梯度弥散现象正好相反,但是这种底层先收敛,然后高层再收敛的现象也很符合直观
-
特征不变性 网络输出对于平移和缩放是稳定的。但是一般来说,除了具有旋转对称性的物体来说,输出来旋转来说是不稳定的.(这说明了卷积操作对于平移和缩放具有很好的不变性,而对于旋转的不变性较差)
ps:(就是当输入存在一定程度的畸形时,输出特征不变,在我看来是因为卷积操作时专注于某些关键纹理来得到输出)
-
有趣的主观认识 深度模型与许多现有的识别方法的区别在于,它没有用于建立不同图像中的特定关键对象部分之间的显式机制。然而,一个有趣的可能性是,深层模型可能隐式地计算它们。
-
个人总结
- 网络更深,就能使得每层的特征更加层次分明,这样就能学到更加泛化的特征
- 神经网络由于分层特性,底层有很好的泛化能力