深度学习经典网络,AlexNet,NIN,OverFeat,VGG,ResNet

1.AlexNet [2012]

论文: ImageNet Classification with Deep Convolutional Neural Networks [2012年ImageNet竞赛冠军]
主要内容:训练了一个很深的卷积神经网络在ImageNet实现1000类图片分类,top-1和top-5的错误率分别达到了37.5%和17%,比当时最好的方法(SIFT+FVs 分别为45.7%和25.7%)降低了8.2%和8.7%。
网络结构:五个卷积层,三个全连接层。使用上下两栏的网络结构,在第三个卷积层和全卷积层中,对来自上一层输入数据进行共享。其它处仅使用来自本栏的上一层的数据。
输入图片大小为224X224,由ImageNet上的256X256图片随机裁剪得到,输出维度为1000的向量,表示1000个类别的分类结果。
AlexNet网络结构

主要贡献
(1)使用整流线性单元ReLU代替双曲正切函数tanh作为激活函数,提高了训练的速度;
(2)局部相应归一化(LRN)提高模型泛化能力。对得到的feature map临近的以当前feature map位置为中心的左右各n/2个(若有)feature map 计算同一位置上的激活值的平方和sum的指数函数(K+a*sum)^B 值,以此值作为分母进行归一化。 局部相应归一化的主要思想来自真实神经元之间的相互抑制机制,使具有较大的激活值的神经元能够往后有效传递信息。

(3)重叠池化(Overlaping Pooling)。作者进行了重叠pooling,即使pooling的步长小于pooling核的边长。作者发现使用重叠池化能够降低top-1和top-5的误差0.4%和3%。另外使用重叠池化更不容易过拟合。

防止过拟合策略:
(1)数据集扩增,主要包括两个方面:1)图像的随机裁剪和水平翻转。2)图像RGB通道强度值的调整。
(2)Dropout:作者在前两个全连接层使用了dropout方法,即强制神经元以0.5的概率失火,不输出。 训练多个模型并在预测时使用多个模型平均的结果有利于提高预测的准确度,dropout在训练的过程中随机关闭一些神经元,起到了类似训练了多个模型的效果,有一种类似bagging的作用。同时,使用dropout较少了神经元之间的“复杂合作”,迫使单个的神经元独自学习一种鲁棒的表示能力,减轻对其它神经元的依赖。

训练策略:
(1)weight decay 权值衰减,作者认为这不仅是一个正则化项,同时能减小训练误差
一般的SGD权值更新为:
g=▽θ
wi=wi-εg
带动量的SGD
g=▽θ
v←αV-εg
wi←wi+v
本文中的带权值衰减动量SGD
g=▽θ
v←αv-εg-βεWi(权值衰减部分)
Wi←Wi+v

总结:这篇文章提出了一种深的卷积神经网络结构,通过使用GPU高效训练,使用了一些诸如局部响应归一化、重叠池化、ReLU、权值衰减、dropout等技术,成功训练了深的卷积神经网络,并在ImageNet图片分类上取得了不错的效果。作者同时也通过实验表明网络深度的重要性,减少任何一个卷积层,误差会增加2%。

2.Network In Network [2013]

论文:Network In Network
主要内容:提出了一种称为Network In Network的网络结构,这种结构使用多层感知机连接卷积层,实现上使用1*1的卷积,已达到拟合复杂激活函数的目的。另外相对于一些卷积神经网络的全连接层,使用全局平均池化(Global Average Pooling)代替。这种代替的好处减少了很多参数,并且相比于全连接不容易过拟合。
网络结构:三个mlpconv(multi layer perceptron convolution)连接, 到n(n是分类数)个feature map做global average pooling,得到一个n维的向量,然后送入softmax做分类。
Network in Network

主要贡献
(1)mlpconv: 优势:1)和传统卷积是兼容,实际上它的实现也是通过11的卷积来实现的;2)本身容易进行深度化。这里11 的卷积实际上是在前一层的feature maps 上做一个非线性的组合,可以使不同通道之间进行复杂交互。 另外1*1的卷积可以用来做升维或降维。
(2)global average pooling: 实际上是将feature map转换成了对每一个类的confidence map。优势有二:一是相比于全连接,更与卷积的结构相适应,这样很容易将这里的feature map视作为confidence map.另外一个优势就是这里没有需要优化的参数,去除了全连接中的大量参数,也很好地避免了过拟合。

