橦言无忌

一个不想改变世界的程序媛

Deep Residual Learning for Image Recognition

前言

残差连接,让深层神经网络能够正常训练而不至于陷入梯度消失困境的有力武器,Kaiming He的又一神作之一。

理解残差连接的由来和贡献,以及后续还有什么优化方向

摘要

更深的神经网络更难训练,本文提出了一个残差学习框架,简化更深的神经网络训练。 本文明确地将网络层重新表述为考虑了输入的learning redidual functions,而不是learning unreferenced functions。 本文提供了全面的经验证据,表明这些残差网络更容易优化,并且可以从显著增加的深度中获得更好准确性。

在 ImageNet 数据集上,本文评估了深度高达 152 层的残差网络,比 VGG 网络 [41] 深 8 倍,但仍然具有较低的复杂性,这些残差网络的集合在 ImageNet 测试集上达到了 3.57% 的错误率,该结果在 ILSVRC 2015 分类任务中获得第一名。本文还对具有 100 层和 1000 层的 CIFAR-10 进行了分析。

特征表示的深度对于许多视觉识别任务至关重要,仅由于本文极深的特征表示,本文在 COCO 对象检测数据集上获得了 28% 的相对改进。 深度残差网络是本文提交给 ILSVRC 和 COCO 2015 竞赛的基础,本文还在 ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割任务上获得了第一名。

一,介绍

深度卷积神经网络 [22、21] 已经在图像分类领域取得了一系列突破 [21、50、40]。 深度网络以端到端的多层方式自然地集成了低、中、高级特征[50]和分类器,特征的“层次”可以通过堆叠层数(深度)来丰富。 最近的文章 [41、44] 表明网络深度至关重要,在具有挑战性的 ImageNet 数据集 [36] 上的领先结果 [41、44、13、16] 都利用“非常深”的 [41] 模型,如具有深度为16 [41] 至30 [16]。 许多其他重要的视觉识别任务 [8、12、7、32、27] 也极大地受益于非常深的模型。

在深度重要性的驱动下,出现了一个问题:是否堆叠更多层就能学习更好的网络?

回答这个问题的一个障碍是臭名昭著的梯度消失、爆炸问题 [1,9],它从一开始就阻碍了收敛。 然而,这个问题已在很大程度上通过对初始化参数进行归一化 [23、9、37、13] 和对中间层归一化 [16] 得到解决,这使得具有数十层的网络开始收敛以进行随机梯度下降 (SGD) 反向传播[22]。

当更深的网络能够开始收敛时,一个退化问题就暴露出来了:随着网络深度的增加,准确率达到饱和(这可能不足为奇),然后迅速退化。 出乎意料的是,这种退化不是由过度拟合引起的,并且向适当深度的模型添加更多层会导致更高的训练误差,如 [11,42] 中所报告的那样,并通过本文的实验进行了彻底验证。 图 1 显示了一个典型的例子。

训练精度的下降表明并非所有系统都一样容易优化,让本文考虑一个较浅的架构及其更多网络层的深度对应物。 对于更深层次的模型存在一种构造解决方案:添加的层是身份映射,其他层是从学习到的较浅模型中复制的。 这种构造的解决方案表明,较深的模型不应比其较浅的模型产生更高的训练误差。 但实验表明,本文目前手头的求解器无法找到与构建的解决方案相当或更好的解决方案(或无法在可行的时间内这样做)。

在本文中,本文通过引入深度残差学习框架来解决退化问题,本文不是希望每几个堆叠层直接适合所需的底层映射,而是明确让这些层适合残差映射。 形式上,将所需的底层映射表示为 $\mathcal{H}(x)$,本文让堆叠的非线性层 $\mathcal F(x) := \mathcal H(x) − x$ 拟合另一个映射,原始映射被重铸为 $\mathcal F(x)+x$。 本文假设优化残差映射比优化原始的(original)、未引用的(unreferenced)映射更容易。 在极端情况下,如果恒等映射是最优的,则就是残差为零,比通过一堆非线性层拟合恒等映射更容易。

