深度残差学习的在图像识别中的应用
摘要
层次更深的神经网络更难训练。 我们提出了一个残差的学习框架,以便于对比以前使用的网络深度更深的网络进行训练。 我们明确地将层重新组合成残差函数并将其用于输入,而不是学习未引用的函数。 我们提供全面的经验证据表明这些残差网络更容易优化,并且可以从显著增加的深度获得准确性。 在ImageNet数据集上,我们评估深度高达152层-残差网络 比VGG网更深8倍[41],但仍然具有较低的复杂性。 这些残差网络的集成在ImageNet测试集上实现了3.57%的误差。 该结果在ILSVRC 2015分类任务中获得第一名。 我们还提供了100和1000层的CIFAR-10分析。
网络的深度对于许多视觉识别任务而言至关重要。 仅仅由于我们极其深的模型表示,我们在COCO对象检测数据集上获得了28%的相对改进。 深度残差网是我们向ILSVRC和COCO 2015竞赛1提交的基础,我们还在ImageNet检测,ImageNet定位,COCO检测和COCO分割任务中获得了第一名。
深度卷积神经网络[22,21]为图像分类带来了一系列突破[21,50,40]。 深度网络自然地以端到端多层方式集成低/中/高层次的特征[50]和分类器,并且可以通过堆叠层的数量(深度)来丰富特征的“层次”。 最近的研究[41,44]揭示了网络深度至关重要,而具有挑战性的ImageNet数据集[36]的主要结果[41,44,13,16]都利用了“非常深”的[41]模型, 深度为十六[41]至三十[16]。 许多其他非常重要的视觉识别任务[8,12,7,32,27]也有
在深度的重要性驱动下,出现了一个问题:学习更好的网络就像堆叠更多层一样容易吗? 回答这个问题的一个障碍是:臭名昭着的问题:梯度消失/爆炸梯度[1,9],它从一开始就阻碍了收敛。然而,这个问题在很大程度上通过归一化初始化和中间归一化层来解决,这使得具有数十个层的网络能够开始收敛以用于具有反向传播的随机梯度下降(SGD)。
但是当更深的网络能够开始收敛时,就会出现退化问题:随着网络深度的增加,准确度变得饱和(这可能不足为奇),然后迅速退化。 出乎意料的是,这种退化不是由过度拟合引起的,并且在适当的深度模型中添加更多层会导致更高的训练误差。
退化(训练精度)表明并非所有系统都易于优化。 让我们考虑一个较浅的架构及其更深的对应物,在其上添加更多层。 对于更深层次的模型,存在构造的解决方案:添加的层是身份映射,并且从学习的浅层模型复制其他层。 这种构造的解决方案的存在表明,较深的模型不应该产生比较浅的对应物更高的训练误差。 但实验表明,我们现有的解决方案无法找到比构建的解决方案更好或更好的解决方案(或者在可行的时间内无法做到这一点)。
在本文中,我们通过引入深度残差学习框架来解决退化问题。 我们明确地让这些层适合残差映射,而不是希望每个少数堆叠层直接适合所需的底层映射。 形式上,将期望的底层映射表示为H(x),我们让堆叠的非线性层适合F(x):= H(x)+x的另一个映射。 原始映射则为F(x)+ x。 我们假设优化残差映射比优化原始的未引用的映射更容易。 在极端情况下,如果恒等映射是最优的,则将残差推到零,比通过一堆非线性层拟合恒等映射更容易。
F(x)+ x的公式可以通过具有“shrotcut 连接”的前馈神经网络来实现。 直连方式连接是跳过一个或多个层的连接。 在我们的例子中,直连方式连接只是执行恒等映射,并且它们的输出被添加到堆叠层的输出中。 恒等直连方式连接既不增加额外参数也不增加计算复杂度, 整个网络仍然可以通过反向传播由SGD端到端地进行训练,并且可以使用公共库轻松实现而无需修改求解器。如图:
我们在ImageNet上进行了全面的实验,以退化问题来证明并评估我们的方法。 我们表明:1)我们极深的残差网很容易优化,但对应的“普通”网(简单地堆叠层)在深度增加时表现出更高的训练误差; 2)我们的深度残留网可以轻松地从大大增加的深度中获得准确性增益,从而产生比以前的网络更好的结果。
类似的现象也显示在CIFAR-10集上,表明优化困难和我们的方法的效果不仅仅类似于特定的数据集。 我们在该数据集上提供了100多个成功训练的模型,并探索了超过1000层的模型。
在ImageNet分类数据集[中,我们通过极深的残差网络获得了出色的结果。 我们的152层残差网络是ImageNet上有史以来最深的网络,同时仍然具有比VGG网络更低的复杂性。 我们的团队在ImageNet测试集上有3.57%的前5名错误,并在ILSVRC 2015分类竞赛中获得第一名。 极其深刻的表现也在其他识别任务上具有出色的泛化性能,并使我们在ILSVRC和COCO 2015竞赛中进一步赢得第一名:ImageNet检测,ImageNet本地化,COCO检测和COCO分割。 这一有力证据表明残差学习原则是通用的,我们希望它适用于其他视力和非视力问题。
残差表示。 在图像识别中,VLAD(Vector of Aggragate Locally Descriptor)是通过关于字典的残差向量进行编码的表示,并且Fisher Vector可以被表达为VLAD的概率版本。 它们都是图像检索和分类的强大浅表示。 对于矢量量化,编码残差矢量展现出比编码原始矢量更有效。
在低层次的视觉和计算机图形学中,为了求解偏微分方程(PDEs),广泛使用的多重网格方法将系统重新表述为多个尺度的子问题,其中每个子问题负责较粗和较精细之间的残差解。Multigrid的替代方法是分层基础预处理,它依赖于表示两个标度之间的残差向量的变量。 已经表明,这些求解器比没有残留性质的标准求解器收敛得快得多。 这些方法表明良好的重构或预处理可以简化优化。
直连。 长期以来,人们一直在研究可以实现直连的实践和理论。 训练多层感知器(MLP)的早期实践是添加从网络输入连接到输出的线性层。 一些中间层直接连接到辅助分类器,用于解决消失/爆炸梯度。 “初始”层由直连分支和几个更深的分支组成。
与我们的工作同步的是,“高速公路网络”提供了与闸控功能的直连。这些门是数据相关的并且具有参数,与我们的无参数直连方式形成对比。 当闸控直连方式“关闭”(接近零)时,公路网络中的层表示非残留功能。 相反,我们的表述总是学习残差功能; 我们的身份直连方式永远不会被关闭,所有信息总是通过,还需要学习额外的残差功能。 此外,高速公路网络并没有在深度极度增加的情况下显示出准确性增益。
让我们将H(x)视为由几个堆叠层(不一定是整个网络)拟合的底层映射,其中x表示这些层中第一个的输入。 如果假设多个非线性层可以渐近逼近复杂函数,那么它等效于假设它们可以渐近逼近残差函数,即H(x)- x(假设输入和输出具有相同的维度)。 因此,不是期望堆叠层接近H(x),我们明确地让这些层近似于残余函数F(x):= H(x)-x。 因此原始函数变为F(x)+ x。 虽然两种形式都应该能够渐近地逼近所需的函数(如假设的),但学习的容易程度可能会有所不同。
这种重新制定的动机是关于退化问题的违反直觉的现象。 正如我们在介绍中所讨论的那样,如果添加的层可以构造为恒等映射,则更深层次的模型应该具有不大于其较浅对应物的训练误差。 退化问题表明求解器可能难以通过多个非线性层逼近恒等映射。 利用残差学习重构,如果恒等映射是最优的,则解决方案可以简单地将多个非线性层的权重推向零以接近恒等映射。
在实际情况中,恒等映射不太可能是最优的,但我们的重新制定可能有助于预处理问题。 如果最优函数更接近于恒等映射而不是零映射,那么应该更容易参考恒等映射来查找扰动,而不是将该函数作为新映射来学习。 我们通过实验(图7)表明,学习的残差函数通常具有较小的响应,这表明恒等映射提供了合理的预处理。
我们对每个堆叠层采用残差学习。 构建块如图2所示。在本文中,我们认为构造块定义为:
图二:残差学习:构建块
这里x和y是所考虑的层的输入和输出向量。 函数F(x; f{Wi})表示要学习的残差映射。 对于图2中的例子,它有两层,
其中σ 表示ReLU,省略了偏差以简化符号。 通过直连和逐元素添加来执行操作F + x。 我们在加法后采用第二个非线性单元。
方程中的直连方式连接既不引入额外参数也不引入计算复杂性。 这不仅在实践中具有吸引力,而且在我们对普通网络和残差网络之间的比较中也很重要。 我们可以公平地比较同时具有相同数量的参数,深度,宽度和计算成本的普通/残差网络(除了可忽略的元素添加之外)。
公式中x和F的维度必须相等。 如果不是这种情况(例如,在更改输入/输出通道时),我们可以通过直连方式连接执行线性投影Ws以匹配维度:
我们也可以在方程中使用方阵矩阵。 但是我们将通过实验证明,恒等映射足以解决退化问题并且是经济的,因此Ws仅在匹配维度时使用。
残差函数F的形式是灵活的。 本文中的实验涉及具有两层或三层的函数F(图5),而更多层是可能的。 但是如果F只有一层,则方程(1)类似于线性层:y = W1x + x,我们没有观察到它们的优点。
我们还注意到,尽管为简单起见,上述符号是关于完全连接的层,但它们适用于卷积层。 函数F(x; f{Wi})可以表示多个卷积层。 逐个元素添加是在两个特征映射上逐个通道执行的。
我们测试了各种普通/残差网,并观察到了一致的现象。 为了提供讨论的实例,我们为ImageNet描述了两个模型,如下所示。
普通网络。 我们的普通网络基线(图3,中间)主要受到VGG网络设计理念的启发(图3,左)。 卷积层主要有3*3个过滤器,遵循两个简单的设计规则:(i)对于相同的输出特征映射大小,层具有相同数量的过滤器; (ii)如果特征映射大小减半,则过滤器的数量加倍,以便保持每层的时间复杂度。 我们直接通过步幅为2的卷积层进行下采样。网络以全局平均池层和带有softmax的1000路全连接层结束。 在图3(中间)中,加权层的总数是34。
值得注意的是,我们的模型比VGG网络具有更少的过滤器和更低的复杂性[41](图3,左)。 我们的34层基线有36亿FLOP(乘法增加),仅为VGG-19(196亿FLOP)的18%。
图3. ImageNet的示例网络体系结构。 左图:VGG-19模型(196亿FLOP)作为参考。 中:具有34个参数层(36亿FLOP)的普通网络。 右:具有34个参数层(36亿FLOP)的残差网络。 虚线直连键增加了尺寸。 表1显示了更多细节和其他变体。
残差网络。 基于上述普通网络,我们插入了直连(图3,右),将网络转换为对应的残差版本。 当输入和输出具有相同的尺寸时,可以直接使用标识直连方式(公式(1))(图3中的实线直连方式)。 当尺寸增加时(图3中的虚线直连),我们考虑两个选项:(A)直连方式仍然执行恒等映射,为增加尺寸填充额外的零条目。 此选项不引入额外参数; (B)方程(2)中的投影直连方式用于匹配维度(由1*1个卷积完成)。 对于这两个选项,当直连方式跨越两种尺寸的特征图谱时,它们的步幅为2。
3.4 实现
我们对ImageNet的实现遵循[21,41]中的实践。 调整图像大小,其短边随机采样[256; 480]用于比例增加[41]。 从图像或其水平翻转中随机采样224*224裁剪,减去每像素平均值[21]。 使用[21]中的标准颜色增强。 我们采用批量归一化(BN)[16],在每次卷积之后和激活之前,[16]之后。 我们在[13]中初始化权重,并从头开始训练所有普通/残差网。 我们使用小批量256的SGD。学习率从0.1开始,当误差平稳时除以10,并且模型训练多达60*10^4次迭代。 我们使用0.0001的权重衰减和0.9的动量。 我们不按照[16]中的做法使用dropout[14]。
在测试中,对于比较研究,我们采用标准的剪切10次测试[21]。 为了获得最佳结果,我们采用[41,13]中的完全卷积形式,并在多个尺度上平均得分(图像被调整大小以使得短边在{224; 256; 384; 480; 640}。
4 实验
4.1 ImageNet分类
我们在由1000个类组成的ImageNet 2012分类数据集[36]上评估我们的方法。 模型在128万个训练图像上进行训练,并在50k验证图像上进行评估。 我们还获得了测试服务器报告的100k测试图像的最终结果。 我们的得分是前1和前5错误率。
普通网络。 我们首先评估18层和34层普通网。 34层普通网在图3(中间)。 18层普通网具有类似的形式。 有关详细的体系结构,请参阅表1。
表2中的结果表明,较深的34层平网比较浅的18层平网具有更高的验证误差。 为了揭示原因,在图4(左)中,我们比较了他们在训练过程中的训练/验证错误。 我们观察到了退化问题 - 即使18层普通网络的解空间是34层平面网络的子空间,34层普通网在整个训练过程中也有较高的训练误差。
我们认为这种优化难度不太可能是由于梯度消失造成的。 这些普通网络采用BN [16]进行训练,确保前向传播信号具有非零方差。 我们还验证了向后传播的梯度与BN表现出正常的规范。 因此,前向和后向信号都不会消失。 实际上,34层普通网仍然能够达到竞争准确性(表3),这表明求解器在某种程度上起作用。 我们推测深层次的普通网可能具有指数级低的收敛速度,这会影响训练误差的减少。 这种优化困难的原因将在将来进行研究。
残差网络。 接下来,我们评估18层和34层残差网(ResNets)。 架构的基准与上述普通网络相同,期望直连添加到每对3*3过滤器,如图3(右)所示。 在第一次比较中(表2和图4右),我们对所有直连方式使用标识映射,为增加维度使用零填充(选项A)。 因此,与普通网络相比,他们没有额外的参数。
我们从表2和图4中得到了三个主要观察结果。首先,在残差学习中情况相反 - 34层ResNet优于18层ResNet(2.8%)。 更重要的是,34层ResNet表现出相当低的训练误差,并且可以推广到验证数据。 这表明在该设置中很好地解决了退化问题,并且我们设法从增加的深度获得准确性增益。
其次,与对应的普通网络相比,34层ResNet将前1个误差减少了3.5%(表2),这是由于成功减少了训练误差(图4右对左)。 该比较验证了极深模型上残差学习的有效性。
最后,我们还注意到18层普通/残差网络准确率对比(表2),但18层ResNet收敛速度更快(图4右侧与左侧)。 当网络“不太深”(此处为18层)时,当前的SGD解算器仍然能够找到普通网络的良好解决方案。 在这种情况下,ResNet通过在早期阶段提供更快的收敛来简化优化。
Identity vs. Projection Shortcuts(投影直连)我们已经证明,无参数的标识直连方式有助于训练。 接下来我们研究投影直连方式(方程(2))。 在表3中,我们比较了三个选项:(A)零填充直连方式用于增加维度,所有直连方式都是无参数(与表2和图4右相同); (B)投影直连方式用于增加维度,其他直连方式是标识; (C)所有直连都是投影。
表3显示所有三个选项都明显优于普通对应选项。 B略好于A.我们认为这是因为A中的零填充维度确实没有残差学习。 C略微优于B,我们将其归因于许多(13个)投影直连方式引入的额外参数。 但A / B / C之间的微小差异表明,投影残差对解决退化问题并不重要。 因此,我们在本文的其余部分不使用选项C来减少内存/时间复杂度和模型大小。 标识直连方式对于不增加下面介绍的瓶颈架构的复杂性特别重要。
更深层次的瓶颈架构。 接下来,我们将为ImageNet描述更深层的网络。 由于担心我们能够承受的训练时间,我们将构建块修改为瓶颈设计。 对于每个残差函数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来增加维度。 这个模型的FLOPs为38亿。
101层和152层ResNets:我们通过使用更多的3层块构建101层和152层ResNets(表1)。 值得注意的是,虽然深度显著增加,但152层ResNet(113亿FLOP)的复杂程度仍低于VGG-16/19网(15.3 / 196亿FLOP)。
50/101/152层ResNets比34层ResNets更准确,相当大的差距(表3和4)。 我们没有观察到退化问题,并且从显着增加的深度获得显着的准确性增益。 所有评估指标都见证了深度的好处(表3和表4)。
与最先进的方法进行比较。 在表4中,我们与之前的最佳单模型结果进行了比较。 我们的34层ResNets的基准已经达到了极具竞争力的准确性。 我们的152层ResNet的单模型前5验证误差为4.49%。 该单模型结果优于所有先前的整体结果(表5)。 我们将六种不同深度的模型组合成一个整体(在提交时只有两个152层的模型)。 这得到的测试集上的前5误差为3.57%(表5)。 此项目在2015年ILSVRC中获得第一名。
4.2. CIFAR10 and Analysis
我们对CIFAR-10数据集进行了更多的研究[20],其中包括1包含0个类别的50k个训练图像和10k测试图像。 我们提供在训练集上训练的实验并在测试集上进行评估。 我们的重点是极端深度网络的行为,而不是推动最先进的结果,因此我们有意使用如下的简单架构。
普通/残差架构遵循图3(中/右)中的形式。 网络输入为32*32的图像,减去每个像素的平均值。 第一层是3*3卷积层。 然后我们在尺寸{32; 16; 8}的特征图上分别使用具有3*3卷积的6n层的堆叠,每个特征图维度具有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训练/ 验证比例时确定的。 我们按照[24]中的简单数据增强进行训练:每侧填充4个像素,从填充图像或其水平翻转中随机采样32*32剪切。 为了测试,我们只评估原始32*32图像的单个视图。
我们比较n = {3;5;7; 9},通向20,32,44和56层网络。 图6(左)显示了普通网的行为。 深度普通网络受深度增加的影响,并且在深入时表现出更高的训练误差。 这种现象类似于ImageNet(图4,左)和MNIST(见[42]),表明这种优化难度是一个根本问题。
图6(中)显示了ResNets的表现。 与ImageNet案例(图4,右图)类似,我们的ResNets设法克服优化难度并在深度增加时显示出准确度增益。
我们进一步探索n = 18,构成110层ResNet。 在这种情况下,我们发现0.1的初始学习率有点太大而无法开始收敛。 所以我们使用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通常具有比普通对应网络更小的响应。 这些结果支持我们的基本动机(Sec.3.1),残差函数通常可能比非残差函数更接近零。 我们还注意到,更深层次的ResNet具有更小的响应幅度,如图7中ResNet-20,56和110之间的比较所证明的。当存在更多层时,单个ResNets层倾向于更少地修改信号。
探索超过1000层。 我们探索了超过1000层的非常深层的模型。 我们将n = 200会带来1202层网络,其如上所述进行训练。 我们的方法没有显示优化难度,这个10^3层网络能够实现<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]的物体检测结果基准。 我们采用更快的R-CNN [32]作为检测方法。 在这里,我们感兴趣的是用ResNet-101取代VGG-16 [41]的改进。 使用两种模型的检测实现(见附录)是相同的,因此增益只能归功于更好的网络。 最值得注意的是,在具有挑战性的COCO数据集中,我们获得了COCO标准指标(mAP @ [。5,.95])增加了6.0%,相对改善了28%。 这一收益完全归功于学到的表述。
基于深度残差网络,我们在ILSVRC和COCO 2015竞赛的几个赛道中获得了第一名:ImageNet检测,ImageNet定位,COCO检测和COCO分割。 详情见附录。
附录未翻译,翻译中有错请大家指正。附上原文链接http://www.cs.princeton.edu/courses/archive/spring16/cos598F/msra-deepnet.pdf