可视化与理解卷积网络的探讨
卷积网络模型自问世以来,对AI技术的发展起了很大的推动作用。但其复杂的模型结构,庞大的参数规模也给模型优化带来很多问题。如果问某个参数的值问什么是3而不是6,很难得到有根据的回答。发表于2013年11月的论文《Visualizing and Understanding Convolutional Networks》系统展示了如何可视化卷积网络,并根据可视化后观察到的现象优化模型取得更好识别结果。本文根据个人的理解,对论文阐述的方法和实践作粗浅总结。
问题的提出
Convolutional Networks卷积网络由LeCun等于1989年提出,并在手写数字的识别上展示出其优异性能。在过去18个月(论文发表时)在图像分类任务应用上也取得出色表现。在ImageNet 2012 上,Krizhevsky使用卷积网络降低到16.4%的错误率,而第二名的错误率达到26.1%。尽管取得了很多进展,仍然对复杂的卷积模型的内部操作缺乏了解,也不能明确是如何取得好的表现。如果不理解它们如何工作和为什么有效,也就意味着开发更好的模型需要更多多的试错。
针对这个问题,文中所做的研究包括
1.对每一层模型的输入特征,观察训练过程中特征的演化。作者使用了Zeiler2011提出的多层反卷积网络,投射出输入层的像素空间。
2.进行敏感性分析,即通过遮盖图像的部分区域,找到图像的哪个部分是对分类结果是重要的。
通过这些研究,从Krizhevsky的模型架构开始优化,发现在ImageNet上更好表现的模型。
相关工作:
可视化,可视化化特征可以得到对网络的直觉,一般都只在第一层的图像,更高层的可视化非常复杂,简单的二次近似很难做到。
特征泛化,作者演示了卷积网络如何用于Caltech101的图像分类和PASCAL VOC的对象识别。
解决方法
作者在文中所使用的方式有:
卷积模型是LeCun等人定义,通过不同卷积层映射2维图像,最后的结果向量预测y值。
每一层的组成:
上一层输出
激活函数,通常为(relu(x)=max(x,0))
最大池化
局部对比度标准化
训练模型使用了大量标注过标签的图片,得到的训练结果是图片类别标签,交叉熵用于评估结果的误差损失。训练过程中需要优化的网络模型参数包括卷积层的卷积核参数、全联接层的权重weight与偏置bias,每次训练迭代后通过损失的反向传播更新这些参数。
1.通过反卷积网络可视化,可以理解中间层的卷积操作发生了什么。反卷积网络使用了卷积模型相同的组件(激活,池化),但是相反的方向。通过在每一层卷积层关联反卷积网络,提供了一直回溯到图片像素的路径。为了检验卷积的某个激活,把这个层上其它激活置为0,并输入到反卷积层,然后不断反池化,反激活,反卷积直到输入的像素空间。
- 反池化:卷积操作中的最大池化是不可逆的,然而我们可以通过记录一组开关变量的每个池化区域的最大值得到近似反向值。
- 反激活:卷积网络使用relu非线性激活函数,保证特征映射到正值,重建的特征也需要是保证正值,所以也使用了relu非线性激活函数。
- 反卷积:卷积网络学习过的过滤器卷积每一层的特征。为了近似反向操作,反卷积网络使用正向操作相同过滤器但经过转置操作,通过开关设置逐渐还原原始图像的一小片区域
这张图显示了作者实现卷积可视化的整体结构,右边是正向的卷积训练,左边是反卷积重建。可以看到右边输入图片的不同区域卷积之后,在左边经过反卷积重建出图片。
训练细节
作者训练所使用的模型架构如下:
整个卷积模型分为8层。输入层是边长224*224的RGB正方形图片,第一层的卷积核共有96个,每个大小是7*7,x和y方向的步长都是2.结果特征图会经过:ReLU激活,3*3的最大池化,对比度标准化。同样的操作在2,3,4,5层重复。最后2层全联接层,输入向量为6*6*256=9216个维度,最终通过C-way softmax输出结果。
于Krizhevsky的训练模型相比,作者在3,4,5层使用了稠密连接而不是稀疏连接,第1,2层过滤器和步长也有所不同。每个批次训练128次,学习率是0.01,权重初始化为0.01,偏置设置为0.
卷积可视化
在使用以上模型的同时,我们使用反卷积可视化在ImageNet验证数据集上的特征激活。
特征可视化
对每个特征图,作者挑选了9个激活区域,每个对应像素空间的不同区域。从中可以观察到不同区域对激活的影响。
文中所举例说明,红色框内的图片显示原始图中的草地对激活影响更大,而不是草地前的待识别对象。
模型中 每一层的映射也显示出被识别对象的特性层次。如第2层反映出角和其它边/颜色的交汇,第3层捕捉到纹理模式,第4层显示了狗的脸或鸟的腿,第5层 就显示出整个物体,如键盘,狗等。。
训练过程中的特征演化
通过可视化和观察训练过程中的特征图变化,在模型靠前层少数几个epoch,而靠后的层需要比较多的epoch(40-50)才会充分汇集特征。
架构选择
通过可视化预训练模型的内部操作,可以帮助选择更好的模型架构。作者通过可视化Krizhevsky所用模型的第1,2 层,发现了不同问题。第1层 混合了特别高频和低频的信息 ,同时覆盖了部分 中频信息。(这里的高频低频是指图像中灰度变化剧烈程度的指标)
第2层的可视化表现出锯齿假影,是由第一层卷积采用较大的4步长有关。为了解决这些问题,作者采取以下措施:1,把第一层的卷积核从11*11改为7*7; 2,把步长从4改为2。
新的架构在训练中保留了更多信息,也在改进了分类结果的表现。
作者对CNN网络内中间特征和分类操作提供了一种新的可视化方法,研究了不同模型层对模型表现的贡献。优化之后的模型架构,也表现出较好的泛化能力。作者就对ImageNet训练后,在Caltech-101 and Caltech-256上也取得了较好的效果。
遮盖敏感度
在图片分类中,一个基本问题是模型是否真正的识别了目标对象,还是用背景环境做出的判断。为了找到答案,文中使用灰色方块遮盖了图片中的不同位置,然后观察输出的分类。如果遮住识别对象后分类成功率下降,说明模型实在使用正确的识别对象。
实验对比
作者分别使用了2个模型,一个是Krizhevsky在论文《ImageNet Classification with Deep Convolutional
Neural Networks》中所使用的
一个是作者设计的模型,在前面训练细节中有描述。然后分别使用可视化卷积方法后优化调整模型的的对应参数,都取得了明显改进。
另外,为了检验模型的泛化能力,作者把ImageNet数据集训练过的模型到Caltech256上测试。测试之前先把每个类别中的6个样本做了训练,并在测试集合上取得较好的结果。
延伸阅读
作者开创性的使用反卷积模型观察和优化卷积模型的表现,Arxiv上显示被引用次数高达9576,可见对卷积模型的应用和发展产生巨大影响。例如这篇《ImageNet Classification with Deep Convolutional Neural Networks》,尝试把反卷积模型接在正向卷积模型之后,在还原出的图片上做分段标注,改进了原来只用正向卷积模型无法 识别图片中较小对象的问题。
Visualizing and Understanding Convolutional Networks:
ImageNet Classification with Deep Convolutional Neural Networks:
https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdfpapers.nips.cc文中所提到的数据说明:
Caltech101 这个数据集包含了101类的图像,每类大约有40~800张图像,大部分是50张/类; 在2003年由lifeifei收集,每张图像的大小大约是300x200。
Caltech256 共 30607 张图片,256个分类,其中 29 个分类与Caltech-101重合.
ImageNet项目是一个大型视觉数据库,用于视觉目标识别软件研究。该项目已手动注释了1400多万张图像,以指出图片中的对象,并在至少100万张图像中提供了边框。ImageNet包含2万多个典型类别,例如“气球”或“草莓”,每一类包含数百张图像。