$\mathcal F (x) + x$ 的公式可以通过具有“快捷连接”(short connection)的前馈神经网络来实现(图 2),快捷连接 [2,34,49] 是那些跳过一层或多层的连接。 在本文的例子中,快捷连接简单地执行身份映射,并且它们的输出被添加到堆叠层的输出中(图 2),身份快捷方式连接既不增加额外参数也不增加计算复杂性,整个网络仍然可以通过带有反向传播的 SGD 进行端到端训练,并且可以使用通用库(例如 Caffe [19])轻松实现,而无需修改求解器。

本文在 ImageNet [36] 上进行了综合实验,以显示退化问题并评估本文的方法,结果表明:1)本文的极深残差网络很容易优化,但对应的“plain”网络(简单地堆叠层)在深度增加时表现出更高的训练误差; 2)本文的深度残差网络可以很容易地从大大增加的深度中获得精度增益,产生比以前的网络好得多的结果。

在 CIFAR-10 集 [20] 上也显示了类似的现象,这表明本文的方法的优化困难和效果不仅仅适用于特定的数据集。 本文使用超过 100 层的模型在多个数据集上成功训练,并探索超过 1000 层的模型。

在 ImageNet 分类数据集 [36] 上,本文通过极深的残差网络获得了出色的结果,本文的 152 层残差网络是 ImageNet 上有史以来最深的网络,同时其复杂性仍低于 VGG 网络 [41]。 本文的集成在 ImageNet 测试集上的 top-5 错误率为 3.57%,并在 ILSVRC 2015 分类竞赛中获得第一名。 极深的表示在其他识别任务上也具有出色的泛化性能,并带领本文在 ILSVRC & COCO 2015 竞赛中进一步赢得了 ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割方面的第一名。 这个有力的证据表明残差学习原则是通用的,本文期望它适用于其他视觉和非视觉问题。

二,相关工作

residual representations

在图像识别中,VLAD [18] 是一种通过残差向量对字典进行编码的表示,Fisher Vector [30] 可以表示为 VLAD 的概率版本 [18],它们都是用于图像检索和分类的强大的浅层表示 [4, 48]。 对于矢量量化,编码残差矢量[17]被证明比编码原始矢量更有效。

在低级视觉和计算机图形学中,为了求解偏微分方程 (PDE),广泛使用的多重网格方法 [3] 将系统重新表述为多个尺度的子问题,其中每个子问题在较粗和较细的尺度之间负责残差解。 Multigrid 的替代方法是分层基础预处理 [45,46],它依赖于表示两个尺度之间的残差向量的变量,已经表明 [3,45,46] 这些求解器比不知道解的剩余性质的标准求解器收敛得更快。 这些方法表明,良好的重新制定或预处理可以简化对应的优化问题。

shortcut connection

导致快捷连接 [2,34,49] 的实践和理论已经被研究了很长时间,训练多层感知器 (MLP) 的早期实践是添加一个从网络输入连接到输出的线性层 [34、49]。 在 [44,24] 中,一些中间层直接连接到辅助分类器以解决梯度消失、爆炸问题。 [39、38、31、47] 等论文提出了通过快捷连接实现中间层响应、梯度和传播误差的方法,在 [44] 中,“初始”层由一个快捷分支和几个更深的分支组成。

与本文的工作同时进行的是,“高速公路网络”[42、43] 提供了具有门控功能的快捷连接 [15]。 这些门依赖于数据并具有参数,这与本文的无参数恒等式快捷方式形成对比。 当门控捷径“关闭”(接近零)时,高速公路网络中的层表示非残差函数。 相反,本文的公式总是学习残差函数; 本文的身份捷径永远不会关闭,所有信息总是通过,还有额外的剩余功能需要学习。 此外,高速公路网络并没有表现出随着深度的极大增加(例如,超过 100 层)而获得的准确性提升。

三,深度残差学习

3.1 残差学习