结论:提出了新的结构,效果也很好,这种1*1的卷积方式和global average pooling 对以后的文章也有影响。

3.Maxout [2013]

论文:Maxout Network
主要内容:maxout实际上是一种多层感知机或者是神经网络,作为类似激活函数的功能存在,具有拟合任意凸函数的能力。
maxout结构:

h1和h2即为maxout的输出,其中Z1和Z2可以看做是隐隐层,通过maxout,可以近似任意的凸函数,充当激活函数。
激活函数的作用:若没有激活函数,即相当于激活函数是f(x)=wx,那么不管网络有多深,都是输入的线性函数,拟合能力有限,激活函数的引入为网络引入了非线性,则网络可以近似任意函数,才拥有很强的表示能力。神经网络中早期使用sigmoid函数,后来使用ReLU,主要原因有:1)sigmoid函数中的指数部分在前向计算和后向传播中计算量较大;2)sigmoid函数容易产生饱和,在两端接近0,1的部分梯度很小,容易产生梯度消失现象,无法传递信息;3)ReLU计算简单,单向抑制使一些神经元输出为0,起到网络稀疏作用,另外这种单向抑制更符合生物神经元的作用。
Maxout

4.OverFeat [2013]

论文:OverFeat:integrated recognition,localization and detection using convolutional network
主要内容:使用同一个网络进行识别(分类:是什么),定位(是什么,在哪里)和检测(有些什么,在哪里)。
作者定义OverFeat为一种特征提取器(feature extractor),将网络的前面五层视为特征提取层,对于不同的任务将后面的层修改后重新训练,就可以得到很好地效果。这也充分展示了网络的迁移能力。

5.devil [2014]

论文:return of the devil, the details delving the deep into convolutional networks
主要内容:比较了卷积神经网络为代表的深度网络和传统的浅层特征(如BoVW,IFV)等在图像分类识别之间的差异。主要有有三种实验场景:1)使用pre-trained模型,2)使用pre-train的模型进行fine-tuning,3)使用浅层特征。
结论:使data augmentation技术可以使浅层表示的效果有提升,但是即使提升之后和深度网络之间还是有很大差距。使用fine-tuning的方式比使用深度模型+SVM效果要好。

6.VGG [2014]

论文:very deep convolutional network for large scale image recognition
主要内容:探索了使用小的卷积核尺寸(3X3)构建深的网路,并取得了很好的结果,14年ImageNet定位和分类的1,2名。
VGG network
VGG19结构-22444+3 VGG16: 22333+3
主要发现:文章采用的3X3的卷积核的堆叠代替大尺寸的卷积核(如77)。两个33的卷积核的感受野与55的卷积核等同。3个33的卷积核的感受野与77的卷积核等同。有点在于:1)增加非线性,1个77使用了一个非线性激活单元,3个33 使用三个非线性激活函数,增加了网络的非线性,使网络的识别能力更强。 2)减少了参数:假设输入输出通道数目为C,3个33: 3*(33)CC , 而一个77: 77CC。比例为0.55:1。这可以看做是对77卷积核的一种正则化。
1*1的卷积核可以用来在不影响感受野的前提下对增加的网络的非线性,这在NIN文章阅读中有说明,VGG中用的是线性的。
总结:VGG在没有改变LeNet的基本结构的基础上,大大加深的网络的深度,展示了深度对于网络的重要性和好处。其在图像分类,物体定位等方面效果都很多,很多在VGG基础上进行fine-tuning的文章也展示了VGG网络强大的特征学习能力和应对多种应用的能力。

7.Inception_V1 (GoogLeNet) [2015]

intro: multi-scale conv filter
论文:going deeper with convolutions

