Visualizing and Understanding Convolutional Networks(神经网络可视化)理解
作者的核心思想要点:
feature map的可视化
一般的卷积神经网络某一层的输出,都是将Input Image,经过多次的Conv、ReLU、Pooling作用后的得到的结果。
举个简单又不失一般性的单层卷积神经网络模型:
现在我们想知道Pooling后得到的96个112x112的feature maps中的一个feature map到底学到的是啥?怎么做?
一个直观的想法是将112x112x96的feature maps(除了选定的feature map**值保留,其他95个112x112的feature map全部置零),原路逆操作回Input,再normalize到图片像素范围,看看得到的是啥图片即可。如下图:
想法是很好,但Pooling的的Unpooling,ReLU的UnReLU,Conv的DeConv具体应该怎么做?
UnReLU比较简单,可以也采用ReLU。作者的创意主要在DeConv和Unpooling。
转置卷积
理想的反卷积DeConv,是能够完全由卷积的输出还原输入,但这是做不到的。卷积是一个有信息损失的操作。转置卷积是最接近理想反卷积的。
如上图,上半部分是正常的卷积,将4x4的feature map映射为2x2的。下半部分就是转置卷积,它将卷积输出,利用相同的卷积核(需做水平和垂直翻转)再映射回输入(可依需添加padding)。需要注意的是,还原的输入跟原始输入是不相等的,这也是转置卷积不是理想的反卷积的原因。
Unpooling
上图给出了Unpooling的基本流程。主要创意在于Pooling过程中,需要记录下Pooling后的每个数据的来源位置,在Unpooling过程中,按位置,将数据还原,其他补零。
看到了什么?
有了上述的转置卷积和Unpooling,给定卷积神经网络的任一卷积层的输出,都可以将其还原回Input image,再normalize到图片像素范围,即可可视化卷积层的feature map。
下图给出了ZFNet(作者经过可视化分析之后,提出的一个网络)的第三个卷积层随机挑选的12个feature map,在验证集上top9的**值的可视化,右边是对应的原始输入图片。
作者还进行了其他的对比试验,论文中最详细,这里就不赘述了。