让本文将 H(x) 视为由几个堆叠层(不一定是整个网络)拟合的基础映射,其中 x 表示这些层中第一层的输入。 如果假设多个非线性层可以渐近逼近复杂函数2,那么就等价于假设它们可以渐近逼近残差函数,即 H(x) − x(假设输入和输出是 尺寸相同)。 因此,本文不是期望堆叠层近似 H(x),而是明确地让这些层近似残差函数 F(x) := H(x) − x。 因此,原始函数变为 F(x)+x。 尽管这两种形式都应该能够渐近逼近所需的函数(如假设的那样),但学习的难易程度可能不同。
这种重新表述的动机是关于退化问题的违反直觉的现象(图 1,左)。 正如本文在介绍中所讨论的,如果可以将添加的层构造为恒等映射,则更深的模型的训练误差应该不大于其较浅的对应层。 退化问题表明求解器可能难以通过多个非线性层来近似恒等映射。 通过残差学习重构,如果恒等映射是最优的,求解器可以简单地将多个非线性层的权重推向零以接近恒等映射。
在实际情况下,恒等映射不太可能是最优的,但本文的重新表述可能有助于解决问题。 如果最优函数更接近恒等映射而不是零映射,求解器应该更容易找到参考恒等映射的扰动,而不是将函数作为新函数学习。 本文通过实验(图 7)表明,学习到的残差函数通常具有较小的响应,这表明恒等映射提供了合理的预处理。

3.2 快捷方式的身份映射(Identity Mapping by Shortcuts)

本文对每几个堆叠层采用残差学习。 构建块如图 2 所示。正式地,在本文中,本文考虑将构建块定义为:

这里 x 和 y 是所考虑层的输入和输出向量。 函数 F (x, {Wi }) 表示要学习的残差映射。 对于图 2 中具有两层的示例,F = W2σ(W1x),其中 σ 表示 ReLU [29],并且为了简化符号而省略了偏差。 操作 F + x 是通过快捷连接和逐元素加法执行的。 本文采用相加后的第二个非线性(即 σ(y),见图 2)。
Eqn.(1) 中的快捷连接既不引入额外参数也不引入计算复杂度。 这不仅在实践中很有吸引力,而且在本文比较普通网络和残差网络时也很重要。 本文可以公平地比较同时具有相同数量的参数、深度、宽度和计算成本(除了可忽略的逐元素加法)的普通/残差网络。
在等式(1)中 x 和 F 的维数必须相等。 如果不是这种情况(例如,当更改输入/输出通道时),本文可以通过快捷连接执行线性投影 Ws 以匹配维度:
y = F (x, {Wi }) + Ws x。 (2)
本文也可以在等式(1)中使用方阵Ws。 但本文将通过实验表明恒等映射足以解决退化问题并且是经济的,因此 Ws 仅在匹配维度时使用。
残差函数F的形式是灵活的。 本文中的实验涉及具有两层或三层的函数 F(图 5),但更多层也是可能的。 但是如果 F 只有一个层,Eqn.(1) 类似于一个线性层:y = W1 x + x,本文没有观察到优势。
本文还注意到,尽管为简单起见,上述符号是关于全连接层的,但它们适用于卷积层。 函数 F(x,{Wi}) 可以表示多个卷积层。 逐个元素的加法是在两个特征图上逐个通道执行的。

3.3 网络框架

本文测试了各种普通/残差网络,并观察到了一致的现象。 为了提供讨论的实例,本文描述了 ImageNet 的两个模型如下。

原始网络

本文的普通基线(图 3,中间)主要受到 VGG 网络哲学的启发 [41](图 3,左)。 卷积层大多具有 3×3 过滤器,并遵循两个简单的设计规则:(i)对于相同的输出特征图大小,层具有相同数量的过滤器; (ii) 如果特征图大小减半,则过滤器的数量加倍,以保持每层的时间复杂度。 本文直接通过步长为 2 的卷积层执行下采样。网络以全局平均池化层和具有 softmax 的 1000 路全连接层结束。 图 3(中间)中的加权层总数为 34。
值得注意的是,本文的模型比 VGG 网络 [41](图 3,左)具有更少的过滤器和更低的复杂性。 本文的 34 层基线有 36 亿次 FLOP(乘加),仅为 VGG-19(196 亿次 FLOP)的 18%。

残差网络