主要内容:这篇文章主要介绍了一种称为Inception的网络结构,在保证计算量不变的情况下,使网络变得更深,更宽,并且取得比较好的效果。主要的想法是:1)根据Hebbian 原则,突触之间的合作和能取得更好的神经传递效果,2)多尺度处理的直觉。
主要动机:纵观网络深度不断加深,效果不断提升的发展过程,希望神经网络取得更好的结果的一个直接方法就是加深网络深度和增加每层的节点数目。但是这样做会带来两个问题:1)网络参数增加,使得网络更容易过拟合,2)计算量增加。
解决这个问题的一个方案是为网络引进稀疏性,不仅是在全连接层,甚至是在卷积层。稀疏网络可以有效避免过拟合,之前的dropout的使用也证明了这一点,另外稀疏网络可以是具有相关性的神经元聚类,相互刺激增强了突触的连接(Hebbian principle),增强了神经元的连接。
但是在计算上如果稀疏仅仅很多单元的输出为0,那么实际的计算量没有减少,并造成了计算的浪费。如果转为不均匀的稀疏数据结构,计算量虽然会大大减小,但是因查找和cache miss问题造成的时间消耗可能使转为稀疏矩阵的策略得不偿失。从LeNet开始,神经网络就有利用随机和稀疏特性打破网络对称性并提高学习的传统,后来在Alex中使用全连接是为了利用并行计算能力。当前的网络的结构都比较统一,大量的滤波器和大的batch size充分利用了计算设备的密集计算能力。
那么现在的问题是如何在引入filter level的稀疏性的同时充分利用计算设备的密集矩阵计算能力。

Inception结构
主要想法是找到一个卷积网络的局部稀疏结构,然后重复此结构,得到网络。
1)首先,从NIN中可以学习到利用11 的卷积核可以覆盖(联合,增加非线性)上一层的多个feature map;
2)然后,使用更大一点的patch,可以获取更多的更大的patch信息,同时减少patch数目;
3)最后,池化在卷积网络中很重要,所以有必要再加上一个池化操作。
所以,最后的结果就是,1
1,33,55 的卷积 + 33 的池化(stride:1X1),构成inception的最初模型。实际上就是不同卷积的组合。 另外更高层的网络一般提取的特征更抽象,层次更高,然后33,55 的大卷积核有利于提取高层特征,所以在更高层的网络层中,33和55 的feature map数目的比例提高。
由于使用了多种卷积和池化,最后的feature map整合(concatenated,级联)到一起,随着层数增加,输出map是在不断增加的,这样虽然局部是稀疏的,但是随着层数增加,计算量陡增。 所以这里的解决方案是在3
3和55 的卷积之前以及33 的池化之后分别加一个11 的卷积,减少通道数目。同时由于其包含了ReLU单元使得其具备了增加网络非线性的作用。
在这里插入图片描述
在这里插入图片描述
GoogLeNet 结构
网络输入图片大小224x224x3, 零均值。输出1000维 softmax结果。
一共有27层(包括pooling层)。有9个inception模块。开始使用了 2
conv + 2pooling,中间用了 9Inception + 2*pooling,最后用了一个average pooling + FC + softmax.
在这里插入图片描述

one implementation: https://hacktilldawn.com/2016/09/25/inception-modules-explained-and-implemented/
训练:SGD,momentum=0.9 , input_size:224x224 zero mean
测试:1)7 model embeding prediction
2)image crop: 4sale *3squareCrop 6crop(224224) *2mirror=144
3)所有crop所有模型结果平均

总结:这篇文章提出了inception的结构,证明了通过密集单元逼近的稀疏结构来提高神经网络在计算机视觉方面的能力是可行的。主要优点是在适当增加计算的情况下显著提高性能。总之,网络朝着稀疏的方向发展是有效,有用的想法。

注:文章中也指出,尽管Inception结构在计算机视觉上是成功的,但是这能否将其归因于Inception结构的设计原则,依然是存疑的,尚需更多的分析与验证。

8.ResNet [2016]

intro: residual structure
论文: deep residual learning for image recognition
arXiv:https://arxiv.org/pdf/1512.03385.pdf (submitted v1: 2015.12)
github: https://github.com/tensorflow/models/blob/master/official/resnet/resnet_model.py
背景:更深的网络越来越不容易训练。

