论文:https://arxiv.org/abs/1512.03385
图像识别中的深度残差学习
摘要
更深的神经网络更加难以训练。我们提出了一个残差学习框架,以简化那些比以往使用的更加充分深的网络的训练。我们显式地将层重新表示为学习残差函数,并参考层的输入,而不是学习未参考的函数。我们提供了全面的实证证据表明,这些残差网络是最容易优化的,并且可以从显著增加的深度中增加准确性。在 ImageNet 数据集上我们评估深度多达152层的残差网络,这个网络比 VGG 网络[41]还深多 8 倍但依然有更低的复杂度。这些残差网络在 ImageNet 测试数据集上取得了 3.57% 的错误率的总体效果。这个结果在 ILSVRC 2015 分类任务赢得了第一名。我们还在 CIFAR-10 上使用 100 层和 1000 层进行分析。
对许多视觉识别任务来说,模型的深度是核心重要的。仅由于我们的极深表示,在COCO对象检测数据集上我们获得 28% 的相对改进。深度残差网络是我们提交给 ILSVRC & COCO 2015 比赛的基础,我们在 ImageNet 检测、ImageNet 定位、COCO 检测、COCO 分割的任务中也获得了第一名。
1. 前言
深层卷积网络[22, 21]导致了图像分类[21, 50, 40]一系列的突破。深度网络自然地集成低/中/高层的特征[50]和分类器到一个端到端的多层方式,并且可以通过堆叠层(深度)的数量来增加特征的「级别」。最近的证据[41, 44]揭示了网络深度的至关重要性,以及对 challenging ImageNet 数据集[36]的领先结果[41,44,13,16]都利用了“非常深”的[41]模型,深度为16[41]到30[16]。许多其他非凡的视觉识别任务也很好地得益于非常深的模型。
图 1. 20层和56层平面网络在 CIFAR-10 上的训练误差(左)和测试误差(右)。较深的网络有更高的训练误差和测试误差。类似的现象在 ImageNet 上如图 4. 所示。
在深度的重要性的驱动下,一个问题出现了:学习更好的网络就像堆叠更多的层一样容易吗?回答这个问题的一个障碍是梯度消失/爆炸[1,9]这一臭名昭著的问题,它从一开始就阻碍了收敛。然而,这个问题在很大程度上通过正则初始化[23, 9, 37, 13]和中间正则化层[16]得到了解决,它使具有数十层的网络开始收敛于具有反向传播[22]的随机梯度下降(SGD)。
当较深的网络能够开始收敛时,就会暴露出一个退化问题:随着网络深度的增加,准确率变得饱和(这可能并不意外),然后迅速降低。出乎意料地,这种退化不是由过拟合引起的,在合适的深度模型中添加更多的层会导致更高的训练误差,就像[11, 42]中报告的,而我们的实验彻底证实了这一点。图 1 显示了一个典型的例子。
训练精度的下降表明并非所有系统都容易优化。让我们考虑一种较浅的结构及在其中添加了更多的层的其更深层的副本。通过深层模型的构建,存在一个解决方案:添加的层是恒等映射,其他层是从已学习的浅层模型复制的。这种构造解的存在表明,一个更深层次的模型不应该产生比较浅的模型更高的训练误差。但实验表明,我们现有的解决方案无法找到较好好或比构建的方案更好的解决方案(或者无法在可行的时间内找到)。
图 2. 残差学习:一个构建块
在本论文中,我们通过引入一个深度残差学习框架来解决退化问题。我们不希望每一层堆叠的层直接与所需的底层映射相拟合,而是显式地让这些层拟合一个残差映射。形式上,将所需的底层映射表示为$\mathcal{H}(x)$,我们让堆叠的非线性层拟合另一个映射$\mathcal{F}(x):=\mathcal{H}(x)-x$。原始的映射被重新定义为$\mathcal{F}(x)+x$。我们假设优化残差映射比优化原始的、未引用的映射更容易。在极端情况下,如果恒等映射是最优的,那么将残差推到零比通过一堆非线性层来匹配恒等映射要容易得多。
公式$\mathcal{F}(x)+x$可以通过带有捷径的前馈神经网络实现(图 2)。捷径[2, 34, 49]是跳过一个或多个层的。在我们的例子中,捷径只是执行恒等映射,它们的输出被添加到堆叠层的输出中(图 2)。恒等捷径既不添加额外的参数,也不添加计算复杂度。整个网络仍然可以由 SGD 通过反向传播来进行端到端的训练,并且可以使用通用的库(例如,Caffe[19])轻松实现,而不需要修改解决方案。
我们在 ImageNet [36]上做了一个全面的实验来展示退化问题并评估我们的方法。我们展示了:1)我们极深的残差网络很容易优化,但是对应的平面网络(简单的叠加层)在深度增加时显示出更高的训练误差。2)我们的深层残差网络可以很容易地从大大增加的深度中获得准确性增益,产生的结果比以前的网络要好得多。类似的现象也出现在 CIFAR-10 数据集[20]中,这表明优化困难和我们方法的效果不只是在一个特定的数据集上类似。我们在这个数据集上提供了超过100层的成功训练的模型,并探索了超过1000层的模型。
在 ImageNet 分类数据集[36]中,我们通过极深的残差网络获得了优异的结果。我们的152层残差网络是在 ImageNet 上所呈现的最深的网络,同时仍然比 VGG 网络[41]的复杂度低。我们在 ImageNet 测试集中有3.57%的错误的整体效果,并在 ILSVRC 2015 分类大赛中获得第一名。极深的模型在其他识别任务上也普遍有出色的表现,并带领我们进一步在 ILSVRC & COCO 2015 竞赛中赢得了:ImageNet 检测,ImageNet 定位,COCO 检测和 COCO 分割的第一名。这个强有力的证据表明,残差学习原则上是通用的,我们认为它适用于其他的视觉和非视觉问题。
2.相关工作
残差表达。在图像识别, VLAD 是一个由关于字典的残差向量编码的表示,而 Fisher 向量可以定义为 VLAD 的概率版。它们都是图像检索和分类[4, 48]的强大的浅层模型。对于向量量化,编码残差向量[17]被证明比编码原始向量更有效率。
在低层次的视觉和计算机图形中,为了解决偏微分方程(PDEs),广泛使用的多网格方法[3]将系统作为子问题在多个尺度上重新定义,其中每个子问题在较粗糙和较好的尺度之间对于残差解都是可靠的。多网格的另一种选择是分层基础的预处理[45, 46],它依赖于表示两个尺度之间的残差向量的变量。[3, 45, 46]已经表示了,这些求解器比那些不知道解的残差性质的标准求解器收敛速度要快得多。这些方法表明,良好的再定义或预处理可以简化优化。
捷径连接。关于捷径连接[2, 34 ,49]的实践和理论已经研究了很长一段时间了。早期训练多层感知器(MLPs)的方法是增加一个线性层来把网络的输入连接到输出上[34, 49]。在[44, 24]中,一些中间层直接连接到辅助分类器,以解决梯度消失/爆炸。论文[39, 38, 31, 47]提出了的通过捷径连接实现中心化层响应、梯度和传播误差的方法。在[44]中,inception 层由一个捷径分支和一些较深的分支组成。
与我们的工作同时,高速公路网络(highway networks)提出了有门控函数的捷径连接。这些门是数据依赖的,并且有参数,相比之下我们的恒等捷径是参数无关的。当一个门控捷径被“关闭”(接近于零)时,高速公路网络中的层表示非残差函数。相反,我们的公式总是学习残差函数;我们的恒等捷径永远不会关闭,所有的信息都会被传递,并且只需要学习额外的残差函数。此外,高速网络在深度极大增加(例如,超过一百层)中并没有显示出准确度的增益。
3.深度残差学习
3.1.残差学习
让我们把$\mathcal{H}(x)$看作一个底层映射,由一些堆叠的层来拟合(不一定是整个网络),其中$x$表示这些层的第一层的输入。假如有人假设多个非线性层可以渐进地近似复杂函数,那么就等价于假设它们可以渐进地近似恒等函数,也就是说,$\mathcal{H}(x)-x$(假设输入和输出是相同维数的)。所以,预期期望对叠层近似于$\mathcal{H}(x)$,我们显式地让这些层近似一个残差函数$\mathcal{F}(x):=\mathcal{H}(x)-x$。因此原来的函数变为$\mathcal{F}(x)+x$。尽管这两种形式应该都能够很好地近似所需函数(如假设的),但是学习上的容易程度可能会不一样。
这个再定义的动机是关于退化问题的反直觉现象(图 1,左)。就像我们在前言中讨论的那样,如果添加的层可以被构造为恒等映射,一个较深的模型应该不会比较浅模型有更大的训练误差。退化问题表明,求解器可能在通过多个非线性层近似恒等映射时有困难。通过残差学习再定义,如果恒等映射是最优的,求解器可能简单地把多个非线性层的权重变为零来接近恒等映射。
在实际情况中,恒等映射不可能是最优的,但是我们的再定义可能有助于预处理问题。如果最优函数比一个零映射更加接近一个恒等映射,那么相比于将函数作为一个新的函数来学习,求解器应该更加容易找到与恒等映射有关的扰动,我们通过实验(图 7)显示,学习到的残差函数一般都有较小的相应,表明恒等映射提供了合理的预处理。
3.2.捷径的恒等映射
我们将残差学习应用到每一些堆叠层上。图 2 展示了一个构建块。形式上,在这篇论文中,我们考虑一个构建块定义为:$$y=\mathcal{F}(x,{W_i})+x.(1)$$
这里$x$和$y$是被考虑的层的输入和输出向量。函数$\mathcal{F}(x,{W_i})$表示要学习的残差映射。对于图 2 中有两个层的例子,$\mathcal{F}=W_2\sigma(W_1x)$,其中的$\sigma$表示 ReLU[29], 为了简化符号,省略了偏置值。运算$\mathcal{F}+x$通过一个捷径连接和元素方式的添加来执行。我们在添加之后采用第二个非线性(例如,$\sigma(y)$,参考图 2)。
在公式(1)中的捷径连接既不引入额外的参数也不引入计算复杂度。这不仅在实践中很有吸引力,而且在我们对平面网络和残差网络的对比中也很重要。我们可以公平地比较同时具有相同数量的参数、深度、宽度和计算成本(除了可忽略的元素以外)的平面/残差网络。
在公式(1)中$x$和$\mathcal{F}$的维度必需相等。如果不是这种情况(例如,当改变输出/输出通道时),我们可以通过捷径连接执行一个线性投影$W_s$来匹配维度:
$$y=\mathcal{F}(x,{W_i})+W_sx.(2)$$
我们也可以在公式(1)中使用一个方阵$W_s$。但是我们将通过实验证明,恒等映射足够解决退化问题,而且是节俭的,因此只当匹配维度时才使用$W_s$。
残差函数$\mathcal{F}$的形式是很灵活的。这篇论文的实验涉及一个有两到三层的函数$\mathcal{F}$(图 5),然而有更多的层是有可能的。但是如果$\mathcal{F}$只有单独的一层,公式(1)就类似于一个线性层:$y=W_1x+x$,而这样函数我们观察不到它的优点。
我们还注意到,尽管以上符号为简单起见是关于全连接层的,但他们适用于卷积层。函数$\mathcal{F}(x,{W_i})$可以表示多个卷积层。元素级的添加是在两个特征映射的通道之间执行的。
3.3.网络结构
我们已经测试了各种平面/残差网络,并且观察到同样的现象。为了提供讨论的实例,我们描述了 ImageNet 的两个模型,如下:
平面网络。 我们的平面基准(图 3,中)主要受 VGG 网络[41](图 3,左)的启发。卷积层大多数有 3 × 3 的滤波器,并遵循两个简单的设计规则:(i)对于相同的输出特征映射大小,这些层有相同数量的滤波器。(ii)如果特征映射的大小减半,滤波器的数量翻倍,以保持每层的时间复杂度。我们直接使用步长为2的卷积层来执行下采样。该网络以一个全球平均池化层和一个1000类的 sigmoid 全连接层结束。加权层的层数总共为 34(图 3,中)。
值得注意的是,我们的模型比 VGG[41](图 3,左)网络有更少的滤波器和更少的复杂度。我们34层基准网络有 36 亿个 FLOPs(乘-加),只有 VGG-19(196亿个 FLOPs)的 18%。
图 3. ImageNet 网络结构例子。左: 作为参考的 VGG-19 模型[41](196亿个 FLOPs)。中:一个有 34 个参数层的平面网络(36亿个 FLOPs)。右:一个有 34 个参数层的残差网络。(36亿个 FLOPs)。虚线的捷径增加了维度。表格 1 展示了更多细节和其他变体。
残差网络。 基于上述的平面网络,我们插入捷径连接(图 3,右)将网络转换为对应的残差版本。当输入和输出都是相同的尺寸(图 3 中的实现捷径)时,可以直接使用恒等捷径(公式(1))。当维度增加时(图 3 中的虚线捷径),我们考虑两个选择:(A)捷径依然执行恒等映射,但是增加额外的零来增加维度。这个选择不会引入额外的参数;(B)在公式(2)中的投影捷径用来匹配维度(由1×1卷积完成)。对于这两种选择,当捷径跨越两种尺寸的特征映射时,都使用步长为2来执行。
3.4.实现
我们在 ImageNet 上的实现遵循了[21, 41]的实践。图片是根据它在[256, 480]上随机采样的较短边来调整大小的,用来增加尺度[41]。是从一张图片或其水平翻转中随机采样的一次 224×224 的裁剪,而且每个像素都减去均值[21]。使用[21]中的标准颜色增强。在每一次卷积之后激活函数之前,我们采用批次正则化(BN)[16],就像[16]做的。我们像[13]那样做的初始化权值,并且从头训练所有的平面/残差网络。我们使用 SGD , mini-batch size 为256。学习率从0.1开始,每当错误停止下降就除以10,这个模型训练达到 60 × 104 次迭代。我们使用 0.0001 的权重衰减,和 0.9 的动量。不使用失活,遵循[16]的实践。
在测试过程中,为了比较研究,我们采用标准的 10-crop 测试。为了有最好的结果,我们采用[41, 13]中的全卷积形式,然后在多尺度上平均得分(图片调整了大小,因此短边在{224, 256, 384, 480, 640}中取)。
由于只是为了了解 ResNet 的原理,只翻译了前半部分,后面的是实验部分,之后再补上。