基于上述普通网络,本文插入快捷连接(图 3,右),将网络变成对应的残差版本。 当输入和输出具有相同维度时,可以直接使用身份快捷方式(Eqn.(1))(图 3 中的实线快捷方式)。 当维度增加时(图 3 中的虚线快捷方式),本文考虑两种选择:(A) 快捷方式仍然执行身份映射,为增加维度填充额外的零条目。 这个选项没有引入额外的参数; (B) Eqn.(2) 中的投影快捷方式用于匹配维度(通过 1×1 卷积完成)。 对于这两个选项,当快捷方式跨越两种大小的特征图时,它们以 2 的步幅执行。

3.4 实现

本文对 ImageNet 的实现遵循 [21, 41] 中的做法。 调整图像大小,其短边在 [256、480] 中随机采样以进行缩放 [41]。 从图像或其水平翻转中随机采样 224×224 裁剪,减去每个像素的平均值 [21]。 使用[21]中的标准颜色增强。 本文在每次卷积之后和激活之前采用批量归一化 (BN) [16],遵循 [16]。 本文像 [13] 中一样初始化权重,并从头开始训练所有普通/残差网络。 本文使用 mini-batch 大小为 256 的 SGD。学习率从 0.1 开始,当误差趋于平稳时除以 10,模型训练最多 60 × 104 次迭代。 本文使用 0.0001 的权重衰减和 0.9 的动量。 本文不使用 dropout [14],遵循 [16] 中的做法。
在测试中,为了进行比较研究,本文采用标准的 10-crop 测试 [21]。 为了获得最佳结果,本文采用 [41, 13] 中的全卷积形式,并在多个尺度上平均得分(调整图像大小,使短边位于 {224, 256, 384, 480, 640})。

四,实验

4.1 ImageNet 分类任务

本文在包含 1000 个类的 ImageNet 2012 分类数据集 [36] 上评估本文的方法。 这些模型在 128 万张训练图像上进行训练,并在 5 万张验证图像上进行评估。 本文还获得了测试服务器报告的 100k 测试图像的最终结果。 本文评估 top-1 和 top-5 错误率。

原始网络

本文首先评估 18 层和 34 层普通网络。 34 层平面网如图 3(中)所示。 18层素网的形式类似。 有关详细架构,请参见表 1。
表 2 中的结果表明,较深的 34 层普通网络比较浅的 18 层普通网络具有更高的验证错误。 为了揭示原因,在图 4(左)中,本文比较了他们在训练过程中的训练/验证错误。 本文已经观察到退化问题——34 层普通网络在整个训练过程中具有更高的训练误差,即使 18 层普通网络的解空间是 34 层网络的解空间的子空间。
本文认为这种优化困难不太可能是由梯度消失引起的。 这些普通网络是用 BN [16] 训练的,它确保前向传播的信号具有非零方差。 本文还验证了 BN 的反向传播梯度表现出健康的范数。 所以前向或后向信号都不会消失。 事实上,34 层普通网络仍然能够达到具有竞争力的精度(表 3),这表明求解器在一定程度上起作用。 本文推测深层普通网络可能具有指数级的低收敛率,这会影响训练误差的减少 3。 这种优化困难的原因将在未来进行研究。

残差网络

接下来本文评估 18 层和 34 层残差网络 (ResNets)。 基线架构与上述普通网络相同,除了将快捷连接添加到每对 3×3 滤波器,如图 3(右)所示。 在第一个比较中(表 2 和图 4 右),本文对所有快捷方式使用恒等映射,对增加的维度使用零填充(选项 A)。 所以与普通的对应物相比,它们没有额外的参数。
本文从表 2 和图 4 中得到了三个主要观察结果。首先,残差学习的情况是相反的——34 层 ResNet 优于 18 层 ResNet(2.8%)。 更重要的是,34 层 ResNet 表现出相当低的训练误差,并且可以推广到验证数据。 这表明退化问题在此设置中得到了很好的解决,本文设法从增加的深度中获得准确度增益。
其次,与其普通对应物相比,34 层 ResNet 将 top-1 错误减少了 3.5%(表 2),这是由于成功减少了训练错误(图 4 右与左)。 这种比较验证了残差学习在极深系统上的有效性。
最后,本文还注意到 18 层普通网络/残差网络相对准确(表 2),但 18 层 ResNet 收敛得更快(图 4 右与左)。 当网络“不太深”(此处为 18 层)时,当前的 SGD 求解器仍然能够为普通网络找到好的解决方案。 在这种情况下,ResNet 通过在早期提供更快的收敛来简化优化。

