概要描述
这是一篇发表于2014年很经典的论文,形成了很多对卷积神经网络的普遍认识,目前的引用数为1315
,主要工作是AlexNet
的可视化,以及在此基础上做了一些分析,对于理解卷积神经网络很有裨益。
可视化方法
可视化方法主要是通过deconv
的方法将某一层特征图的Top-k
激活反向投射到原图像上,从而判断该激活值主要识别图像的什么部分。这就要求针对每一层都必须有对应的逆向操作。具体而言,对于MaxPooling
层,在前馈时使用switch
变量来记录最大值来源的index
,然后以此近似得到Unpooling
。对于Relu
层,直接使用Relu
层。而对于conv层
,使用deconv
,即使用原来卷积核的转置作为卷积核(PS:此文作者在2011年提出了deconvnet
。本文引用了该文献。)。反向重建过程如下图所示:
特征分析
通过上面的可视化方法,作者对‘AlexNet的各层的
Top-9`激活值进行了可视化,如下图所示:
分析上述特征图,作者发现了网络特征的层级特性。第二层对应边、角、颜色的识别,而第三层具有更多的不变性,捕获了一些纹理特征。第四层显示了类别的重要差异,比如狗的脸啊,鸟的脚等等。第五层则开始关注目标整体。这形成了对于神经网络的认识,底层网络专注于识别低级特征,更高层网络通过对下层低级特征的组合抽象形成更高级的特征。
作者利用这种可视化方法,找出了原AlexNet
结构的问题(比如第一层缺少中频信息,第二层由于步长太大导致了一些叠加效应等等)并对结构进行了改变,之后进行了对比,发现改变之后的模型top-5
性能高于原网络。作者还进行了遮挡敏感性和一致性分析,具体详见论文。
实验
此处的结果是最令我震撼的,它回答了一个久久困扰我的问题:为什么目前用的卷积网络都是VGG
, ZF
, ResNet
之类的基于Imagenet
的网络架构作为backbone network?
首先,作者进行了网络结构尺寸调整实验。去除掉包含大部分网络参数最后两个全连接层之后,网络性能下降很少;去掉中间两层卷积层之后,网络性能下降也很少;但是当把上述的全连接层和卷积层都去掉之后,网络性能急剧下降,由此作者得出结论:模型深度对于模型性能很重要,存在一个最小深度,当小于此深度时,模型性能大幅下降。
然后,就是最震撼的结果了。作者使用AlexNet
去做Caltech-101
, Caltech-256
和 PASCAL VOC 2012
,得到以下结果:
解释一下,表中的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
。
放一张截图: