论文题目:Deep Residual Learning for Image Recognition
论文地址:https://arxiv.org/pdf/1512.03385.pdf
Pytorch官方代码:https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py
更深的神经网络更难训练。我们提出了一种残差学习框架来减轻网络训练,这些网络比以前使用的网络更深。我们明确地将层变为学习关于层输入的残差函数,而不是学习未参考的函数。我们提供了全面的经验证据说明这些残差网络很容易优化,并可以显著增加深度来提高准确性。在ImageNet数据集上我们评估了深度高达152层的残差网络——比VGG[40]深8倍但仍具有较低的复杂度。这些残差网络的集合在ImageNet测试集上取得了3.57%的错误率。这个结果在ILSVRC 2015分类任务上赢得了第一名。我们也在CIFAR-10上分析了100层和1000层的残差网络。
对于许多视觉识别任务而言,表示的深度是至关重要的。仅由于我们非常深度的表示,我们便在COCO目标检测数据集上得到了28%的相对提高。深度残差网络是我们向ILSVRC和COCO 2015竞赛提交的基础,我们也赢得了ImageNet检测任务,ImageNet定位任务,COCO检测和COCO分割任务的第一名。
深度卷积神经网络[22,21]在图像分类方面取得了一系列突破[21,50,40]。深度网络自然地将低/中/高级特征[49]和分类器以端到端多层方式进行集成,特征的“级别”可以通过堆叠层的数量(深度)来丰富。最近的证据[40, 43]显示网络深度至关重要,在具有挑战性的ImageNet数据集上领先的结果都采用了“非常深”[40]的模型,深度为16 [40]到30 [16]之间。许多其它重要的视觉识别任务[7, 11, 6, 32, 27]也很大程度上得益于非常深的模型。
在深度意义的驱使下,一个问题出现了:学习更好的网络就像叠加更多层次一样容易吗?回答这个问题的一个障碍是臭名昭著的梯度消失/爆炸问题[1,9],它从一开始就阻碍收敛。然而,这个问题已经在很大程度上通过归一化初始化[23,9,37,13]和中间归一化层[16]来解决,这使得数十层的网络开始收敛到带有backpropagation[22]的随机梯度下降(SGD)。
在深度重要性的推动下,出现了一个问题:学习更好的网络是否像堆叠更多的层一样容易?回答这个问题的一个障碍是梯度消失/爆炸[14, 1, 8]这个众所周知的问题,它从一开始就阻碍了收敛。然而,这个问题通过标准初始化( normalized initialization)[23, 8, 36, 12]和中间标准化(intermediate normalization)层[16]在很大程度上已经解决,这使得数十层的网络能通过具有反向传播(back propagation)的随机梯度下降(SGD)法开始收敛。
当更深的网络能够开始收敛时,暴露了一个退化问题:随着网络深度的增加,准确率达到饱和(这可能并不奇怪)然后迅速下降。意外的是,这种退化不是由过拟合引起的,并且在适当的深度模型上添加更多的层会导致更高的训练误差,正如[10, 41]中报告的那样,并且我们的实验也得到了充分的验证。图1给出了一个典型的例子。
图1.20层和50层的“简单”网络在CIFAR-10上的训练误差(左)和测试误差(右)。更深的网络有更高的训练误差和测试误差。ImageNet上的类似现象如图4所示。
退化(训练准确率)表明不是所有的系统都很容易优化。让我们考虑一种较浅的结构及在其上添加了更多层的较深的结构。这存在一种构建(construction)到更深层模型的解决方案:通过恒等映射(identity mapping)来构建增加的层,而其它层直接从浅层模型中复制而来。该解的存在性表明,更深层次的模型不应比较浅的模型产生更高的训练误差。 但是实验表明,我们目前无法找到一个与这种构建的解决方案相当或者更好的方案(或者说无法在可行的时间内实现)。
在本文中,我们通过引入深度残差学习框架( a deep residual learning framework )来解决退化问题。我们不是希望每几个堆叠的层直接拟合所需的底层映射(desired underlying mapping),而是显式地让这些层拟合一个残差映射(residual mapping)。 假设所需的底层映射为 H(x),我们让堆叠的非线性层来拟合另一个映射: F(x):=H(x)−x。 因此原来的映射转化为:F(x)+x。我们假设优化残差映射比优化原始的未参考的映射容易。在极端情况下,如果恒等映射是最优的,则将残差推至零比用一堆非线性层拟合恒等映射更容易。
公式 F(x)+x 可以通过前馈神经网络( feedforward neural networks )的“快捷连接(shortcut connections)”来实现(图2)。快捷连接[2,34,49]是跳过一个或多个层的连接。在本例中,快捷连接只执行恒等映射,它们的输出被添加到叠加层的输出中(图2)。恒等快捷连接既不增加额外的参数,也不增加计算复杂度。整个网络仍然可以使用反向传播的SGD进行端到端的训练,并且可以使用公共库(例如caffe[19])来实现,而无需修改求解器(solvers)。
我们在ImageNet[36]上进行了综合实验来说明退化问题并对我们的方法进行评估。结果表明:1)我们的极深残差网络易于优化,但对应的“朴素”网络(即简单的层叠层)随着深度的增加,训练误差较大;2)我们的深层残差网络可以很容易地从深度的大幅度增加中获得精度增益,产生的结果明显优于以前的网络。
CIFAR-10数据集上也出现了类似的现象,这表明了优化难度和我们方法的效果并不仅仅是对于一个特定数据集而言的。我们提出了在这个数据集上经过成功训练的100层以上的模型,并探索了1000层以上的模型。
在ImageNet分类数据集[36]上,我们利用极深的残差网络得到了很好的结果。我们的152层残差网络是迄今为止在ImageNet上出现的最深的网络,但其复杂度仍然低于VGGNet[41]。我们的组合在ImageNet测试集上的top-5错误率为3.57%,并在ILSVRC 2015分类竞赛中获得了第一名,并且在其他识别任务上也有很好的泛化能力,使我们在ILSVRC中的ImageNet检测(detection)、ImageNet定位(localization)、coco(detection)和coco分割(segmentation)等方面都获得了第一名。这一强有力的证据表明,残差学习原理是通用的,我们期望它适用于其他视觉和非视觉问题。
残差表示(Residual Representation)。在图像识别中,VLAD[18]是用残差向量对字典进行编码的表示,Fisher向量[30]可以表示为VLAD的概率版本[18]。两者都是图像检索和图像分类强有力的浅层表示[4,48]。对于矢量量化,对残差向量[17]的编码比对原始矢量的编码更有效。
在低水平视觉和计算机图形学中,对于求解偏微分方程(PDEs),广泛使用的多重网格(Multigrid)方法[3]将系统重新定义为多个尺度上的子问题,其中每个子问题负责较粗和较细尺度之间的残差解( residual solution )。多重网格的另一种选择是分层基预处理( hierarchical basis preconditioning)[45,46],它依赖于在两个尺度之间表示残差向量的变量。[3,45,46]已证明这些求解器收敛速度比不知道解的残差性质的标准求解器收敛得快得多。这些方法表明,一个好的重新配方或预处理可以简化优化。
快捷连接(Shortcut Connections)。快捷连接[2, 34, 49] 已经经过了很长的一段实践和理论研究过程。训练多层感知器(MLPs)的早期做法是添加一个线性层,从网络输入连接到输出[34,49]。在[44,24]中,一些中间层直接连接到辅助分类器,用于解决消失/爆炸梯度(的问题)。[39,38,31,47]的论文提出了用快捷连接实现集中层响应、梯度和传播误差的方法。在[44]中,“Inception”层是由一个快捷分支和几个更深的分支组成的。
与此同时,“ 高速公路网络“(”highway networks)[42,43]提出了带有门控函数(gating function)[15]的快捷连接。这些门依赖于数据,并且有参数,而我们的恒等快捷连接( identity shortcuts )是无参数的。当门控快捷连接“关闭”(接近于零)时,高速公路网络中的层表示非残差函数。相反,我们的公式总是学习残差函数;我们的恒等快捷连接永远不会关闭,所有信息都会被传递出去,而附加的残差函数将被学习。此外,高速公路网络在深度极深(例如,超过100层)的情况下,没有表现出精度的提高。
让我们把H(x)看作是一些堆叠层(不一定是整个网络)组成的底层映射,用x表示这些层中的第一个层的输入。如果假设多个非线性层可以近似于复杂函数【2–This hypothesis, however, is still an open question. See [28].】,那么它等价于假设他们可以近似于残差函数,即H(X)−x(假设输入和输出具有相同的维度)。因此,与其期望叠加层近似H(X),我们不如显式地让这些层近似一个残差函数F(x):=H(x)−x。原来的函数因此变成F(x)+x。虽然这两种形式都应该能够近似于所期望的函数(如假设),但学习的容易程度可能是不同的。
这种重新表述( reformulation)是由有关退化问题的反直觉现象所驱动的(图1,左)。正如我们在引言中所讨论的,如果可以将添加的层构造为恒等映射,则更深层次的模型应该具有不大于其浅层结构的训练误差。退化问题表明,求解者很难用多个非线性层逼近恒等映射。通过残差学习重构,如果恒等映射是最优的,则求解者可以简单地将多个非线性层的权值推向零,以逼近恒等映射。
在实际情况下,恒等映射不太可能是最优的,但是我们的重新定义对于这个问题的预处理是有帮助的。如果最优函数更接近于恒等映射而不是零映射,则求解者应该更容易找到与恒等映射有关的扰动(perturbations),而不是把它当做一个新的函数来学习。我们通过实验(图7)证明了学习到的残差函数一般都有较小的响应,说明恒等映射提供了合理的预条件。
我们对每几个堆叠层采用残差学习。图2中展示出了一个构造块(building block )。形式上,在本文中,我们将一个构造块定义为:
这里x和y是所考虑的层的输入和输出向量。函数F(x,{Wi})表示要学习的残差映射,图2的例子中包含两层,F = W2σ(W1x),其中σ代表ReLU[29],为了简化省略了偏置项(bias)。F+x操作由一个快捷连接和元素级(element-wise)的加法来表示。在加法之后我们再执行第二个非线性操作(例如, σ(y),如图2)。
Eqn.(1)中的快捷连接没有增加额外的参数和计算复杂度。这不仅在实践中很有吸引力,而且在我们比较普通网络和残差网络时也很重要。 我们可以在参数、深度、宽度以及计算成本都相同的基础上对两个网络进行公平的比较(除了可以忽略不计的元素级的加法)。
在Eqn.(1)中,x和F的维数必须相等。如果情况并非如此(例如,在改变输入/输出通道时),我们可以通过快捷连接执行线性投影W_s ,以匹配维度:
我们还可以在eqn(1)中使用矩阵Ws。但是,我们将通过实验证明,恒等映射对于解决退化问题是足够的,而且是经济的,因此只有在匹配维数时才使用Ws。
残差函数F的形式是灵活的。本文的实验涉及一个函数F,它有两个或三个层(图5),然而它可能有更多的层。但如果F只有一个单层,则Eqn.(1)类似于线性层:y=W1x+x,对此我们没有发现任何优势。
我们还注意到,尽管为了简单起见,上述表示是关于全连接层的,但它们适用于卷积层。函数F(x,{Wi})可以表示多个卷积层,元素级加法是在两个特征映射上相应通道上执行的。
我们测试了各种普通网络/残差网络,并观察到一致的现象。为了提供可供讨论的实例,我们对ImageNet的两个模型进行了如下描述。
简单网络(Plain Network)。我们的简单网络结构(图3,中)主要受VGGNet(图.3,左)的启发。卷积层主要为3*3的卷积核(filter),并遵循以下两点要求:(i) 输出特征映射尺寸相同的层含有相同数量的卷积核;(ii) 如果特征图尺寸减半,则卷积核的数量增加一倍来保证每层的时间复杂度相同。我们直接用步长为2的卷积层进行下采样(downsampling)。网络以一个全局平均池化(global average pooling)层和一个带有Softmax的1000路全连接层结束。在图3(中),有权重值的层的总数为34。
值得注意的是,与VGGNet[41](图3,左)相比,我们的模型具有更少的卷积核和更低的复杂度。我们的34层基线(baseline)有36亿次FLOPs(乘加),仅为VGG-19(196亿次FLOPs)的18%。
图3. 对应于ImageNet的网络框架举例。 左:VGG-19模型 (196亿FLOPs)作为参考。中:简单网络,含有34个参数层(36 亿个FLOPs)。右:残差网络,含有34个参数层(36亿FLOPs)。虚线表示的shortcuts增加了维度。Table 1展示了更多细节和其它变体。
残差网络(Residual Network)。基于上述简单网络,我们插入快捷连接(图3,右),将网络转换为对应的残差版本。当输入和输出尺寸相同时(图3中的实线shortcut),可以直接使用恒等shortcut(Eqn.(1))。 当维度增加时(Fig.3中的虚线shortcut),我们考虑两个选项: (A) shortcut仍然使用恒等映射,在增加的维度上使用0来填充,这样做不会增加额外的参数; (B) 使用Eqn.(2)的映射shortcut来使维度保持一致(通过1*1的卷积)。 对于这两个选项,当shortcut跨越两种尺寸的特征图时,均使用stride为2的卷积。
我们对ImageNet的实现遵循了[21,41]中的做法。 调整图像的大小使它的短边长度随机的从[256,480] 中采样来进行尺寸扩展( scale augmentation)[41]。 从图像或其水平翻转中随机抽取224×224进行裁剪,并减去每个像素平均(the per-pixel mean)[21]。使用了[21]中的标准颜色增强。我们遵循[16],在每次卷积之后,在激活之前采用批归一化(Batch Normalization,BN)[16]。我们像[13]一样初始化权重,从零开始训练所有简单网络/残差网络。我们使用mini-batch size为256的SGD。学习率从0.1开始,当误差稳定时除以10,并且 整个模型进行60∗10^4次迭代训练。我们使用的权重衰减(weight decay)为0.0001,动量(momentum)为0.9。我们不使用dropout[14],遵循[16]的做法。
在测试时,为了进行比较研究,我们采取标准的10-crop测试[21]。 为了得到最好的效果,我们采用了[41,13]中的全卷积形式,并且在多尺度上对分数进行平均(图像被调整大小,使较短的边为{224,256,386,480,640})。
我们在ImageNet 2012分类数据集[36]上评估了我们的方法,该数据集包含1000个类。在128万张训练图像上训练模型,并在50k张验证图像上进行了评估。我们还获得了测试服务器报告的100 k张测试图像的最终结果。我们评估了前1位和前5位的错误率(top-1 and top-5 error rates)。
简单网络(Plain Networks)。我们首先评估18层和34层简单网络。34层简单网络如图3(中)所示。18层简单网络具有类似的形式.详细的体系结构见表1。
表1. 对应于ImageNet的结构框架。括号中为构建块(building block)的参数(同样见Fig.5),数个构建块进行堆叠。下采样由步长(stride)为2的conv3_1、conv4_1和conv5_1 来实现。
表2的结果表明,较深的34层简单网络比较浅的18层简单网具有更高的验证误差。为了揭示原因,在图4(左)中,我们比较了他们在训练过程中训练/验证错误。我们在整个训练过程中观察到了34层简单网络的退化问题—它在整个训练过程中训练误差较大,尽管18层简单网络的解空间( solution space)是34层简单网络的子空间。
图4、在ImageNet上训练。细曲线表示训练误差,粗体曲线表示中心裁剪的验证误差。左:18层和34层的简单网络。右:18层和34层残差网络。在此图中,与简单网络相比,残差网络没有(增加)额外的参数。
表2. ImageNet验证集上的Top-1错误率(%,10-crop 测试)。在这里,与普通的与之对等的普通网络相比,残差网络没有额外的参数。图4展示了训练过程。
我们认为这种优化困难不太可能是由梯度消失引起的。这些简单网络使用BN[16]进行训练,从而确保前向传播的信号具有非零方差。我们还验证了使用BN的反向传播(backward propagation)梯度具有BN的健康范数(healthy norms)。所以无论向前还是向后信号都不会消失。事实上,34层普通网络仍然能够达到具有竞争力的精度(表3),这表明求解器在一定程度上是有效的。我们推测深度普通网络可能具有指数级别的低收敛速度,从而影响训练误差的减小【3–我们已经试验了更多的训练迭代(3×),并仍然观察到退化问题,这表明这个问题不可能通过简单地使用更多的迭代来解决】。这种优化困难的原因将在今后进行研究。
残差网络(Residual Networks)。接下来,我们评估18层和34层残差网络(ResNet)。基础结构与上述普通网络相同,只是要求为每一对3×3卷积核添加一个快捷连接,如图3(右)所示。在第一个比较中(表2和图4右),我们使用所有快捷方式为恒等映射,以及使用零填充增加维度(选项A)。因此,与普通的对应网络相比,它们没有额外的参数。
我们从表2和图4中有三个主要的观察结果。首先,使用残差学习的情况与之前(普通网)相反----34层ResNet优于18层 ResNet(2.8%).更重要的是,34层ResNet的训练误差要小得多,并且可以推广到验证数据.这表明,在这种情况下,退化问题得到了很好的解决,并且我们设法从增加的深度中获得了精度增益。