Identity vs. Projection Shortcuts

本文已经证明,无参数的恒等式快捷方式有助于训练。 接下来本文研究投影捷径(Eqn.(2))。 在表 3 中,本文比较了三个选项:(A) 零填充快捷方式用于增加维度,所有快捷方式都是无参数的(与表 2 和图 4 右相同); (B) projection shortcuts用于增加维度,其他shortcuts是identity; (C) 所有捷径都是投影。
表 3 显示所有三个选项都比普通选项好得多。 B 略好于 A。本文认为这是因为 A 中的零填充维度确实没有残差学习。 C 略好于 B,本文将此归因于许多(十三个)投影快捷方式引入的额外参数。 但是 A/B/C 之间的微小差异表明投影捷径对于解决退化问题并不是必不可少的。 因此,本文在本文的其余部分不使用选项 C,以减少内存/时间复杂性和模型大小。 身份捷径对于不增加下面介绍的瓶颈架构的复杂性尤为重要。

更深的bottleneck架构

接下来,本文将描述 ImageNet 的更深层网络。 由于担心本文可以承受的训练时间,本文将构建块修改为瓶颈设计 4。 对于每个残差函数 F,本文使用 3 层堆栈而不是 2 层(图 5)。 三层分别是 1×1、3×3 和 1×1 卷积,其中 1×1 层负责减少然后增加(恢复)维度,而 3×3 层成为输入/输出维度较小的瓶颈 . 图 5 显示了一个示例,其中两种设计具有相似的时间复杂度。
无参数恒等式捷径对于瓶颈架构尤为重要。 如果将图 5(右)中的恒等捷径替换为投影,可以看出时间复杂度和模型大小增加了一倍,因为捷径连接到两个高维端。 因此,身份捷径可以为瓶颈设计带来更高效的模型。

50层resnet

本文用这个 3 层瓶颈块替换 34 层网络中的每个 2 层块,从而产生 50 层 ResNet(表 1)。 本文使用选项 B 来增加维度。 这个模型有 38 亿次 FLOP。

101层和152层resnet

本文通过使用更多的 3 层块构建 101 层和 152 层 ResNet(表 1)。 值得注意的是,虽然深度显着增加,但 152 层 ResNet(113 亿 FLOPs)的复杂性仍然低于 VGG-16/19 网络(153/196 亿 FLOPs)。
50/101/152 层 ResNets 比 34 层 ResNets 的准确度高出相当大的幅度(表 3 和 4)。 本文没有观察到退化问题,因此可以从显着增加的深度中获得显着的精度提升。 所有评估指标都见证了深度的好处(表 3 和 4)。

对比sota模型

在表 4 中,本文与之前的最佳单模型结果进行了比较。 本文的基线 34 层 ResNets 已经达到了非常有竞争力的精度。 本文的 152 层 ResNet 的单模型前 5 验证错误率为 4.49%。 这个单一模型的结果优于所有以前的整体结果(表 5)。 本文将六个不同深度的模型组合成一个集成(提交时只有两个 152 层的模型)。 这导致测试集上的 top-5 错误率为 3.57%(表 5)。 此条目在 ILSVRC 2015 中获得第一名。

4.2 CIFAR-10和分析

本文对 CIFAR-10 数据集 [20] 进行了更多研究,该数据集由 10 个类别的 50k 训练图像和 10k 测试图像组成。 本文提出了在训练集上训练并在测试集上进行评估的实验。 本文的重点是极深网络的行为,而不是推动最先进的结果,因此本文有意使用如下简单的架构。
普通/残差架构遵循图 3(中/右)中的形式。 网络输入是 32×32 图像,减去每个像素的平均值。 第一层是 3×3 卷积。 然后,本文在大小为 {32、16、8} 的特征图上分别使用 6n 层和 3×3 卷积,每个特征图大小有 2n 层。 过滤器的数量分别为{16、32、64}。 子采样由步幅为 2 的卷积执行。网络以全局平均池、10 路全连接层和 softmax 结束。 总共有 6n+2 个堆叠的加权层。 下表总结了架构:

