Going deeper with convolutions(GoogleNet学习笔记)
原文:https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf
摘要:
GoogleNet在ILSVRC 2014比赛上被提出,它利用Inception结构使网络深度达到了22层,并在分类和检测上取得了新的最好的结果。这个架构的主要特点是提高了网络内部计算资源的利用率,同时在保证计算消耗不变的前提下,提升了网络的深度和广度。为了优化质量,架构的设计以Hebbian理论和多尺度处理直觉直觉为基础。(Hebbian理论描述了突触可塑性的基本原理,即突触前神经元向突触后神经元的持续重复的刺激,可以导致突触传递效能的增加。Hebbian理论在人工神经网络中的意义:突触间传递作用的变化被当作是(被映射成)神经元网络图中相应权重的变化。如果两个神经元同步激发,则它们之间的权重增加;如果单独激发,则权重减少。维基百科:https://zh.wikipedia.org/wiki/%E8%B5%AB%E5%B8%83%E7%90%86%E8%AE%BA)
1.引言
近年来,深度学习和卷积神经网络在分类和目标检测中的发展和进步,不仅仅是硬件性能的提升、新的数据集和更深的网络的结果,而更重要的是新的想法、算法以及网络结构的改善,并且深度学习的研究重点不应该完全在精确度上面,而更应该关注于网络结构的改善。
本文提出的Inception结构是受Network in network的启发得到的,同时作者提出要想取得更好的结果,当前的深度神经网络需要更深。在这里“深”有两层含义:(1)作者提出的Inception model是一种新的组织结构;(2)直观意义上的深,即网络层数更多。
2.相关工作
从LeNet-5开始,CNN通常有一个标准结构-堆叠卷积层(后面可以选择接normalization和max-pooling层)后面接一个或多个全连接层。各种基于此的变种模型在MNIST、CIFAR和ImageNet分类挑战赛上都取得了很好的成绩。对于更大的数据集比如ImageNet而言,最近的趋势是增加层的数目和层的大小,同时使用Dropout来解决过拟合问题。
受生物神经学的启发使用固定的多个Gabor滤波器来进行多尺度处理的方法,这与inception结构非常相似。但inception结构中的所有滤波器都是通过学习得到的。Inception层重复很多次,最终构成了GoogLeNet 22层的深层模型。
通过引用Network in network中对1x1卷积的使用来增加网络深度的做法,GoogLeNet也利用了1x1卷积来进行降维和限制网络尺寸的作用。
参考R-CNN将整个检测任务分为两个子问题的做法,即首先利用底层特征如颜色,文本等来进行提取与类别无关的proposals,然后将这些proposals放入CNN中进行训练来确定类别信息的做法。GoogleNet也借鉴这种方式,并对两个阶段都进行了改进,第一个阶段使用多边框预测以提高边界识别集合的召回率,第二个阶段则是使用更好的CNN网络结构。
3.动机与高层次的考虑
提高深度神经网络性能最直接的方法就是增大网络的尺寸,包括深度和宽度。深度就是神经网络的层数,宽度就是每层中所用到的神经元的个数。但是这种简单直接的解决方法存在两个问题:(1)更大的尺寸通常意味着更多的参数,这会使增大的网络更容易过拟合;(2)计算资源的显著增加。
解决上面两个问题的根本方法就是将全连接替换为稀疏连接结构。但是目前的计算设备对于非均匀的稀疏数据计算效率非常低下,即使是算术运算量减少100倍,分支预测和缓存的开销依然非常显著导致稀疏矩阵无法运用。ConvNets使用随机和特征维度的稀疏连接表,打破网络的对称性和改善学习效果,但为了更好地优化并行计算,趋势又重新回到了全连接。文章中提到将稀疏矩阵分解成稠密子矩阵进行计算加速,但同时指出稀疏矩阵在近期还不会用于深层网络的构建。
4.架构细节
Inception架构的主要思想就是考虑使用一个密集的网络去近似我们前面提到的那个最佳的稀疏的卷积神经网络,并在空间上不断重复这种结构。Arora等人提出了一个层级结构,对最后一层进行相关统计分析,将相关性较高的单元聚类在一起组成下一层,并连接到上一层的单元。假定我们在网络较浅层中提取的特征都是针对图像的某个部分,因此在较浅层中提取的特征主要是表达图像的局部特征。因此到最后我们能够得到图像中一个局部区域的多个特征,并把这些特征使用Conv 1*1的卷积层进行降维。同时,我们也可以使用较大的卷积核提取特征,由于卷积核增大,它对应的图像区域就会更大,因此我们就不需要使用那么多的patches,而为了避免patch-alignment,作者目前实现的inception架构中,卷积核的大小分别为1*1,3*3,5*5。作者提到的Inception架构就是将图像进行卷积后提取得到的feature map进行组合作为输出,同时作者也提到了,max pooling在卷积神经网络中也取得了很好的成果,因此除了以上提到的3中卷积核,还有使用max pooling提取的结果,结构如下图所示:
如上图这种Inception结构的最大问题就是需要大量的计算,即使是少量的5*5的卷积也会导致计算爆炸,因为filter数量可能非常大。当pooling加进去时,问题会变得更加严重,因为pooling输出的filter数量与前一层的filter数量是一样的。pooling和其他卷积输出合并后filter数量必然会增加,而且随着inception的数量递增。因此作者提出了下图中的结构,这种改进的结构在计算可能大量增加的地方使用降维和映射。1*1的卷积被用于在3*3和5*5的卷积前和3*3的最大池化后进行降维,并且在1*1的卷积后接ReLU增加网络的非线性。(注意:这里的每个1×1卷积后面都要跟ReLU等激活函数,使得网络具有非线性)
以上就是改进后的inception的架构,GoogleNet就是由多个上面的Inception model堆叠起来的,其中Inception model之间可能通过max pooling使得feature map大小减小(注意,这里的max pooling不是inception model中的max pooling)。作者提出,从技术层面上出发(memory efficiency),最好前几层按照正常的CNN网络的套路来,在深层的时候使用inception model,然而这也不是一定要严格遵守的。
作者提出,使用Inception model的好处就是得益于1×1卷积层的降维,使得我们可以在不显著增加计算量的情况下增加网络的深度和宽度,使得网络具有更强的学习能力。同时根据人们的直觉感官来看,视觉信息经过不同尺度的处理结果会更好,而Inception的另一个好处就是可以提取来自不同尺度下的特征,使得下一层可以得到来自不同尺度的特征。作者最后提出,具有Inception结构的网络可以比与它具有相同识别结果但没有inception结构的网络快上3~10倍。
5.GoogleNet
GoogleNet网络结构如下所示:
表1为GoogLeNet的网络框图细节,其中“#3x3 reduce”,“#5x5 reduce”代表在3x3,5x5卷积操作之前使用1x1卷积的数量。在pool proj列可以看到内置的最大池化之后,投影层中1×1滤波器的数量。输入图像为224x224x3,且都进行了零均值化的预处理操作,所有卷积都是用了ReLU非线性激活函数,包括Inception模块内部的卷积。作者在最后使用average pooling代替FC层,提高了大约top-1 %0.6的准确率,然而即使在移除了全连接层之后,Dropout的使用还是必不可少的。作者使用的22层的神经网络是按照depth列中数值相加计算得到的,每个Inception算两层(因为有1×1卷积层)。
如下图用到了辅助分类器,Inception Net有22层深,除了最后一层的输出,其中间节点的分类效果也很好。因此在Inception结构中,还使用到了辅助分类节点(auxiliary classifiers),即将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中。这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,有利于整个Inception Net的训练。通过后面的实验看出辅助的分类器作用并不明显,并且不需要两个,有一个就可以达到同样的效果。
旁边额外的网络(包括辅助的分类器)的具体结构如下:
* filter大小为5x5、stride为3的average pooling,对于(4a)输出大小为4x4x512,对于(4d)输出为4x4x528
* 用于降维的1x1卷积,filter数为128,ReLU激活
* 输出为1024的全连接层,ReLU激活
* ratio为70%的dropout层
* softmax损失的线性分类器(与主分类器一样预测1000个类别,但预测时移除)
6.训练方法
训练使用异步随机梯度下降,动量参数为0.9,固定学习率(每8轮迭代学习率下降4%),Polyak平均用于生成预测时的模型。
图像采样方法,包括各种尺寸的图像块的采样,它的尺寸均匀分布在图像区域的8%——100%之间,方向角限制为[3/4,4/3]之间。另外,作者发现Andrew Howard[8]的光度扭曲对于克服训练数据成像条件的过拟合是有用的。
7.ILSVRC14分类和检测比赛结果
GoogleNet在ILSCRVC 2014分类和检测比赛上获得最好的成绩。
8.总结
GoogleNet的成功证明了通过易获得的密集构造块来近似期望的最优稀疏结果是改善计算机视觉神经网络的一种可行方法,即Inception结构。GooLeNet通过使用Inception网络结构提取了图像中多个尺度的信息,也就能够提取更多的特征,而同时使用1×1大小的卷积层进行降维,使得计算量大幅降低。
参考帖子:
1.GoingDeeperwithConvolutions——GoogLeNet论文翻译——中英文对照:https://blog.youkuaiyun.com/Quincuntial/article/details/76457409?locationNum=7&fps=1
2.[深度学习] Going Deeper with Convolutions(GooLeNet)阅读笔记:https://blog.youkuaiyun.com/lhanchao/article/details/55804968?locationNum=13&fps=1
3.GoogLeNet论文学习笔记:https://blog.youkuaiyun.com/chenhoujiangsir/article/details/52400541