【学习笔记2】深度学习大爆发——State of the art 网络学习笔记

版权声明:欢迎指正存在的错误,欢迎分享最新的学习资源,转载请注明原出处 https://blog.csdn.net/qq_28659831/article/details/78985804

ILSVRC使用的数据都来自ImageNet,ImageNet项目于2007年由斯坦福大学华人教授李飞飞创办,目标是收集大量带有标注信息的图片数据供计算机视觉模型训练。ImageNet拥有1500万张标注过得高清图片,总共22000类,其中约有100万张标注了图片中主要物体的定位边框。每年度的ILSVRC比赛数据集中大概拥有120万张图片,以及1000类的标注,是ImageNet全部数据的一个子集。最近几年,ILSVRC的top-5错误率取得了重大突破,主要的突破点都是在深度学习和卷积神经网络,成绩的大幅提升几乎都伴随着网络的加深和网络结构的优化,传统的机器学习已然追不上深度学习的步伐。每年的冠军(其中VGGNet是2014年亚军)网络都在深度学习领域产生极其重大的影响,带动整个深度学习领域相关问题的研究,一些tricks和更优网络结构的提出更是对未来的深度网络的发展奠定了重要的基础,标志着深度学习领域的一大进步,研究成果“爆发式”地产出。

本博文整理介绍几种在各自所处年代最先进的卷积神经网络,对卷积网络乃至深度学习有非常大的推动作用,也象征着卷积神经网络在这几年的快速发展。它们分别是2012年冠军AlexNet、2014年亚军VGGNet、2014年冠军Google InceptionNet及其后续改进的系列网络(Inception V2、Inception V3、InceptionV4和Xception)、2015年冠军ResNet和2017年被评为CVPR best paper的DenseNet。

本博文参考了很多书籍和技术大牛的内容,相关引用在文末给出。

AlexNet(2012年ILSVRC冠军)

2012年,Hinton的学生Alex Krizhevsky提出了深度卷积神经网络模型AlexNet,它可以算是LeNet的一种更深更宽的版本。AlexNet中包含了几个比较重要的技术点:

(1)成功使用ReLU作为CNN的激活函数,并验证其结果在较深的网络超过了Sigmoid,成功解决了Sigmoid在较深网络时的梯度弥散问题。

(2)一个到现在训练网络都必须要用的trick被提出:Dropout。训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。

(3)在CNN中使用重叠的最大池化,提升了特征的丰富性。

(4)另一个非常重要的trick被提出:LRN层。对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,抑制反馈小的神经元,增强了模型的泛化能力。

(5)使用CUDA加速深度卷积网络的训练。

(6)数据增强,随机地从原始图像中截取、翻转、PCA处理、加噪声等,防止网络陷入过拟合,这些trick使得错误率进一步下降1%。

Alex网络的结构图如下:


上图采用是两台GPU服务器,所以会看到两个流程图,我们这里以一台CPU服务器为例做描述.该模型一共分为八层,5个卷基层,,以及3个全连接层,在每一个卷积层中包含了激励函数RELU以及局部响应归一化(LRN)处理,然后在经过降采样(pool处理)。