当使用快捷方式连接时,它们连接到成对的 3×3 层(总共 3n 个快捷方式)。 在这个数据集上,本文在所有情况下都使用恒等捷径(即选项 A),因此本文的残差模型与普通模型具有完全相同的深度、宽度和参数数量。
本文使用 0.0001 的权重衰减和 0.9 的动量,并采用 [13] 和 BN [16] 中的权重初始化但没有丢失。 这些模型在两个 GPU 上以 128 的小批量大小进行训练。 本文从 0.1 的学习率开始,在 32k 和 48k 迭代时将其除以 10,并在 64k 迭代时终止训练,这是根据 45k/5k train/val split 确定的。 本文按照 [24] 中的简单数据增强进行训练:每边填充 4 个像素,并从填充图像或其水平翻转中随机采样 32×32 裁剪。 为了测试,本文只评估原始 32×32 图像的单个视图。
本文比较 n = {3, 5, 7, 9},得到 20、32、44 和 56 层网络。 图 6(左)显示了普通网络的行为。 deep plain nets 受深度增加的影响,并且在更深时表现出更高的训练误差。 这种现象类似于 ImageNet(图 4,左)和 MNIST(见 [42])上的现象,表明这种优化困难是一个基本问题。
图 6(中)显示了 ResNet 的行为。 同样类似于 ImageNet 案例(图 4,右),本文的 ResNets 设法克服了优化困难,并在深度增加时展示了精度增益。
本文进一步探索导致 110 层 ResNet 的 n = 18。 在这种情况下,本文发现初始学习率 0.1 有点太大,无法开始收敛5。 所以本文使用 0.01 来预热训练,直到训练误差低于 80%(大约 400 次迭代),然后回到 0.1 继续训练。 学习计划的其余部分如前所述。 这个 110 层网络收敛良好(图 6,中间)。 它比 FitNet [35] 和 Highway [42](表 6)等其他深度和薄网络的参数更少,但却是最先进的结果之一(6.43%,表 6)。

层反馈分析

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

探索超过1000层模型

本文探索了一个超过 1000 层的深度模型。 本文将 n = 200 设置为 1202 层网络,该网络按上述方式训练。 本文的方法没有优化困难,这个 103 层网络能够实现训练误差 <0.1%(图 6,右)。 它的测试误差仍然相当不错(7.93%,表 6)。
但是在如此激进的深度模型上仍然存在未解决的问题。 这个 1202 层网络的测试结果比本文的 110 层网络差,尽管两者的训练误差相似。 本文认为这是因为过度拟合。 对于这个小数据集,1202 层网络可能不必要地大 (19.4M)。 应用诸如 maxout [10] 或 dropout [14] 之类的强正则化以获得此数据集上的最佳结果 ([10, 25, 24, 35])。 在本文中,本文不使用 maxout/dropout,只是通过设计的深度和瘦架构简单地施加正则化,而不会分散对优化困难的关注。 但是结合更强大的正则化可能会改善结果,本文将在未来进行研究。

4.3 PASCAL 和 MS COCO上的目标检测

本文的方法在其他识别任务上具有良好的泛化性能。 表 7 和表 8 显示了 PASCAL VOC 2007 和 2012 [5] 以及 COCO [26] 的对象检测基线结果。 本文采用 Faster R-CNN [32] 作为检测方法。 在这里,本文对用 ResNet-101 替换 VGG-16 [41] 的改进感兴趣。 使用两种模型的检测实现(见附录)是相同的,因此收益只能归功于更好的网络。 最引人注目的是,在具有挑战性的 COCO 数据集上,本文获得了 COCO 标准指标 (mAP@[.5, .95]) 6.0% 的提高,相对提高了 28%。 这种增益完全归功于学习到的表征。
基于深度残差网络,本文在 ILSVRC & COCO 2015 竞赛的几个赛道上获得了第一名:ImageNet 检测、ImageNet 定位、COCO 检测和 COCO 分割。 详情载于附录。

// 代码折叠