1. Motivations
深度网络本质上以端到端的多层方式集成了低/中/高级特征和分类器,并且可以通过堆叠更多的层数(增加深度)来丰富特征的“级别”。研究也表明,网络的深度对模型性能是至关重要的,这就导致出现的网络越来越深。
可是随着深度加深,网络在训练时会遇到著名的“梯度消失”和“梯度爆炸”问题,它们从训练一开始就阻止收敛。但是,这些问题已经通过归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。
但是,随着网络层数的加深,暴露出一个对于训练精度来说,被称为“退化“的问题:随着网络深度增加,在训练集上的精度达到饱和,然后迅速下降。显然,这种现象不是过拟合造成的,因为过拟合会使得训练集上的精度极高。如果此时向一个深度适当的模型添加更多层的话会带来更高的训练误差,如下图所示:
Fig.1 20层和56层的“plain”网络在CIFAR-10上的训练错误率(左)和测试错误率(右)。越深的网络在训练和测试上都具有越高的错误率。
那么如果换一种思路来构建神经网络:假设浅层网络已经可以得到一个不错的结果了,接下来新增加的层什么也不做,只是拟合一个identity mapping(恒等映射),输出就拟合输入,这样构建的深层网络至少不应该比它对应的浅层training error要高,但是实验表明:这样不能得到(与浅层网络)一样好的结果,甚至还会比它差。
为了解决退化问题,作者在该论文中提出了一种叫做“深度残差学习框架”(Deep residual learning framework)的网络。在该结构中,每个堆叠层(Stacked layer)拟合残差映射(Residual mapping),而不是直接拟合整个building block期望的基础映射(Underlying mapping)(将当前栈的输入与后面栈的输入之间的映射称为 underlying mapping)。形式上,如果用H(x)来表示整个building block的映射,那么building block中堆叠的非线性层(即building block中由若干卷积层组成的支路Stacked layer。另一条支路是线性层,表示成恒等映射或投影)拟合的就是另一个映射:F(x)=H(x)-x,所以原映射就变成F(x)+x(整个building block表示的映射依然是H(x),但是拟合的是非线性堆叠层表示的残差映射F (x),没有像以前那样直接对H (x)进行拟合)。事实证明,优化残差映射比优化原来的原始未参考的映射(unreferenced mapping)容易很多。
F(x)+x 可以上图所示的附带“shortcut connections”的前馈神经网络实现。“shortcut connections”就是图中跨一层或更多层的连线,用来执行恒等映射(Identity mapping)。可见,identity shortcut connections不给模型额外添加参数和计算量。此外,整个网络依然能够端到端地使用反向传播算法训练,也可以很容易地使用公共库(如Caffe)实现,且无需修改求解器(solvers,应该是说SGD、RMSProp等训练方法)。
作者在ImageNet上进行的实验说明:
1)深度残差网络易于优化,但是对应的”plain” nets(即由若干层简单堆叠起来的网络)随着深度增加展现出更高的训练误差;
2)深度残差网络很容易从大幅增加的深度上获得精度提升,结果要大幅优于之前的网络。
2. Methods
2.1 Residual Learning(残差学习)
让我们思考一下H(X) 作为由几个堆叠层来拟合的基础映射(underlying mapping),其中x代表输入至这几层的第一层的参数,假如多个线性层可以逐渐逼近复杂的函数,那么它也可以逐渐逼近残差函数,例如H(X) - X(假设输入和输出是相同维度的)。所以,我们让这些层来拟合F(X) = H(X) - X而不是单独的H(X)。那么原始函数就变成了F(X) + X。即使两种函数都可以拟合,但是,学习的难易程度是不一样的。
关于退化问题的反直觉现象(图1,左)是上述表述的动机。正如在介绍中所讨论的,如果添加的层可以构建为恒等映射,那么更深层次的模型的训练错误应该不大于更浅层次的对应模型。退化问题表明,求解器可能在拟合多层非线性恒等映射的问题上有困难。利用残差学习重构,如果恒等映射是最优的,求解器可以简单地将多个非线性层的权值向零逼近以达到恒等映射。
但得到理想的恒等映射是十分困难的(即多层非线性层的权重不是0),不过没关系,残差学习或许能帮我们解决这个问题(就是说,虽然得不到理想的恒等映射,但是可以接近恒等映射的映射,以此缓解退化问题)。Fig.7中的实验结果就证明了这一点:学习到的残差函数通常响应很小(权重很小),说明近似的“恒等映射”给模型提供了合理的预处理。
图7.CIFAR10层响应的标准偏差(std)。响应是BN之后和非线性之前每个3×3层的输出。顶部:图层按原始顺序显示。底部:答案按降序排列。
2.2 Identity Mapping by Shortcuts(快捷连接)
这里介绍了两种 Shortcut connections,第一种用于在特征相加时维度相等的情况下,即恒等映射。
这里的 x 和 y 分别是该层的输入与输出向量,F(x, {Wi})是残差映射学习的函数,就像图2中表示的堆叠层一样,F = W2 * ReLU(W1X),F+X的操作由一条捷径直接连接,并逐元素相加。
恒等映射不会给模型带来额外的参数和计算量。这一点不仅在实际中有很大的优势,在比较普通网络和残差网络时也很重要,因为借助不含参的shortcut connections可以保证二者有相同的参数量、深度、宽度以及计算量。不过,使用不含参的shortcut connections需要x 和F (x)的维度相等,不然无法相加。
如果该条件不满足(比如,通道数不同)的话,我们还可以在shortcut connections中对输入执行一个线性投影Ws来匹配二者的维度,如下:
但是,后面的实验证明,恒等映射已经足够解决退化问题,并且成本很低,因此 Ws 只用在匹配维度上。
值得注意的一点是,该论文中building blocks的堆叠层只有两层或三层,实际上更多层也是可以的。但是,如果堆叠层只有一层的话,整个building block就相当于是线性映射:y =(W+1)x。作者在论文中不建议使用单层堆叠层,因为作者尚未发现这种结构的优点。
上面出于简单性使用的是全连接层的公式,实际上这种方法也可以应用在卷积层上。
2.3 Network Architectures(网络结构)
为了便于讨论,作者在论文中提供了两个在ImageNet上的模型:普通网络结构Plain Network(34-layer plain)和残差网络结构Residual Network(34-layer residual)。如下图所示:
Plain Network:该网络的设计主要是依据VGGNet。如Fig.3左图所示。绝大多数卷积层使用3*3 filters,并且遵循以下设计原则:
1)为了使输出的feature map尺寸相同,各层尽量使用相同数目的filters。
2)如果feature maps的尺寸减半,使用的filters数目就要加倍,目的是保证每层的计算复杂度不变,便于比较(Inception-v3中说这么做也可以避免表示瓶颈)。
3)使用步长为2的卷积进行下采样。
网络的最后使用了一层全局平均池化层(Global average pooling layer)和一层带Softmax的1000-way全连接层。总层数为34。34-layer plain的计算复杂度比VGGNet低很多,其FLOPs(floating point operations per second)数目(3.6 billion)仅占VGG-19(19.6 billion)的18%。
Residual Networks:将上述的Plain Network插入shortcut connections后变成对应的残差版本。如Fig.3中右图所示。图中实线显示的shortcut connection表示输入输出具有相同的维度。
当维度增加时,就使用图中虚线表示的shortcut connection,对此有两种选择:
1)在增加的维度上补0,这样做不会增加参数,但是这样做实际上没有进行残差学习;
2)使用前面提到的Projection shortcut进行维度匹配(通过1*1卷积实现),这样可以增加网络的参数,网络的性能也会提升一些。
但是实验证明,这两种方法对网络性能的影响不大,说明Projection shortcut对解决退化问题来说不是必不可少的。既然如此,作者就在网络中主要使用恒等映射,涉及维度增加的地方才使用Projection shortcut。这样可减少参数量,降低计算量和模型尺寸,对模型性能又不会造成太大影响。不然,如果在很深的网络中大量使用Projection shortcut,增加的计算量是十分庞大的,相较于稍微增加的精度,所付出的计算代价并不划算。
implimention
实现过程参考了AlexNet和VGGNet,细节如下:
图像预处理:将图像随机调整成短边尺寸为[256,480]中的一个数值。
数据增强:从每幅图像中随机裁剪出224*224的区域;随机左右翻转;减去像素均值;标准的颜色增强。
在每层卷积之后和激活之前都使用batch normalization(BN),没有使用Dropout。
从0开始训练plain/residual nets,不使用预训练。
使用SGD,batch size为256;初始学习率为0.1,之后当训练误差持续不变时就缩减10倍;网络训练高达60万iteration。
权重衰减系数为0.0001;动量为0.9。
测试时,为了与其它研究结果作对比,作者使用了standard 10-crop testing;为了获得更好的结果,作者使用了fully-convolutional form,并且平均在多尺度图像上的得分(图像的短边被调整成如下尺寸:{224, 256, 384,480, 640})。
3. Experiments
3.1 ImageNet Classification
Plain Network
在1000类ImageNet上评估,1.28M训练图片,50k验证图片,100k测试图片,评估指标为top-1/top-5 error rate。
更深的 34-layer plain net比稍浅的18-layer plain net在验证集上拥有更高的错误率。为了揭示原因,作者在Fig.4中比较了二者训练时的训练错误率(training errors)和验证错误率(validation errors)。从中可以明显地看出退化问题(Degradation problem):在整个训练过程中,34-layer plain net都有更高的训练错误率,虽然18-layer的解空间只是34-layer的解空间的子空间。
另外,34-layer 的普通网络出现的优化困难问题不可能会是梯度消失造成的,因为网络中使用了很多BN层(BN:Batch Normalization:解决在训练过程中,中间层数据分布发生改变的问题,以防止梯度消失或爆炸、加快训练速度),其作用就是确保正向传播的信号方差不为0。为了进一步确认,作者验证了反向传播的梯度,发现梯度并未消失。所以,原因不会是正向或反向的信号消失。实际上,34-layer的精度还是可以的(参见Table 3),说明求解器solver在一定程度上还是有效的。
Residual Network
接下来作者评估了18-layer和34-layer的 residual nets(ResNets)。它们与前面的plain nets基本相同,不同的是每两层3*3卷积层会添加一条shortcut connnection。在第一个比较(Table 2 和 Fig.4)中,所有的shortcut connection都是恒等映射,增加维度的地方补0以匹配维度。所以该网络相较于plain nets并没有增加额外的参数,这样便于公平地比较。通过观察能够发现:
1)结果与plain nets相反,34-layer ResNet的性能优于18-layer ResNet。更重要的是,34-layer ResNet的训练错误率更低,在验证集上的泛化能力更强。这些现象说明 degradation problem已经被很好地解决了,并且从增加的深度中获得了精度的提升。
2)与对应的plain版本比较,34-layer ResNet的top-1 error降低了。这验证了残差学习在极深网络中的有效性。
18-layer plain/residual nets的精度相当(Table 2),但是18-layer ResNet收敛得更快(Fig.4 right vs. left)。精度相当是因为在18-layer时,当前的求解器(solver)SGD仍能够为plain net找到很好的解。此时,ResNet能在训练早期提供更快的收敛速度来加速优化。
总之,不论网络的深浅,使用残差学习总是有好处的:浅时能够加快收敛,深时可以解决退化问题,使求解器找到较好的解。
Identity vs. Projection Shortcuts
为了确定恒等映射和Projection Shortcuts孰优孰劣,作者对如下三种选择进行了实验:
(A)全部使用恒等映射,通过补0增加维度;
(B)除了增加维度的地方使用Projection Shortcuts以外,其余的全部使用恒等映射;
(C)所有的shortcuts都使用projection。
Table 3展示了3种选择的实验结果。通过分析,作者认为使用 B 最合适,这样既能涉及残差学习又能减少参数量。
Deeper Bottleneck Architectures
在这一部分中,论文作者介绍了三种更深的ResNet:50-layer、101-layer和152-layer ResNets。
在网络很深时,模型的训练时间会难以让人接受。考虑到这个问题,作者就将building block修改成了如Fig.5所示的bottleneck design。具体修改是:将stacked layer由两层换成三层,三层分别为11、33和11卷积层。其中11卷积层先负责降维,再负责升维(恢复维度),3*3卷积层是输入输出维度更小的bottleneck。
最终,Building block和bottleneck design有相近的时间复杂度(因为二者参数量相近)。
需要指出的是,无参的恒等映射对bottleneck architectures来说相当重要。如果projection shortcuts取代恒等映射的话,模型的尺寸和参数量都会加倍,因为它两端连接的都是高维特征。因此,恒等映射使模型更加高效。
1)50-layer ResNet:通过将34-layer net中的每个2-layer block替换成Fig.5中的bottleneck design获得,结果为一个50-layer ResNet。增加维度时使用上述中的方案B(option B);该模型的计算量为3.8 billion个FLOPs
2)101-layer and 152-layer ResNets:作者通过使用更多3-layer blocks构建了 101-layer 和 152-layer ResNets,如Table 1所示。虽然152-layer ResNet(11.3 billion FLOPS)已经非常深,但是计算量仍然比VGG-16/19 networks(15.3/19.6 billion FLOPS)低。
50/101/152-layer ResNets都比34-layer ResNets精度高很多(Table 3 and 4)。所以,随着网络层数的增加,我们并没有看到退化问题,反而在性能上获得了重大提升。这证明残差学习在一定程度上解决了退化问题,使得网络能够继续从增加的深度中获得性能提升。
Comparisons with State-of-the-art Methods
Table 4将ResNets与以前最好的single-model做了比较,从中可以看出在single model result中,ResNets的性能超过其它任何模型。在Table 5中,作者比较了多个ensemble models的性能。结合Table 4 and Table 5可以发现,ResNets的 single-model result甚至超过了以往模型的ensemble results,残差学习的效果可见一斑。
3.2 CIFAR-10 and Analysis
在这个实验中,论文作者聚焦于极深网络的行为,所以有意使用如下的简单架构。
网络输入是32×32的图像,每个像素减去均值。第一层是3×3卷积。然后在大小为{32,16,8}的特征图上分别使用了带有3×3卷积的6n个堆叠层,每个特征图大小使用2n层。滤波器数量分别为{16,32,64}。下采样由步长为2的卷积进行。网络以全局平均池化,一个10维全连接层和softmax作为结束。共有6n+2个堆叠的加权层。当使用shortcut connections时,它们连接到成对的3×3卷积层上(共3n个shortcut connections)。在这个数据集上,我们在所有案例中都使用恒等shortcut connections(option A),因此我们的残差网络模型与对应的简单网络模型具有完全相同的深度,宽度和参数数量。
模型配置:
1.使用的权重衰减为0.0001和动量为0.9
2.这些模型在两个GPU上进行训练,批处理大小为128。
3.学习率为0.1,在32k次和48k次迭代后学习率除以10,并在64k次迭代后终止训练,这是由45k/5k的训练/验证集分割决定的。
4.简单数据增:每边填充4个像素,并从填充图像或其水平翻转图像中随机采样32×32的裁剪图像。
5.对于测试,只评估原始32×32图像的单一视图。
作者进一步在小的CIFAR10数据集上尝试了更深的Resnet网络,其深度最多达到了1202层。不过却发现分类性能终于开始有了一定下降。作者分析认为可能是层数过多,导致模型过于复杂,而CIFAR-10较小的数据集造成了它的过拟合。
测试结果:
我们比较了n=3,5,7,9,得到了20层,32层,44层和56层的网络。Fig.6(left)显示了简单网络的行为。深度简单网络经历了深度增加,随着深度增加表现出了更高的训练误差。这种现象类似于ImageNet中(Fig.4,left)和MNIST中的现象,这表明这种优化困难是一个基本的问题。(Fig.4,right)显示了ResNet的行为。与ImageNet的情况类似,我们的ResNet设法克服优化困难并随着深度的增加展示了准确性收益。
下图:在CIFAR-10上训练。虚线表示训练误差,粗线表示测试误差。左:简单网络。简单的110层网络错误率超过60%没有展示。中间:ResNet。右:110层ResNet和1202层ResNet。
作者进一步探索了由n=18所得的110层的ResNet。在这种情况下,0.1的初始学习率对于收敛来说太大了。作者使用0.01的学习率开始训练,直到训练误差低于80%(大约400次迭代),然后学习率变回到0.1并继续训练。学习过程的剩余部分与前面做的一样。实验结果可知这个110层网络收敛的很好。它与其它的深且窄的网络例如FitNet和Highway41相比有更少的参数,但结果仍在目前最好的结果之间(6.43%,Table 6)。
Analysis of Layer Responses:‘
图7展示了层响应的标准差
响应是每个3×3层的输出,在BN之后和其他非线性(ReLU/addition)之前,对于ResNets来说,这一分析揭示了残差函数的响应强度。图7显示,ResNet的响应通常比普通网络要小,这个结果支撑了作者在3.1章中所说的:残差函数相比于其他非残差函数来说,更接近于0。同时也注意到更深的ResNet有更小的响应幅度,这是通过对比20层,56层和110层ResNet得到的证据。当有更多层时,ResNet的单个层对信号的modify更少。
3.3 Object Detection on PASCAL and MS COCO
本方法在其它识别任务中具有良好的泛化性能。表7和表8显示了PASCAL VOC 2007 and 2012年[5]和COCO[26]的目标检测baseline结果。我们采用Faster R-CNN[32]作为检测方法。这里我们感兴趣的是用ResNet-101替换VGG-16[40]之后的改进。使用这两种模型的检测实现(见附录)是相同的,因此只能将增益归因于更好的网络。最值得注意的是,在具有COCO数据集上,我们获得了COCO标准度量(mAP@[.5,.95])6%的提升,相对提高了28%,这个增益仅仅是由于学习的表征(This gain is solely due to the learned representations.)。