论文阅读笔记:Visualizing and Understanding Convolutional Networks

概要描述

这是一篇发表于2014年很经典的论文,形成了很多对卷积神经网络的普遍认识,目前的引用数为1315,主要工作是AlexNet的可视化,以及在此基础上做了一些分析,对于理解卷积神经网络很有裨益。

可视化方法

可视化方法主要是通过deconv的方法将某一层特征图的Top-k激活反向投射到原图像上,从而判断该激活值主要识别图像的什么部分。这就要求针对每一层都必须有对应的逆向操作。具体而言,对于MaxPooling层,在前馈时使用switch变量来记录最大值来源的index,然后以此近似得到Unpooling。对于Relu层,直接使用Relu层。而对于conv层,使用deconv,即使用原来卷积核的转置作为卷积核(PS:此文作者在2011年提出了deconvnet。本文引用了该文献。)。反向重建过程如下图所示:

论文阅读笔记:Visualizing and Understanding Convolutional Networks_第1张图片

特征分析

通过上面的可视化方法,作者对‘AlexNet的各层的Top-9`激活值进行了可视化,如下图所示:

论文阅读笔记:Visualizing and Understanding Convolutional Networks_第2张图片
论文阅读笔记:Visualizing and Understanding Convolutional Networks_第3张图片

分析上述特征图,作者发现了网络特征的层级特性。第二层对应边、角、颜色的识别,而第三层具有更多的不变性,捕获了一些纹理特征。第四层显示了类别的重要差异,比如狗的脸啊,鸟的脚等等。第五层则开始关注目标整体。这形成了对于神经网络的认识,底层网络专注于识别低级特征,更高层网络通过对下层低级特征的组合抽象形成更高级的特征。

作者利用这种可视化方法,找出了原AlexNet结构的问题(比如第一层缺少中频信息,第二层由于步长太大导致了一些叠加效应等等)并对结构进行了改变,之后进行了对比,发现改变之后的模型top-5性能高于原网络。作者还进行了遮挡敏感性和一致性分析,具体详见论文。

实验

此处的结果是最令我震撼的,它回答了一个久久困扰我的问题:为什么目前用的卷积网络都是VGG, ZF, ResNet之类的基于Imagenet的网络架构作为backbone network

首先,作者进行了网络结构尺寸调整实验。去除掉包含大部分网络参数最后两个全连接层之后,网络性能下降很少;去掉中间两层卷积层之后,网络性能下降也很少;但是当把上述的全连接层和卷积层都去掉之后,网络性能急剧下降,由此作者得出结论:模型深度对于模型性能很重要,存在一个最小深度,当小于此深度时,模型性能大幅下降。

然后,就是最震撼的结果了。作者使用AlexNet去做Caltech-101, Caltech-256PASCAL VOC 2012,得到以下结果:

论文阅读笔记:Visualizing and Understanding Convolutional Networks_第4张图片
论文阅读笔记:Visualizing and Understanding Convolutional Networks_第5张图片

解释一下,表中的Non-pretr表示没有使用Imagenet预训练结果,而是使用新的训练集重新训练,结果表现非常糟糕;而ImageNet-pretr表示使用了Imagenet的预训练结果,作者固定了原来网络的权值,只是使用新数据训练了softmax分类器,效果非常好。这就形成了目前的人们对于卷积神经网络的共识:卷积网络相当于一个特征提取器。特征提取器是通用的,因为ImageNet数据量,类别多,所以由ImageNet训练出来的特征提取器更具有普遍性。也正是因为此,目前的卷积神经网络的Backbone Network基本上都是Imagenet上训练出来的网络。那么试想一下,如果继续增加数据量,将类别扩展到10k、100k、 1M等等,是不是能够得到更加通用更好的特征提取器,如此,是不是就能向General AI更近一步呢?当然,这样做的话需要大量的投入,那么可不可以像人类基因组计划那样分工合作呢,那样的话,必将是一番很壮丽的景象。另外,也可以从其他角度进行考虑,可以类似于人类的认知方式,采用人类陪同教导的方式让机器持续学习,最后再综合起来,或许可以得到更好的AI。

One more thing

推荐一个很好的交互神经网络可视化网站:3D convolutional network visualization,可以很好地帮助理解神经网络的过程。友情提示:

  • 黑色和灰色表示负值,越黑越负;绿色表示正值,越亮越正;
  • 鼠标点击节点可以查看具体数值和其他相关信息。
  • 作者有相关论文;网络训练使用Matlab,展示使用JavaScrip
    放一张截图:
论文阅读笔记:Visualizing and Understanding Convolutional Networks_第6张图片
网页截图

你可能感兴趣的:(论文阅读笔记:Visualizing and Understanding Convolutional Networks)