主要内容:提出了一种残差网络结构,这种网络结构易于训练,并能从网络的深度中获得准确率的增加。 网络输入为x, 传统网络的一些层学习映射H(x),现在要学习的残差为F(x)=H(x)-x,那么H(x)=F(x)+x,在残差网络中,不改变网络基本结构的情况下,加一个从输入x到输出F(x)之间的相加连接,就可以得到H(x); 这样学习到的就是F(x).

主要问题(驱动):
有这样一个问题,即是否可以通过堆叠更多的层来训练得到更好的模型呢?要回答这个问题,首先要解决的一个障碍就是梯度消失/爆炸,它会导致网络在训练的初始阶段难以收敛,不过有了标准化的初始化和标准化中间层(batch norm)等方法后,这个障碍得到了很大程度上的解决。 但是随着网络的加深,出现了一个degradation的问题:就是随着深度的加深,准确率会先达到饱和,然后会迅速降低。这种degradation的问题还不是由于过拟合造成的,因为训练误差也增大了。
理论上对于一个已经构建好的较浅的网络,对于该网络,在它的后面增加一些恒等映射层,通过这样的方式构建出来的模型的训练误差应该不会比浅层网络大,但是实验发现,这样的解决方案无法做到与原来的浅层网络性能差不多甚至更好。在ResNet的文章中,作者提出一个深度残差学习框架,即让网络去学习一个残差函数,比如输入是x,原来的要学习的输出是H(x),现在就让它学习H(x)-x; 这样做基于的假设是优化残差映射比优化原来的映射更容易。举个极端情况的例子,如果恒等映射就是寻求的最优映射关系,那么在这种多个非线性层堆叠的情况下,让网络学习输出0作为残差比让它拟合一个恒等映射要简单。

网络结构
在这里插入图片描述
这种跨层连接中间有两到三层,一层的话还是个线性映射,没有效果。F(x)+x是通过逐元素的相加(element-wise addition)完成的,对应通道的feature map相加。当x和F(x)的尺寸,通道数不一样的时候,加上一个线性投影矩阵 W s W_s Ws 来实现两个变量的维度匹配。具体实现可以使用 1 ∗ 1 1*1 11的卷积来实现,通过卷积核的个数控制通道数变化,卷积的步长控制feature map宽高的变化。
在这里插入图片描述

网络中使用步长为2的卷积代替pooling, 每次feature map的尺寸减小一半,使feature map的数量增加一倍。对于feature map数目变化后的F(x)+x, 1)增加值为0的额外通道(x)feature map, 2)使用1*1 的卷积核对x做卷积得到同样数目的feature map. 对于尺寸变化的情况,相加的时候都是按照步长为2进行相加。

Implemetation details
SGD momentum:0.9
batch_size=256
learning rate:0.1 devided by 10 when error plateaus
weight decay=0.0001
trainining up to 60*10^4 iteration
使用BN,也有两种方式,一种是在weight层之前(arXiv: 1603.05027 identity mapping in deep residual networks) 是在之后(arXiv:1512.03385 Deep residual learning for image recognition)

两种shortcut : identity & projection

两种resnet buiding block:
在这里插入图片描述
关于resnet中关于深度网络难以训练不是由于梯度消失的表述:
在这里插入图片描述

9. Inception_v2 : Batch Normalization (2015)

intro: batch normalization
论文:Batch Normalization:accelerating deep network training by reducing internal covariate shift
arXiv: https://arxiv.org/pdf/1502.03167.pdf
github: https://github.com/udacity/cn-deep-learning/blob/master/tutorials/batch-norm/Batch_Normalization_Lesson.ipynb
Andrew Ng lesson about batch norm:
https://www.youtube.com/watch?v=tNIpEZLv_eg
https://www.youtube.com/watch?v=em6dfRxYkYU
https://www.youtube.com/watch?v=nUUqwaxLnWs
https://www.youtube.com/watch?v=5qefnAek8OA

