这篇文章采用反卷积的思想实现CNN特征可视化,首先介绍一下什么是反卷积网络。

反卷积

我们都知道CNN主要是由卷积层和下采样(pooling)层来构建网络结构,一层一层,通过对上一层的输出进行卷积或者pool从而得到维度小一点的feature maps。

反卷积网络则是一个让特征图像学着映射到原图像的方法,经典的反卷积网络类似于自编码网络,利用卷积网络,采用无监督学习的方法,让每一层的特征图得到原图中的特征。在反卷积网络中,对于每一层的feature maps 来说,他们的学习目标就是,最小化他们反卷积得到的结果与真实输入图像之间的重构误差,同时尽可能小并保持特征图像的稀疏性。

刚才讲的经典反卷积网络本身是无监督学习的,但是在这篇文章里面以及我们所要实现的声学项目中所牵涉的反卷积网络是没有学习的,这篇文章仅仅是利用反卷积实现特征可视化,并未参与学习。

声学项目使用反卷积的目的也不是参与学习,仅仅是为了重建图像。

反激活

CNN可视化论文阅读_卷积           Relu=max(x,0)

Relu函数是用于保证卷积层输出的激活值都是正数,因此对于反卷积过程,我们同样想要保证每个卷积层的特征图为正值,也就是说这个反激活过程和激活过程没有什么差别,都是直接采用Relu函数。

反池化(unpooling)

CNN可视化论文阅读_卷积网络_02

池化操作,以max-pooling为例,是在对一个感受野的区间内,只保留最大值,例如图左边。以这个二维坐标,绿色区域中,最大值0.8在x=2,y=1的位置,黄色区域中1.2在x=1,y=2的位置。

反池化操作使用这些转换来放置上述最大值的位置,保存激活的位置,其余位置都置0

pooling是一个下采样的过程,本来4*4大小,经过pooling后,就变成了2*2大小的了。而upooling刚好与pooling过程相反,它是一个上采样的过程,当我们有一个2*2大小的feature map要扩展到4*4大小的时候,我们需要借助于pooling过程中的位置信息,在unpooling过程的时候,将数值放置上述最大值的位置,保存最大激活的位置,其余位置都置0。这就是反池化操作

CNN可视化流程

CNN可视化论文阅读_CNN可视化_03

网络的整个过程,从右边开始

CNN可视化论文阅读_池化_04