ResNet论文详解

原文地址:

https://arxiv.org/pdf/1512.03385.pdf

 

论文目标:

提出一种方法使更深的卷积神经网络的训练成为可能。

 

论文工作:

将网络层要学习的函数关系变为学习关于层输入的残差函数,不是学习没有参考的函数。
 

传统思路:

更好的网络是不是靠堆叠更多的层就能实现。

堆叠网络的缺点:
1.网络难以收敛,梯度消失/爆炸在一开始就阻碍网络的收敛。

       传统解决办法:
       通过标准初始化和中间标准化层在很大程度上解决。这使得数十层的网络能通过具有反向传播的随机梯度下降(SGD)开始收敛。

2.当更深的网络能够开始收敛时,暴露了一个退化问题:随着网络深度的增加,准确率达到饱和(这可能并不奇怪)然后迅速下降。意外的是,这种下降不是由过拟合引起的,并且在适当的深度模型上添加更多的层会导致更高的训练误差

退化问题上的一个思考:
假设我们训练了一个浅层网络,那么在其后面直接添加多层恒等映射层而构成的一个深层网络,那这个深层网络最起码也不能比浅层网络差(或许是我们在合理的时间内实现不了吧)。所以我们可以得出这一个结论:不是所有的系统都很容易优化,即深层网络不容易被优化(不代表深层网络能做到更好的效果)
 

残差结构的提出:

1.提出目的:
解决上述的退化问题,解决网路优化难得问题

2.基本思路:
提出residual层,明确地让这些层拟合残差映射,而不是希望每几个堆叠的层直接拟合期望的基础映射。形式上,将期望的基础映射表示为H(x),我们将堆叠的非线性层拟合另一个映射F(x)=H(x)−x。原始的映射重写为F(x)+x。我们假设残差映射比原始的、未参考的映射更容易优化。在极端情况下,如果一个恒等映射是最优的,那么将残差置为零比通过一堆非线性层来拟合恒等映射更容易。,快捷连接简单地执行恒等映射,并将其输出添加到堆叠层的输出(图2)。恒等快捷连接既不增加额外的参数也不增加计算复杂度。整个网络仍然可以由带有反向传播的SGD进行端到端的训练。

3.参数网络效果简述:
我们在ImageNet[35]上进行了综合实验来显示退化问题并评估我们的方法。我们发现:
1)我们极深的残差网络易于优化,但当深度增加时,对应的“简单”网络(简单堆叠层)表现出更高的训练误差;
2)我们的深度残差网络可以从大大增加的深度中轻松获得准确性收益,生成的结果实质上比以前的网络更好。

 

残差结构提出的具体过程:

1.残差表示作为一种重构或预处理方法,被证明具有优势:
        1.对于矢量量化,编码残差矢量[17]被证明比编码原始矢量更有效。
        2.求解器比不知道解的残差性质的标准求解器收敛得更快。

2.快捷连接这一思路的实践和理论研究:
导致快捷连接[2,33,48]的实践和理论已经被研究了很长时间。训练多层感知机(MLP)的早期实践是添加一个线性层来连接网络的输入和输出[33,48]。在[43,24]中,一些中间层直接连接到辅助分类器,用于解决梯度消失/爆炸。论文[38,37,31,46]提出了通过快捷连接实现层间响应,梯度和传播误差的方法。在[43]中,一个“inception”层由一个快捷分支(仅仅是快捷连接这一思路)和一些更深的分支组成。

3.残差结构确实比其他结构更易学习:

尽管两种形式应该都能渐近地近似要求的函数(如假设),但学习的难易程度可能是不同的。理由如下:

       1.关于退化问题的反直觉现象激发了这种重构。正如我们在引言中讨论的那样,如果添加的层可以被构建为恒等映射,更深模型的训练误差应该不大于它对应的更浅版本。退化问题表明求解器通过多个非线性层来近似恒等映射可能有困难。通过残差学习的重构,如果恒等映射是最优的,求解器可能简单地将多个非线性连接的权重推向零来接近恒等映射。
       2.在实际情况下,恒等映射不太可能是最优的,但是我们的重构可能有助于对问题进行预处理。如果最优函数比零映射更接近于恒等映射,则求解器应该更容易找到关于恒等映射的抖动,而不是将该函数作为新函数来学习。我们通过实验(图7)显示学习的残差函数通常有更小的响应,表明恒等映射提供了合理的预处理。