主要内容:深度网络在训练的过程中,每一层的输入分布都在变化导致深度网络难以训练,通常需要使用很小的学习率和精心设置的初始化方法,通常训练过程复杂,而且速度很慢。文章称这种现象为internal covariate shift,文章提出的解决方法是对网络层的输入进行标准化(normalization)。 这种方法让我们能够使用较大的学习率并且不用精心设计变量初始化。 另外batch normalization 还能起到正则化的作用,在一些案例中,可以起到drop out的作用。
文章中使用batch normalization 训练模型在达到原来模型同样精度的情况下,训练step减少14倍.
两个概念:
Internal Covariate Shift: 文中指的是深度网络内部节点的分布的变化。
Batch Normalization:通过一个normalization步骤来固定网络层的输入的均值和方差,达到减少internal covariate shift, 并加速训练过程的目的。
两个算法
(1) batch normalization [normalize + scale&shift]
在这里插入图片描述
在这里插入图片描述
(2) training BN network
在这里插入图片描述
alg1. 对于一个mini-batch 的输入X的Batch Borm Transform :
对于输入的激活{x1,…xm}, (1)计算均值,(2)计算方差,(3)计算标准化值,(4)计算scale(gamma)和shift(beta)之后的值y作为输出。
alg2. 训练一个BN network:
(1)对所有的BN层,用算法1计算BN输出y,并用y代替x;
(2)训练网络,优化网络参数theta以及BN参数gamma和beta;
(3)处理多个mini-batch,average over them ,计算E(x)和Var[x];
(4)替换y, 使用(3)中计算的E(x)和Var[x]重新计算得到。

10. Inception_v3 : rethinking Inception (2016)

intro: factorized conv
论文:rethinking the Inception architecture for computer vision
https://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Szegedy_Rethinking_the_Inception_CVPR_2016_paper.pdf
model(TF) :https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v3.py
主要内容:主要阐述通过卷积分解(factorized convolution)和正则化(regressive regularization)来scale up网络来充分利用增加的计算能力。
文章根据不同结构的卷积网络的大量实验,总结了一些深度模型设计的通用的方法和优化思路。
通用的设计准则
(1)避免表达bottleneck。网络的表达尺寸不应急剧减小,尤其在网络的前面部分(接近输入的部分),防止对信息过度压缩,造成大量信息的丢失;
(2)大尺寸的表示在网络中更适合局部处理?;
(3)在较低的维度上进行空间聚集,不会造成表达损失?;
(4)注意网络深度和宽度的平衡。

改进方案
(1)在inception V1的基础上进一步将3X3的卷积核用1X3 +3X1 的代替,并进一步推广到1Xn+nX1的卷积核, 进一步减少参数
(2)inception V1中的引出的辅助分类结果并不能提高最终层的判别能力,只有在加了BN或者drop out的时候才有效果;
(3)efficient grid size reduction 通常为了避免bottlenecks 会先将feature map的数目扩增,然后池化,但是这样计算量又增加了。所以可以用一个并行的策略,一个带步长的卷积和一个池化并行进行,然后得到的结果进行contact,这样既能减少计算量,又能避免bottlenecks.
在这里插入图片描述

12. ResNeXt

paper: Aggregated Residual Transformations for Deep Neural Networks
arXiv: https://arxiv.org/abs/1611.05431 (v1 submitted time: 2016.11)
intro: aggregated residual transformation ( resnet+inception+group conv.)

主要内容: 提出了ResNeXt网络结构(next dimension),吸收了VGG/ResNet的重复block,residual connection以及Inception的多尺度split-transform-merge的网络设计特点。同时对split-transform-merge做了改进,每个分支使用相同的拓扑结构,使之更简单,通用。另外使用group convolution(32个group)完成不同的分支的卷积。

13. Xception

paper: Xception: deep learning with depthwise seperable convolutions
arXiv: https://arxiv.org/abs/1610.02357 (v1 submitted time: 2016.10 )
intro: depthwise separable conv & residual connection

主要内容:提出Xception网络结构(extreme inception),主要使用了depthwise separable conv和残差连接。In short, the Xception architecture is a linear stack of depthwise separable convolution layers with residual connections。
在这里插入图片描述
mobileNet与Xception在卷积顺序上的区别:Xception先用1x1卷积,然后使用depthwise separable conv. 在mobileNet中先用depthwise separable conv. 然后用1x1卷积。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值