另外需要强调一下这个到现在训练每个网络都会用到的trick——Dropout。Dropout是指在模型训练时随机让网络某些隐含层节点的权重不工作,不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了关于Dropout,文章中没有给出任何数学解释,Hintion的直观解释和理由如下(来自http://www.cnblogs.com/tornadomeet/p/3258122.html):

(1)由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。

(2)可以将dropout看作是模型平均的一种。对于每次输入到网络中的样本(可能是一个样本,也可能是一个batch的样本),其对应的网络结构都是不同的,但所有的这些不同的网络结构又同时share隐含节点的权值。

(3)native bayes是dropout的一个特例。Native bayes有个错误的前提,即假设各个特征之间相互独立,这样在训练样本比较少的情况下,单独对每个特征进行学习,测试时将所有的特征都相乘,且在实际应用时效果还不错。而Droput每次不是训练一个特征,而是一部分隐含层特征。

(4)还有一个比较有意思的解释是,Dropout类似于性别在生物进化中的角色,物种为了使适应不断变化的环境,性别的出现有效的阻止了过拟合,即避免环境改变时物种可能面临的灭亡。

AlexNet以显著的优势赢得了竞争激烈的ILSVRC 2012比赛,top-5错误率降低至了16.4%,相比第二名的成绩26.2%错误率有了巨大的提升。AlexNet可以说是神经网络在低谷期的第一次发声,确立了今后深度学习在计算机视觉的统治地位,同时也推动了深度学习在其他领域如语音识别、NLP等领域的发展。

VGGNet(2014年ILSVRC分类项目亚军,定位项目冠军)

VGGNet是牛津大学计算机视觉组和Google DeepMind公司的研究院一起研发的深度卷积神经网络。VGGNet通过反复堆叠3×3的小型卷积核和2×2的最大池化层,VGGNet成功地构筑了16~19层深的卷积神经网络。VGGNet错误率大幅度下降,并取得了ILSVRC 2014比赛分类项目的第2名和定位项目的第1名。同时VGG的拓展性很强,迁移到其他图片数据上的泛化性非常好。下面总结一下VGGNet的特点:

(1)结构简洁,整个网络都使用了同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2)。

(2)不同级别对应着不同的深度,从A到E逐渐加深,C多了几个1×1卷积层,D、E就是我们常说的VGGNet-16和VGGNet-19。虽然网络不同级别的网络不断加深,但是参数量并没有增长很多,但是计算量增长比较大。

(3)训练上有一个技巧,先训练级别A的网络,再复用A网络的权重来初始化后面的几个复杂模型,这样训练收敛的速度更快。

(4)预测时采用了Multi-Scale方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升准确率。

(5)Multi-Scale做数据增强,将原始图片缩放到不同的尺寸S,然后再随机裁剪成224×224的图片,增大数据量防止模型过拟合。

(6)通过对比各级别的网络时可以发现:(1)LRN层作用不大;(2)越深的网络效果越好;(3)1×1的卷积也是很有效的,但是没有3×3的好,大一些的卷积核可以学到更大的特征空间。

VGGNet的各级别网络的结构图如下:


最终提交到ILSVRC 2014的版本仅使用Single-Scale的6个不同等级的网络与Multi-Scale的D网络的融合,达到了7.3%的错误率。不过比赛结束后作者发现只融合Multi-Scale的D和E可以达到更好的错误率7.0%,再使用其他手段最终错误率可达到6.8%,十分接近当年的冠军Google Inception Net。

Google Inception 系列网络

Inception-V1(2014年ILSVRC冠军)

Inception V1大大降低了参数量却可以达到远胜于AlexNet的准确率,原因有三:

(1)模型更深,有22层深;

(2)去除了最后的全连接层,用全局平均池化层(Network In Network的思想)来取代它。去除全连接层大大降低了参数量,此外全连接层去除后模型训练更快并且减轻了过拟合。