下图通过表明残差函数有更小的响应证明了残差结构可以提供合理的预处理效果:

层响应分析:
上图显示了层响应的标准偏差(std)。这些响应每个3×3层的输出,在BN之后和其他非线性(ReLU/加法)之前。对于ResNets,该分析揭示了残差函数的响应强度。图7显示ResNet的响应比其对应的简单网络的响应更小。这些结果支持了我们的基本动机(第3.1节),残差函数通常具有比非残差函数更接近零。我们还注意到,更深的ResNet具有较小的响应幅度,如图7中ResNet-20,56和110之间的比较所证明的。当层数更多时,单层ResNet趋向于更少地修改信号。

4.添加快捷恒等映射(Shortcuts)的一些具体问题:

1.快捷连接既没有引入外部参数又没有增加计算复杂度。这不仅在实践中有吸引力,而且在简单网络和残差网络的比较中也很重要。前面方程中x和F的维度必须是相等的。如果不是这种情况(例如,当更改输入/输出通道时),我们可以通过快捷连接执行线性投影Ws来匹配维度(Ws仅在匹配维度时使用):

2.残差函数F的形式是可变的。本文中的实验包括有两层或三层(图5)的函数F,同时可能有更多的层。但如果F只有一层,方程(1)类似于线性层:y=W1x+x,我们没有看到优势。

 

5.使用循序渐进的方式引出我们的最终的残差架构:

从Vgg的启发出发,我们构建一个简单的卷积神经网络,之后用一下两个设计规则设计出我们的残差网络:

(i)对于相同的输出特征图尺寸,层具有相同数量的滤波器;
(ii)如果特征图尺寸减半,则滤波器数量加倍,以便保持每层的时间复杂度。我们通过步长为2的卷积层直接执行下采样。

下面的后两个网络以全局平均池化层和具有softmax的1000维全连接层结束。ImageNet的网络架构例子。左:作为参考的VGG-19模型40。中:具有34个参数层的简单网络(36亿FLOPs)。右:具有34个参数层的残差网络(36亿FLOPs)。带点的快捷连接增加了维度。

基于上述的简单网络,我们插入快捷连接(图3,右),将网络转换为其对应的残差版本。当输入和输出具有相同的维度时(图3中的实线快捷连接)时,可以直接使用恒等快捷连接(方程(1))。当维度增加(图3中的虚线快捷连接)时,我们考虑两个选项:
A)快捷连接仍然执行恒等映射,额外填充零输入以增加维度。此选项不会引入额外的参数;
B)方程(2)中的投影快捷连接用于匹配维度(由1×1卷积完成)。对于这两个选项,当快捷连接跨越两种尺寸的特征图时,它们执行时步长为2(Fm网格要变小)。

 

6.ResNet更多细节和其他变种:

ImageNet架构。构建块显示在括号中,以及构建块的堆叠数量。下采样通过步长为2的conv3_1, conv4_1和conv5_1执行。
分析:
值得注意的是我们的模型与VGG网络(图3左)相比,有更少的滤波器和更低的复杂度。我们的34层基准有36亿FLOP(乘加),仅是VGG-19(196亿FLOP)的18%。

 

模型的训练与测试:

1.训练过程的配置:

    1.调整图像大小,其较短的边在[256,480]之间进行随机采样,用于尺度增强。
    2.224×224裁剪是从图像或其水平翻转中随机采样,并逐像素减去均值[21]。
    3.使用了[21]中的标准颜色增强。
    4.在每个卷积之后和激活之前,我们采用批量归一化(BN)[16]。
    5. 我们按照[12]的方法初始化权重,从零开始训练所有的简单/残差网络
    6.我们使用批大小为256的SGD方法。
    7.学习速度从0.1开始,当误差稳定时学习率除以10,并且模型训练高达60×104次迭代。
    8.我们使用的权重衰减为0.0001,动量为0.9。
    9.根据[16]的实践,我们不使用Dropout[13]。

2.测试阶段的配置:

1.为了比较学习我们采用标准的10-crop测试
2.对于最好的结果,我们采用如[40, 12]中的全卷积形式,并在多尺度上对分数进行平均(图像归一化,短边位于{224, 256, 384, 480, 640}中)。

3.模型测试结果:

1.我们首先评估18层和34层的简单网络。再评估18层和34层的ResNet网络。

