首页 > 代码库 > 论文笔记 Visualizing and Understanding Convolutional Networks
论文笔记 Visualizing and Understanding Convolutional Networks
之前,我知道可以可视化CNN,也只是知道有这么一回事情。至于它是“怎么做的、其原理是什么、给我们的指导意义是什么”,也不清楚。说白了,就是我知道有“CNN可视化”,仅仅停留在“知道”层面!但当自己需要运用、理解其他CNN可视化技术时,才晓得将这篇paper精读一下。
Background
1)在很多分类任务中(如手写字符识别、人脸识别,以及极具挑战性的Imagenet Classification),CNN取得了极好的性能。但是,CNN是怎么做到的呢?她内部的工作工作机理是什么?又该如何进一步提升其性能呢?引用论文中的一句话就是“Without clear understanding of how and why they work, the development of better models is reduced to trial-and-error”。
2)在一副图像当中,它的不同部分对于分类准确率的影响相同吗?
3)CNN的不同层,它们的泛化能力相同吗?
作者在这篇论文中提出了一种可视化的技术用以分析CNN的“Why and how they work”,并通过该技术回答了问题2),也对问题3)做了明确的回答!这个可视化技术的要点可以简单理解如下:
假设 B=f(A),可以将A理解为输入图像、B理解为feature map、f理解为CNN(为简单起见,这里认为A、B都是二维的矩阵,即输入是灰度图像、输出是只有一个channel的feature map,请注意这只是为了陈述问题方便)。一般情况是,给定输入A,我们得到feature map B。现在我们想了解一下对于B中一个元素Bij,A中的各个元素对其的“贡献”。我们可以直接令除Bij之外的所有B中元素为0,然后将Bij逆影射到输入空间,得到A‘(如果这样不好理解的话,可以认为是由Bij重构出A‘)。这个A‘就反映了A中各个像素对Bij的“贡献”,或者换句话说,Bij是被A中 “A‘ pattern”激活的。
Main Points
1)首先图示一下作者提出的可视化技术
Fig 1左侧是作者提出的可视化网络,用来将feature maps上的某个activation影射到输入空间,对应背景介绍中A‘。右侧对传统的CNN一个小小改进,也就是在做max pooling时进行用“Switches”记录一下最大值的位置。我们重点分析左侧的网络结构:
- 如何对pool进行“逆操作”,也就是上图中的Unpooling。其实做法很简单,在我们进行max pooling的时候,我们通过“Switches”记录下是哪个位置取得了最大值,在unpooling的时候,按照这个“Switches”将pooling后的结果放回原来的位置(剩余的直接填充0就好了)。Fig 1 Bottom很好的示意了上述过程。
- 如果我们得到了卷积核的权重,我们是可以进行反卷积的。这个卷积核的权重,我们可以直接从右侧的传统CNN得到。因此,可视化的网络是不需要训练的。
- 上图左侧之所以加上Relu,论文中是这样解释的“To obtain valid feature reconstructions at each layer (which also should be positive), we pass the reconstructed signal through a relu non-linearity”
在CNN中,每一层的feature maps有很多个channel,下面我们做的就是从中选择一个feature map,从该feature map选择一个activation,然后令除了该activation之外的所有feature map activations为0,之后,用上述选择重构出A‘。由于每一个activation在输入图像中的receptive field有限、确定,因此作者也将该activation对应的image patch裁了出来,组成了下图(作者是这样选择activation的,For a given feature map, we show the top 9 activations)
由该图可以得出结论
2)有了上述可视化的分析工具,我们可以实时追踪在训练过程中feature 的 evolution。这一部分请大家参考原始论文,我就不赘述了。
3)有了上述可视化的分析工具,我们还可以将引起最大响应的patch遮住,看看不同patch对分类结果的影响。结论就是“the model is truly identifying the location of the object in the image”。
4)有了上述可视化的分析工具,我们还可以将引起最大响应的patch遮住,看看最大响应的是不是消失了,以此验证,特定的pattern激活相应的activation。
5)当然了,我们还可以利用上述可视化分析工具,分析一下Alexnet模型的缺点,并且提出改进的办法,这篇paper也做了这样的事情。
6)此外,作者做了实验,通过移除Alexnet的一些层或者改变某一层的width,看看不同层、width对分类精度的影响,结论就是:模型的深度是影响性能一个很重要的因素,增加模型width能够提升网络的性能。
7)作者还验证了,小数据集不太适合训练大的网络如Alexnet。
8)网络的高层feature泛化能力较强,但其在PASCAL数据集上表现不佳,原因可能是:存在data-bias(Imagenet和PASCAL中的图像差异较大)
Summary
1)一个简单的可视化技术,让我们能够从各个角度审视“How and why CNN works”。“小改进、大智慧”,或许这应该成为科研的指导思想吧!
2)作者详细分析网络深度、宽度、数据集大小对网络性能的影响,也分析了网络输出特征的泛化能力以及泛化过程中出现的问题(如果另一个数据集与Imagenet差异较大,泛化能力相对较弱出现的原因)。
论文笔记 Visualizing and Understanding Convolutional Networks