(3)精心设计了Inception module提高了参数的利用率。也是借鉴了NIN的思想,Inception module本身相当于大网络中的一个小网络。并且,不同于NIN是级联的卷积层和MLPConv层,Inception module增加了分支网络。分支网络结构如下。其中有四个分支,其重要强调的是4个分支都用到了1×1的网络,1×1的卷积是一个非常优秀的结构,它可以跨通道组织信息,提高网络的表达能力,同时可以对输出通道升维和降维。这种module可以让网络的深度和宽度高效率地扩充,提升准确率且不至于过拟合。(关于NIN中提出的global average pooling和MLPConv层结构可以查看这篇博客http://blog.csdn.net/hjimce/article/details/50458190)

Inception module的结构图如下:


最终Inception V1也是用了Multi-Scale、Multi-Crop等数据增强方法,并在不同的采样数据上训练了7个模型进行融合,得到了最后的ILSVRC 2014的比赛成绩:top-5准确率为6.67%。

Inception-V2

Inception V2相较于之前的版本Inception V1,性能得到了大幅度提升,top-5的错误率为4.8%,已经超过了人眼水平。Inception V2主要有以下三个特点:

(1)学习了VGGNet,用两个3×3的网络代替5×5的大卷积,用来降低参数并减轻过拟合。

(2)提出了另一个著名的trick——Batch Normalization。BN在用于神经网络某层时,会对每一个mini-batch数据的内部进行标准化处理,使输出规范规范化到N(0,1)的正态分布,减少了Internal Covariate Shift(内部神经元分布的改变),解决了传统神经元只能用一个很小的学习率导致的训练困难的问题。BN训练时学习速率可以增大很多倍,导致迭代次数大大降低,训练时间大大缩短。BN在某种意义上起到了正则化的作用,因此加入BN后可以减少或取消dropout以简化网络结构。

(3)除以上两个主要改进外,Inception V2去除了LRN层,更彻底地对样本进行shuffle,减少数据增强过程中对数据产生的光学畸变。

使用了以上这些措施后Inception V2在训练上达到了V1的准确率时准确率快了14倍,并且模型准确率进一步提高至top-5错误率仅为4.8%,超越了人类。

Inception-V3

Inception V3的改造主要有以下两个方面,都是在CNN设计中非常值得借鉴的tricks:


(1)引入了Factorization into small convolutions的思想,将一个较大的二位卷积拆成两个较小的一维卷积,比如讲3×3的卷积拆成1×3卷积和3×1卷积,一方面节约了大量参数,另一方面不加速了运算并减轻了过拟合,同时增加了一层非线性扩展模型表达能力,可以处理更多、更丰富的空间特征,增加特征多样性。

(2)优化了Inception Module结构,现在的Inception Module有35×35、17×17和8×8三种不同的结构,这些Inception Module只在网络的后部出现,前面仍然是卷积层。此外,Inception V3除了在Inception Module中使用分支,还在8×8的module的分支中使用了分支,可以说是Network In Network In Network。

Inception V3的网络结构图如下:


Inception V3的Inception Module结构如下(依次是35×35、17×17,8×8):


最终,Inception V3的top-5错误率仅为3.5%。

Inception-V4

Inception V4相比于Inception V3主要是结合了微软的ResNet,其网络结构如下:

          

最终Inception V4的错误率进一步减小到 3.08%

Xception

Xception是google继Inception后提出的对Inception v3的另一种改进,主要是采用depthwise separable convolution来替换原来Inception v3中的卷积操作。

下图是Inception V3的结构图:


一个卷积层的卷积核是三个维度的,空间上width和height,还有一个channel维度。因此一个卷积层,既考虑映射cross-channel相关性,又考虑spatial相关性。

Inception结构首先通过1x1卷积“看”cross-channel相关性,把输入映射到3或4个分开的空间(小于原输入空间),之后通过3x3或5x5卷积再映射到更小的3维空间。通过分开处理cross-channel相关性就相当于一个解耦的过程,使得处理过程更加简单高效。由此提出了Extreme Inception的结构:


上面这种结构,几乎等同于depthwise separable卷积(见MoblieNet的那篇论文)。depthwise separable卷积又叫做“separable卷积”,是通过处理每一个channel上的空间卷积,之后再经过pointwise卷积(例如1x1卷积),在一个新的channel空间得到输出。但又有所不同,其中第二点的不同非常重要:

(1)操作顺序:depthwise separable卷积首先channel-wise spatial卷积,之后1x1卷积;而Inception首先1x1卷积。

(2)第一个操作后是否有非线性。Inception中,第一步和第二部操作都有非线性(ReLU);而depthwise separable卷积后面通常没有非线性操作。

Xception结构如下:


最终Xception和Inception V3在ImageNet的结果比较如下:


ResNet(2015年ILSVRC冠军)

ResNet(Residual Neural Network)是由微软研究院的Kaiming He等4名华人提出的,通过使用Residual Unit成功训练152层深的网络,以top-5错误率3.57%获得2015年比赛中的冠军。ResNet中最闪光的地方便是Residual Unit模块的设计,它的设计与Highway Network非常相似。它的灵感来自于这样的一个问题:

在不断加深神经网络的深度的时候,会出现一个degradation的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这不是过拟合问题,因为这样的深度加深不仅在测试集上的误差增大,在训练集本身的误差也会增大。但是模型的深度加深,学习能力增强,因此更深的模型不应当产生比它更浅的模型更高的错误率。而这个“退化”问题产生的原因归结于优化难题,当模型变复杂时,SGD的优化变得更加困难,导致了模型达不到好的学习效果。因此便想到了一个全等映射的问题,即在准确率达到饱和的比较浅的网络后面加上几个y=x的全等映射层,起码误差不会增加,即更深的网络不会带来训练集误差上升。源于这样的一个灵感,何凯明大神设计出了这样的一个残差学习单元,即Residual Unit。它的结构如下:


直接将输入x传到输出作为初始结果,那么学习的目标改变成了学习残差:F(x)=H(x)-x。

ResNet有很多旁路的支线将输入直接连接到后面的层,这样的操作被称为shortcut,使得后面的层可以直接学习残差,克服了传统神经网络或全连神经网络随着网络的加深存在的信息丢失、损耗的问题。信息直接绕到到输出,保存了信息的完整性。VGG-19、普通的34层卷积神经网络和34层的ResNet的结构对比图如下:


ResNet消除了随着网络加深训练集上的误差增大的现象,并且训练误差会随着网络的加深而减小,测试集上的表现也会变好。Google在ResNet推出后不久便借鉴了其思想提出了Inception V4,可见ResNet的也是一个推广性非常好的网络结构,甚至可以直接应用到Inception Net中。

到目前为止,ResNet是目前深度学习领域里被引用最广的网络之一,包括我本人在学习深度网络编程的时候也是第一个尝试读ResNet的代码,并且用它来解决很多其他的问题。

DenseNet(2017年CVPR best paper)

DenseNet借鉴了ResNet中的shortcut思想来解决网络在训练过程中的前传信号和梯度信号在经过很多层之后可能会逐渐消失的问题,增加跨层的链接实现输入和输出间的信息高速流通。相比于ResNet的稀疏的旁路链接,DenseNet基于这个思想提出了一种全新的全连稠密连接模式,为了最大化网络中所有层之间的信息流,作者将网络中的所有层两两都进行了连接,使得网络中每一层都接受它前面所有层的特征作为输入。由于网络中存在着大量密集的连接,作者将这种网络结构称为 DenseNet。其Dense Block结构示意图如下左图所示:


它包括输入层在内共有5层,H是BN+ReLU+3x3Conv的操作,并不改变feature map的大小。对于每一层来说,前面所有层的feature map都被直接拿来作为这一层的输入。growth rate就是除了输入层之外,每一层feature map的个数。它的目的是,使得block中的任意两层都能够直接“沟通”。每层以之前层的输出为输入,对于有L层的传统网络,一共有L个连接,对于DenseNet,则有L(L+1)/2个连接。



DenseNet网络就是将Dense Block串联而得,在每个Dense Block之间有一个Convolution+Pooling的操作,称为transition layer。

其实在Dense Block输出的地方还有一个bottleneck layer,在bottleneck layer中的操作是一个1x1的卷积,卷积核共有4k个,降低channel维度,也就是减少了模型的参数。

在transition layer中有进一步压缩的操作称为compression,减少百分之theta的feature map数量,论文中使用的teata=0.5。

DenseNet有如下优点:

(1)有效解决梯度消失问题,因为从上左图我们可以看出,在反传时每一层都会接受其后所有层的梯度信号,所以不会随着网络深度的增加,靠近输入层的梯度会变得越来越小。

(2)强化特征传播。

(3)支持特征重用,由于大量的特征被复用,使得使用少量的卷积核就可以生成大量的特征,最终模型的尺寸也比较小。

(4)大幅度减少参数数量。

引用链接

  • 《TensorFlow实战》,黄文坚、唐源著,电子工业出版社
  • http://www.cnblogs.com/tornadomeet/p/3258122.html
  • http://blog.csdn.net/hjimce/article/details/50458190
  • http://blog.csdn.net/u014380165/article/details/75142710
  • http://blog.csdn.net/wspba/article/details/56019373
  • http://blog.csdn.net/zchang81/article/details/76155291
  • http://www.sohu.com/a/205268417_717210
  • http://blog.csdn.net/KangRoger/article/details/69929915



-------------------------------------------

Youzhi Gu, master student

Foresight Control Center
College of Control Science & Engineering
Zhejiang University
Email: [email protected], [email protected]

猜你喜欢

转载自blog.csdn.net/qq_28659831/article/details/78985804