下面是在ImageNet上训练。细曲线表示训练误差,粗曲线表示中心裁剪图像的验证误差。左:18层和34层的简单网络。右:18层和34层的ResNet。在本图中,残差网络与对应的简单网络相比没有额外的参数。

该测试结果分析:

       1.这种优化难度不可能是由于梯度消失引起的。这些简单网络使用BN[16]训练,这保证了前向传播信号有非零方差。我们还验证了反向传播的梯度,结果显示其符合BN的正常标准。因此既不是前向信号消失也不是反向信号消失。
       2.34层简单网络仍能取得有竞争力的准确率(表3),这表明在某种程度上来说求解器仍工作。
       3.我们推测深度简单网络可能有指数级低收敛特性,这影响了训练误差的降低。

2.评估18层和34层残差网络(ResNets)

我们对所有快捷连接都使用恒等映射和零填充以增加维度(选项A)。所以与对应的简单网络相比,它们没有额外的参数。我们看到三个主要的观察结果。
       1.首先,残留学习的情况变了——34层ResNet比18层ResNet更好(2.8%)。更重要的是,34层ResNet显示出较低的训练误差,并且可以泛化到验证数据。这表明在这种情况下,退化问题得到了很好的解决,我们从增加的深度中设法获得了准确性收益。
       2.与对应的简单网络相比,由于成功的减少了训练误差,34层ResNet降低了3.5%的top-1错误率。这种比较证实了在极深系统中残差学习的有效性。
       3.我们还注意到18层的简单/残差网络同样地准确(表2),但18层ResNet收敛更快(图4右和左)。当网络“不过度深”时(18层),目前的SGD求解器仍能在简单网络中找到好的解。在这种情况下,ResNet通过在早期提供更快的收敛简便了优化。

3.恒等快捷连接和投影快捷连接的效果评估:

我们已经表明没有参数,恒等快捷连接有助于训练。接下来我们调查投影快捷连接(方程2)。在表3中我们比较了三个选项:

(A) 零填充快捷连接用来增加维度,所有的快捷连接是没有参数的(与表2和图4右相同);
(B) 投影快捷连接用来增加维度,其它的快捷连接是恒等的;
(C)所有的快捷连接都是投影。

结果分析:
表3显示,所有三个选项都比对应的简单网络好很多。选项B比A略好。我们认为这是因为A中的零填充确实没有残差学习。选项C比B稍好,我们把这归因于许多(十三)投影快捷连接引入了额外参数。但A/B/C之间的细微差异表明,投影快捷连接对于解决退化问题不是至关重要的。因为我们在本文的剩余部分不再使用选项C,以减少内存/时间复杂性和模型大小。恒等快捷连接对于不增加下面介绍的瓶颈结构的复杂性尤为重要。

4.更深的Residual结构(改为了瓶颈结构)的探究:

考虑到我们能承受的模型的训练时间,我们将原来的residual结构改为了瓶颈结构。对于每个残差函数F,我们使用3层堆叠而不是2层(图5)。三层是1×1,3×3和1×1卷积,其中1×1层负责减小然后增加(恢复)维度,使3×3层成为具有较小输入/输出维度的瓶颈。

无参数恒等快捷连接对于瓶颈架构尤为重要。如果图5(右)中的恒等快捷连接被投影替换,则可以显示出时间复杂度和模型大小加倍,因为快捷连接是连接到两个高维端。因此,恒等快捷连接可以为瓶颈设计得到更有效的模型。

更改后的ResNet结构:

       1.50层ResNet:我们用3层瓶颈块替换34层网络中的每一个2层块,得到了一个50层ResNet(表1)。我们使用选项B来增加维度。该模型有38亿FLOP
       2.101层和152层ResNet:我们通过使用更多的3层瓶颈块来构建101层和152层ResNets(表1)。值得注意的是,尽管深度显著增加,但152层ResNet(113亿FLOP)仍然比VGG-16/19网络(153/196亿FLOP)具有更低的复杂度。

测试结果:

50/101/152层ResNet比34层ResNet的准确性要高得多(表3和4)。我们没有观察到退化问题,因此可以从显著增加的深度中获得显著的准确性收益。所有评估指标都能证明深度的收益(表3和表4)。

5.与最先进的方法比较

在表4中,我们与以前最好的单一模型结果进行比较。我们基准的34层ResNet已经取得了非常有竞争力的准确性。我们的152层ResNet具有单模型4.49%的top-5错误率。这种单一模型的结果胜过以前的所有综合结果(表5)。我们结合了六种不同深度的模型,形成一个集合(在提交时仅有两个152层)。这在测试集上得到了3.5%的top-5错误率(表5)。这次提交在2015年ILSVRC中荣获了第一名。
单模型结果:上一张图
组合模型结果:

 

