【深度学习】卷积神经网络的可视化---Visualization by activation Maximization

The Overview:

Activation Maximization (AM)是用来可视化各个卷积层的输入偏好。 通过观测输入偏好,我们可以更好的了解CNN的卷积层到底学习到了什么。卷积学习得到的特征可以通过一帧合成图像来最大化神经元的**。为了合成这个输入偏好,我们可以通过对CNN的输入像素进行反复迭代来最大化神经元的**。

换言之,我们可以通过合成一个输入样式来**神经元,使得神经元**最大化的输入样式便是神经元的输入偏好,也就是通过输入偏好可以观察神经元到底学习了什么。

Activation Maximization 是由Erhan在2009年提出 D. Erhan, Y. Bengio, A. Courville and P. Vincent, Visualizing higher-layer features of a deep network, (2009), p3 。Erhan利用Activation Maximization观测了Deep Belief Net隐层神经元的输入偏好和Stacked Denoising Auto-Encoder在MNIST数据集学习到的特征。之后,Simonyan 用这个算法来可视化CNN的最后一层神经元。K. Simonyan, A. Vedaldi and A. Zisserman, Deep inside convolutional networks: Visualising image classification models and saliency maps。Google也通过这种方法来集成可视化特征样式应用在Inception网络中Inceptionism: Going deeper into neural networks。Yosinksi则将AM运用到更广泛的范围中,可以可视化CNN所有层中的各个神经元。Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps

近来一些的AM算法则尝试对输出的样式进行在更加容易的解释和。总而言之,AM在解释神经元的interests和层次特征方面体现出了强大的能力。

Algorithm

AM算法是通过输入一帧合成样式图像xx^{*}来最大化神经元的**函数,其表达式可以为:

x=argmaxxai,l(θ,x) x^{*} = \mathop{argmax} \limits_{x} a_{i,l} (\theta, x)

其中θ\theta表示为网络参数(权重weight与bias)。

算法流程可以分为以下四部:
(1) 设置一个随机的输入图像,获得某一层(i)的特定卷积(l)的** ai,la_{i,l}
(2)在固定CNN参数的情况下,计算**ai,la_{i,l} 与 输入图像的梯度ai,lx\frac{\partial a_{i,l}}{\partial x}
(3) 通过迭代来更改输入图像的像素,从而使得**最大化。此处采用梯度上升算法:
x=x+ηai,lxx = x + \eta * \frac{\partial a_{i,l}}{\partial x}
(4)这个过程终止在一个特定模式图像x∗,当图像没有任何噪音。该模式被视为该神经元的首选输入

注意:

如果是可视化CNN最后一层,我们应该采取logits,而不是softmax过的概率。这是因为softmax是通过normalize最后一层的概率介于0-1之间,最大化类别概率可以通过降低其他类别的置信概率得到。

实验

这里提供keras-blog的例子,该例子实现在VGG16网络:
keras实现方法见:https://blog.keras.io/how-convolutional-neural-networks-see-the-world.html
我复现了tensorflow的方法见:https://github.com/XiaotianM/CNN_Visual_tensorflow
【深度学习】卷积神经网络的可视化---Visualization by activation Maximization