1. 本篇文章主要做了什么?
在本篇论文中,
- 作者引入了一种新的可视化技术,该可视化技术可以揭示在模型的任何一层激发个体特征图的输入刺激,允许我们在模型训练期间观察特征的演变,用来深入了解中间特征层的功能和分类器的操作。这些可视化使我们能够找到比Krizhevsky等人在ImageNet分类基准测试中表现更好的模型架构。
- 同时作者还进行了消融研究(ablation study),以发现不同的模型层对性能的贡献。
2. 具体做法
2.1 模型
在文章中使用了标准的全监督卷积神经网络模型。模型接受一张2D彩色图片作为输入,经过一系列层,得到一个表征该图片属于每一类别
C
C
C的概率向量
y
^
\widehat{y}
y
? 。并使用交叉熵损失函数来对
y
^
i
\widehat{y}_i
y
?i? 和
y
i
y_i
yi? 来进行比较,通过反向传播来训练参数,并采用随机梯度下降法来更新参数。
2.2 Visualization with a Deconvnet
为了解释卷积神经网络为什么work,我们就需要解释CNN的每一层学习到了什么东西。这篇文章使用反卷积(deconvnet)
[
2
]
^{[2]}
[2]的方法来对CNN的中间层进行可视化,让我们能够在模型训练期间观察特征的演变,深入了解中间特征层的功能和分类器的操作。
在Adaptive deconvolutional networks for mid and high level feature learning这篇论文中,作者提出deconvnet方法是作为学习图像表示的一种无监督方法。
但是在本篇论文中,deconvnet不用于任何学习能力,只是作为一个已经训练的卷积神经网络的探测。
具体做法:首先,将输入图像提交给卷积神经网络,并计算各个层的特征。为了检查给定的convnet激活,我们将该层中的所有其他激活设置为零,并将特征映射作为输入传递给附加的deconvnet层。然后,我们依次(i) unpool, (ii) rectify和(iii) filter来重建产生所选激活的下层活动。重复该操作,直到到达输入像素空间。
(1)Unpooling 反池化操作(对应卷积网络的池化操作)
理论上来说,卷积网络中的最大池化操作是不可逆的,但我们可以通过池化索引进行近似可逆。
(2)Rectification 修正操作(对应卷积网络的ReLU操作)
卷积网络中采用ReLU确保特征值非负,为了确保正逆过程的一致性,我们将反卷积网络每一层的重构特征也通过ReLU得到非负值。
(3)Filtering 反卷积操作(对应卷积网络中的卷积操作)
卷积操作是低效操作,主流神经网络框架都是通过im2col+矩阵乘法实现卷积,以空间换效率。输入中每个卷积窗口内的元素被拉直成为单独一列,这样输入就被转换为了H_out * W_out列的矩阵(Columns),im2col由此得名;将卷积核也拉成一列后(Kernel),左乘输入矩阵,得到卷积结果(Output)。im2col和矩阵乘法见如下两图: 本文中提到的反卷积操作其实是转置卷积,神经网络框架借助转置卷积实现梯度的反向传播,如下两图所示。将卷积核矩阵转置(Weight_T)后,左乘梯度输出(GradOutput),得到梯度列矩阵(GradColumns),通过col2im还原到输入大小,便得到了相对于输入的梯度(GradInput)。
代码实现
参考:https://github.com/huybery/VisualizingCNN
参考: [1] Zeiler, M., Taylor, G., Fergus, R.: Adaptive deconvolutional networks for mid and high level feature learning. In: ICCV (2011) [2] Zeiler M D, Taylor G W, Fergus R. Adaptive deconvolutional networks for mid and high level feature learning[C]//2011 international conference on computer vision. IEEE, 2011: 2018-2025. [3] 深度学习(二十七)可视化理解卷积神经网络 [4] “直观理解”卷积神经网络(一):反卷积(Deconvnet) [5] im2col的原理和实现 [6] 深度学习-VGG16原理详解 [7] 代码实现参考
|