6.Cifa10数据测试

这里,我们的焦点在于极深网络的行为,但不是推动最先进的结果,所以我们有意使用如下的简单架构。
简单/残差架构遵循图3(中/右)的形式。网络输入是32×32的图像,每个像素减去均值。第一层是3×3卷积。然后我们在大小为{32,16,8}的特征图上分别使用了带有3×3卷积的6n个堆叠层,每个特征图大小使用2n层。滤波器数量分别为{16,32,64}。下采样由步长为2的卷积进行。网络以全局平均池化,一个10维全连接层和softmax作为结束。共有6n+2个堆叠的加权层。下表总结了这个架构:

当使用快捷连接时,它们连接到成对的3×3卷积层上(共3n个快捷连接)。在这个数据集上,我们在所有案例中都使用恒等快捷连接(即选项A),因此我们的残差模型与对应的简单模型具有完全相同的深度,宽度和参数数量。

模型配置:

1.我们使用的权重衰减为0.0001和动量为0.9,并采用[12]和BN[16]中的权重初始化,但没有使用丢弃。
2.这些模型在两个GPU上进行训练,批处理大小为128。
3.我们开始使用的学习率为0.1,在32k次和48k次迭代后学习率除以10,并在64k次迭代后终止训练,这是由45k/5k的训练/验证集分割决定的。
4.我们按照[24]中的简单数据增强进行训练:每边填充4个像素,并从填充图像或其水平翻转图像中随机采样32×32的裁剪图像。
5.对于测试,我们只评估原始32×32图像的单一视图。

测试结果:
我们比较了n=3,5,7,9,得到了20层,32层,44层和56层的网络。图6(左)显示了简单网络的行为。深度简单网络经历了深度增加,随着深度增加表现出了更高的训练误差。这种现象类似于ImageNet中(图4,左)和MNIST中(请看[41])的现象,表明这种优化困难是一个基本的问题。(中)显示了ResNet的行为。与ImageNet的情况类似(图4,右),我们的ResNet设法克服优化困难并随着深度的增加展示了准确性收益。

下图:在CIFAR-10上训练。虚线表示训练误差,粗线表示测试误差。左:简单网络。简单的110层网络错误率超过60%没有展示。中间:ResNet。右:110层ResNet和1202层ResNet。

进一步的测试:

我们进一步探索了n=18得到了110层的ResNet。在这种情况下,我们发现0.1的初始学习率对于收敛来说太大了。因此我们使用0.01的学习率开始训练,直到训练误差低于80%(大约400次迭代),然后学习率变回到0.1并继续训练。学习过程的剩余部分与前面做的一样。这个110层网络收敛的很好(图6,中)。它与其它的深且窄的网络例如FitNet[34]和Highway41相比有更少的参数,但结果仍在目前最好的结果之间(6.43%,表6)。

在CIFAR-10测试集上的分类误差。所有的方法都使用了数据增强。对于ResNet-110,像论文[42]中那样,我们运行了5次并展示了“最好的(mean±std)”。

超过1000层的探索:

我们探索超过1000层的过深的模型。我们设置n=200,得到了1202层的网络,其训练如上所述。我们的方法显示没有优化困难,这个103层网络能够实现训练误差<0.1%(图6,右图)。其测试误差仍然很好(7.93%,表6)。
这个1202层网络的测试结果比我们的110层网络的测试结果更差,虽然两者都具有类似的训练误差。

原因分析:
我们认为这是因为过拟合。对于这种小型数据集,1202层网络可能是不必要的大(19.4M)。在这个数据集应用强大的正则化,如maxout[9]或者dropout[13]来获得最佳结果([9,25,24,34])。

7.在PASCAL和MS COCO上的目标检测

 

 

欢迎批评指正,讨论学习~
最近在github放了两份分类的代码,分别是用Tensorflow和Pytorch实现的,主要用于深度学习入门,学习Tensorflow和Pytorch搭建网络基本的操作。打算将各网络实现一下放入这两份代码中,有兴趣可以看一看,期待和大家一起维护更新。
代码地址:
Tensorflow实现分类网络
Pytorch实现分类网络

 

 

 

 

 

 

 

 

  • 26
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值