1. AlexNet(2012年度ILSVRC挑战冠军)
论文题目:ImageNet Classification with Deep Convolutional Networks
这篇文章算是深度学习的起源(尽管有些学者认为Yann LeCun在1998年的论文paper才是真正的起源)。文章标题是“ImageNet Classification with Deep Convolutional Networks”,已经获得了共6184次引用,并被广泛认为是业内最具深远影响的一篇。Alex Krizhevsky, Ilya Sutskever, 以及Geoffrey Hinton三人创造了一个“大规模、有深度的卷积神经网络”,并用它赢得了2012年度ILSVRC挑战(ImageNet Large-Scale Visual Recognition Challenge)。ILSVRC作为机器视觉领域的奥林匹克,每年都吸引来自全世界的研究小组,他们拿出浑身解数相互竞争,用自己组开发的机器视觉模型/算法解决图像分类、定位、检测等问题。2012年,当CNN第一次登上这个舞台,在前五测试错误率top 5 test error rate项目上达到15.4%的好成绩。(前五错误Top 5 error指的是当输入一幅图像时,模型的预测结果可能性前五中都没有正确答案)。排在它后面的成绩是26.2%,说明CNN相对其它方法具有令人震惊的优势,这在机器视觉领域引起了巨大的震动。可以说,从那时起CNN就变成了业内家喻户晓的名字。
这篇文章主要讨论了一种网络架构的实现(我们称为AlexNet)。相比现在的架构,文中所讨论的布局结构相对简单,主要包括5个卷积层、最大池化层、丢包dropout层,以及3个全连通层。该结构用于针对拥有1000个可能的图像类别进行分类。
论文要点:
1. 采用了首创的结构(如上图),5个卷积层和3个全连接层。第1个卷积层后接LRN层和pooling层,第3,4,5层间无pooling和normalization层。
2. 使用ReLU激活函数。实验表明,比起tanh激活函数,ReLU激活函数使得训练速度加快。
3. 在多GPU上训练模型。
4. 局部响应归一化(Local response Normalisation). 因为ReLU使得输出变得不受拘束,即可为无穷大。需要用LRN进行归一化处理。现在这个层已经逐渐被淘汰,用batch normalisation 或者dropout来代替。
5. 重叠池化(overlapping pooling)。一般的池化是池化窗口的大小和移动步长是相等的,即不可能有重叠的部分。但重叠池化是池化窗口的大小大于移动步长。实验结果表明,能降低模型的错误率。详细可看:http://blog.csdn.net/danieljianfeng/article/details/42433475
6. 用data augmentation的方法解决overfitting的问题。其一是图像变换、水平反射、块提取等。其二是调整RGB通道的色彩强度。利用PCA获取主成分,然后利用特征值和从[0,1]高斯分布的产生的随机数的积作为新的值。
7. 用dropout解决overfitting的问题。在前2个卷积层用dropout,概率为0.5。
8. 使用批量随机梯度下降法batch stochastic gradient descent进行训练,为动量momentum和权重衰退weight decay设定限定值。
9. 没用利用非监督学习的pre-training,尽管没有实现,但是作者相信这个能帮助模型提高性能。
2. ZF NET(2013年度ILSVRC挑战冠军)
论文题目:Visualizing and Understanding Convolutional Neural Networks
AlexNet在2012年大出风头之后,2013年随即出现了大量的CNN模型。当年的的ILSVRC比赛胜者是来自纽约大学NYU的Matthew Zeiler以及Rob Fergus设计的模型,叫做ZF Net。它达到了11.2%的错误率。ZF Net的架构不仅对之前的AlexNet进行了进一步的优化,而且引入了一些新的关键技术用于性能改进。另外一点,文章作者用了很长的篇幅讲解了隐藏在卷积网络ConvNet之下的直观含义以及该如何正确地将滤波器及其权重系数可视化。
当前存在的问题:
Zeiler和Fergus提出CNN的复兴主要依靠的是大规模训练集以及GPU带来的计算能力飞跃。他们指出,目前短板在于研究人员对模型的内部运行机理知之甚少,若是不能解决这个问题,针对模型的改进就只能依靠试错。“development of better models is reduced to trial and error”. 虽然相较3年前,我们现在对模型有了进一步的了解;然而这依然是一个重要问题。
解决的问题:
改进了AlexNet的细节及其可视化特征图层feature map的表现方式
论文要点:
1. 当前导致性能提高的因素:(i) 可获得更大的数据集; (ii) GPU的发展; (iii)更好的泛化技术,比如dropout。
2. 利用反卷积进行可视化。反卷积可以看作是卷积的逆过程,做一个从特征到像素的映射。
(1) 为了测试卷积的激活函数,我们将该层的激活函数都设置为0,然后将特征map传到反卷积层。
(2) Unpooling: 顾名思义,unpooling就是反pooling。由于pooling是不可逆的,所以unpooling只能是pooling的一种近似表达。通过记录正常pooling时的位置,把传进来的特征按照记录的方式重新摆放。
(3) Rectification: 将重建的信号传入ReLU激活函数。
(4) Filtering: 反卷积利用卷积的filter的转置(也就是水平和垂直翻转)来计算卷积前的特征图。从一个单独的特征值获得的图片重构类似原始图片的一部分。
这个方法的缺点就是只能可视化一个激活函数,而不能可视化所有激活函数共同作用的结果。
3. 文章的另一个贡献是利用可视化来调整神经网络的结构。AlexNet的改进细节如下:
(1) 将局部连接改成全连接。
(2) 将第一层的卷积核由11*11改为7*7。因为从可视化中发现第一层filter滤出来的结果包含非常多高频和低频的信息,中间频率的filter很少覆盖。
(3) 将第一层的步长由4改为2。因为第二层的可视化比较混淆,由于第一层比较大的步长导致的。
(4) Bias都初始化为0。
4. CNN可视化特点:
(1) 每张特征图激活值具有聚集性。
(2) 高层具有更好的不变形。
(3) ‘夸张’的图像判别部分。估计应该是高层特征可视化后能够还原原图的大部分。
(4) 每层的卷积结构能够学习分层的特征。
(5) 底层的卷积最先收敛,高层的特征需要在充分的训练后才能收敛。
5. CNN能够鉴别物体在图像中的位置。本文通过一个灰色方块,遮盖物体的不同位置,然后监控分类器的输出,最后结果证明模型定位了场景中的物体。
3. VGG NET(2014年度ILSVRC优秀模型)
论文题目:Very Deep Convolutional Networks for Large-Scale Image Recognition
这篇文章比较简单但是富有深度。因为该文章着重讨论了深度对卷积神经网络的影响,并且证明它的模型在不同数据集上具有很好的泛化。
论文要点:
1. 牛津大学的Karen Simonyan以及Andrew Zisserman两位创造了一个19层的CNN,网络中仅使用了3*3尺寸的滤波器,步长stride和填充padding都为1,池化层使用2*2的最大池化函数,步长为2。仅使用3*3滤波器,这与之前的AlexNet的首层11*11滤波器、ZF Net的7*7滤波器都大不相同。作者所阐述的理由是,两个3*3的卷积层结合起来能够生成一个有效的5*5感知区。因此使用小尺寸滤波器既能保持与大尺寸相同的功能又保证了小尺寸的优势。优势其中之一就是参量的减少,另一个优势在于,针对两个卷积网络我们可以使用多一个线性整流层ReLU。
2. 输入图像的空间尺寸随着层数增加而减少(因为通过每层的卷积或是池化操作),其深度反而随着滤波器越来越多而增加。
3. 每个最大池化层之后,滤波器数量都翻倍,这进一步说明了数据的空间尺寸减少但深度增加。模型不仅对图像分类有效,同样能很好地应用在本地化任务中(翻译任务)。作者在文章中进行了一系列的回归分析说明此事。也就是将图片从横向的长度逐渐变成纵向的长度。
4. 在训练中使用了尺寸抖动技术scale jittering进行数据扩容data augmentation,取得更好的性能表现。
5. 每卷积层后紧跟一个线性整流层ReLU并使用批量梯度下降法batch gradient descent进行训练。
4. GoogLeNet(2014年度ILSVRC挑战冠军)
论文题目:Going Deeper with Convolutions
GoogLeNet是一个22层的CNN,它以6.7%的错误率赢得了2014年度ILSVRC的冠军。这是第一个跟传统方法,也就是卷积层与池化层简单叠加以形成序列结构的方法不同的一种CNN的新架构。值得一提的是,与2012年的AlexNet模型相比,GoogLeNet的参数减少了近12倍,但是精度却提高了。文章作者强调,他们的新模型也特别重视内存与计算量的使用。
当前存在问题:
增加神经网络的深度和广度能够提高模型的性能,但是它存在着两个主要缺点。
1. 更深更广的神经网络意味着参数的增加,这将导致overfitting。
2. 神经网络规模的增大无疑将导致计算量的增大。
解决方法:
文章认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。
早些的时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。
所以,现在的问题是有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此论文提出了名为Inception 的结构来实现此目的。
论文要点:
1. naive Inception module.
(1) 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合。
(2) 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了。
(3) 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
(4) 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。
但是,使用5x5的卷积核仍然会带来巨大的计算量。
2. improved Inception module.
举个例子。
输入是一个28x28x192的图像,1x1的卷积核尺寸是1x1x64, 3x3的卷积核尺寸是3x3x128, 5x5的卷积核尺寸是5x5x32。
用naive inception module的话,参数的个数是:
1x1x192x64 + 3x3x192x128 + 5x5x192x32 = 387072
用improved inception module的话,参数的个数是:
1x1x192x64+ (1x1x192x64+3x3x64x128) +(1x1x192x64+5x5x64x32) = 161792
所以可以看出,用了1x1的卷积核,起到了降维的作用。
计算不懂可以看http://blog.csdn.net/v_july_v/article/details/51812459。
3. GoogLeNet采用了结构化的结构,并且不是串行执行,很多模块都是可以并行执行。
5. GoogLeNet V2
论文题目:Rethinking the Inception Architecture for Computer Vision
实验证明,GoogLeNet确实比AlexNet和VGGNet好得多。一方面体现在内存上,使用了比AlexNet少12倍的参数。另一方面体现在计算量上。极大的减少了计算量。
当前存在问题:
GoogLeNet的复杂结构导致很难对该网络进行改变。如果只是简单的对网络进行规模的扩大,那么将对网络计算量造成快速的上升。
解决的问题:
本论文就目前存在的问题而言,提出了几个基本的原则,为大家在实验上提供大方向的指导。此外,提出了一个新的inception module。
论文要点:
1. 通用原则
(1) 避免表达瓶颈,特别是在网络靠前的地方。信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。比如你上来就来个kernel = 7, stride = 5 ,这样显然不合适。另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)
(2) 高维特征更易处理。高维特征更易区分,会加快训练。
(3) 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。比如在进行3x3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。
(4) 平衡网络的宽度与深度。
2. 将大尺寸滤波器的尺寸进行卷积的因式分解
大尺寸的卷积核可以带来更大的感受野,但也意味着更多的参数,比如5x5卷积核参数是3x3卷积核的25/9=2.78倍。为此,作者提出可以用2个连续的3x3卷积层(stride=1)组成的小网络来代替单个的5x5卷积层,(保持感受野范围的同时又减少了参数量),如下图:
(1 ) 这种替代会造成表达能力的下降吗?后面有大量实验可以表明不会造成表达缺失。
(2) 3x3卷积之后还要再加激活吗?作者也做了对比试验,表明添加非线性激活会提高性能。
3. 空间分解成不对称卷积
从上面来看,大卷积核完全可以由一系列的3x3卷积核来替代,那能不能分解的更小一点呢。文章考虑了nx1 卷积核。如下图:
于是,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现在网络的前期使用这种分解效果并不好,还有在中度大小的feature map上使用效果才会更好。(对于mxm大小的feature map,建议m在12到20之间)。
4. inception结构演变
(1) 图4是GoogLeNet V1中使用的Inception结构。
(2) 图5是用3x3卷积序列来代替大卷积核。
(3) 图6是用nx1卷积来代替大卷积核,这里设定n=7来应对17x17大小的feature map。该结构被正式用在GoogLeNet V2中。
6. Microsoft ResNet(2015年度ILSVRC挑战冠军)
论文题目:Deep Residual Learning for Image Recognition
想象一个很深的CNN架构,把它的层数翻两番,它的深度可能还比不上ResNet,它是微软亚研MRA在2015年提出的架构。ResNet是一个拥有152层网络架构的新秀,它集分类、检测与翻译功能于一身。除开层数破了纪录,ResNet自身的表现也破了ILSVRC2015的记录,达到了不可思议的3.6%(通常人类也只能达到5~10%的出错率,跟专业领域和技能相关)。
当前存在问题:
许多实验结果证明,神经网络随着层数的增加,模型的性能会更好。但是,仅仅是简单的堆积网络层数就能取得越来越好的性能吗?答案是否定的。这之间的一个障碍就是梯度爆炸/梯度消失。这个问题一开始能被初始规范化和添加中间规范层解决。但是当深度神经网络开始收敛时,新的问题出现了。那就是性能退化。当神经网络深度增加时,准确率会逐渐饱和,随后急剧下降。这意味着,到一定程度后,增加神经网络的层数会导致准确率下降。但这个并不是由于过拟合造成的。
解决的问题:
本论文提出了深度残差学习网络来解决性能退化的问题。
引入一个Residual block:
这篇博文详细介绍了为什么这个模型能很好的解决梯度消失的问题:http://blog.csdn.net/superCally/article/details/55671064
论文要点:
1. 捷径连接(shortcut connections):如上图。捷径连接是指一种跳过一个或多个层次的连接。在我们的案例中,所使用的捷径连接仅仅是进行恒等映射(identify mapping),它们的输出被加入到堆叠层次的输出中(见上图)。恒等映射捷径连接的增加并没有引入新的参数也没有增加计算复杂度。
2. 深度残差神经网络训练结果表明:
(1)我们提出的超深度残差网络更便于优化,而其所对应的平凡网络(即简单通过层次堆叠而成的网络)的训练误差却随着网络层次的加深而变大。
(2)我们所提出的深度残差网络更容易在增加深度时获得精度的提高,明显优于之前的网络结构所得到的结果。
3. 多数的卷积层的过滤器尺寸为3×3并且在设计时遵从下列两条简单的规则:(i)对于相应大小的输出特征图尺寸,层中必须含有相同数量的过滤器;(ii)若特征图尺寸减半时,则需要倍增过滤器数量来保持各层的时间复杂度。我们通过步长为2的卷积层直接进行降采样。最终的网络包括了一个全局的均值池化层和1000路装备了softmax激活函数的全连接层。
参考文献
【1】http://blog.csdn.net/feimengjuan/article/details/69666981
【2】http://blog.csdn.net/u011534057/article/details/54847992
网友评论