这是一篇14年的老文章:Visualizing and Understanding Convolutional Networks,文中针对的模型为12年的 AlexNet,从可视化的角度对卷积神经网络的理解提出了一个新的视角。网络
做者可视化卷积网络的手段为添加新的反卷积模块,以下图所示:框架
将感兴趣层的卷积网络输出的特征中选取一个激活单元(通常取最大的),特征中其余单元所有置零,送入一个等效的反卷积网络,还原输出大小。函数
网上找到的示意图,出处见水印,展现了反最大池化的流程。post
relu 函数的反向仍为 relu 函数,各个框架反向传播的实现也确实是这么写的。学习
反卷积实现逻辑如上图(出处见水印),不过本文种描述的方法是将对应层的卷积核转置便可,和印象中的处理不太一致,不过这不是本文重点,咱们只要知道这里能够还原卷积便可,权且略过,转置卷积逻辑见:『TensotFlow』转置卷积。spa
做者首先对比了不一样 layer 提取到的特征:设计
做者给咱们显示了在网络训练过程当中每一层学习到的特征是怎么变化的,上面每一整张图片是网络的某一层特征图,而后每一行有8个小图片,分别表示网络epochs次数为:一、二、五、十、20、30、40、64的特征图 :htm
(1) 从层与层之间作比较,咱们能够看到,低层在训练的过程当中基本没啥变化,比较容易收敛,高层的特征学习则变化很大,收敛须要较多轮数blog
(2) 从高层网络conv5的变化过程,咱们能够看到,刚开始几回的迭代,基本变化不是很大,可是到了40~50的迭代的时候,变化很大,说明高层会在高轮数后快速收敛(训练时不要心急233)
而后讨论了不一样层 layer 提取特征的不变性:
上图解释:
第一列表示原图的各类变换(a为平移,b为放缩,c为旋转)
第二列表示layer1层特征在原图变换先后的像素欧式距离,横坐标为平移像素距离/放缩倍数/旋转角度
第三列表示layer5层特征的变换先后像素间欧式距离
第四列表示真实类别的得分变化状况
做者但愿说明底层特征对原图的变换很敏感 高层特征对原图的某些变换并不敏感,平移变换和放缩变换时高层特征欧式距离变化近似线性 卷积神经网络对平移和放缩不变性较好,可是除了特定图片(自己形状特殊)外,旋转对网络影响很大。
再以后做者探讨了图像特定位置对分类的贡献:
上图解释:
第一列表示原图及遮挡示意图
第二列表示遮挡中心所在不一样位置时layer5最大激活值变化
第三列简单的可视化layer5的最大激活值
第四列表示遮挡中心所在不一样位置时真实类别得分的变化
第五列表示遮挡中心所在不一样位置时最高得分类别的变换
这里面咱们须要注意,layer5 并非最高层,也就是 layer5 和 classifier 之间还有其余的高层语义信息存储层。
对于第一行:
c图可见layer5特征主要针对狗头
b图可见遮挡住狗头,那么layer5的激活单元最大值会明显下降
d图可见遮挡住狗头,分类为狗的得分会明显下降
e图可见遮挡其余位置最高得分都是分类为狗,可是遮挡住狗头后最高得分为网球
对于第二行:
c图可见layer5特征主要针对车身标语
b图可见遮挡住车身标语,那么layer5的激活单元最大值会明显下降
d图可见遮挡住车轮,分类为车轮的得分会明显下降
e图可见分类为车轮这一决定是很脆弱的,随随便便就会分给其余类别
对于第三行:
c图可见layer5特征主要针对人脸
b图可见遮挡住人脸,那么layer5的激活单元最大值会明显下降
d图可见遮挡住狗,分类为狗的得分会明显下降
e图可见虽然layer5特征针对人脸,可是分类器很好的学到了狗的特征,只要不遮挡住狗,分类器能够很好的识别出狗的类别(由标签可见这是一个单独识别狗种类的数据集,因此人脸特征没什么干扰)
进一步的验证 layer5 和 最终 layer7 的特征信息实验以下:
狗种类随机遮挡分类实验,layer5 在遮挡眼睛或鼻子后激活值相比随机遮挡降低明显,layer7则没什么变化,由此推测:layer5较为具体的检测狗头,layer7更侧重抽象的狗类别信息。
因为是篇老文,我感受本文的不少部分(包括指导设计更高效网络的部分)对当下已经没什么参考意义了(谁知道1五、16年分类网络精度上天了),因此仅将我以为对当下比较有学习价值的部分展现出来,从侧面一窥黑箱里的秘密。