作为一个刚刚接触深度学习的新人,残差网络给我留下了非常深的印象。
适逢学校对于毕业设计要求翻译一篇外文文献,抱着致敬经典的心情,特此翻译该文章。
网上所能找到的两篇译文中,有一篇翻译得还不错,不过中间有不少地方进行了意译;另一篇就比较糟糕了,像是机器翻译的结果。
本文在这两篇翻译的基础上,对全文进行了翻译。
越深层的神经网络往往越难训练。我们在此提出一个残差学习框架以减轻网络的训练负担,这些网络比以往使用的网络要深得多。我们明确地将层改为学习关于输入的残差函数,而不是学习未知的函数。我们提供了全面的实验数据来证明,残差网络更容易被优化,并且在深度加深时获得更高的精度。在ImageNet数据集上,我们评测了一个深达152层的残差网络——层数是VGG的8倍,却依旧拥有比VGG更低的复杂度。残差网络在ImageNet测试集上总体实现了3.57%的错误率,这一结果获得了ILSVRC2015分类任务的第一名。我们在CIFAR-10数据集上分析了100层和1000层的网络。
对许多视觉识别任务来说,表征深度表示往往是最重要的。得益于这种极深的表征,我们在COCO物体检测数据集获得了28%的相对提升。深度残差网络是我们在ILSVRC和COCO 2015竞赛上提交模型的基础,我们还获得了ImageNet物体检测,ImageNet定位,COCO检测和COCO图像分割的第一名。
深度卷积神经网络在图像分类问题上取得了一系列突破。深度网络轻而易举地在一个端到端多层结构中整合了低、中、高三种不同级别的特征和分类器,并且特征的“级别”可以靠堆叠层数来扩充。最近的研究表明,网络深度至关重要。在ImageNet竞赛中取得领先地位一些成果都不约而同地使用了“非常深”的网络模型,从16层到30层不等。其他一些重要的视觉识别问题也同样得益于非常深的网络模型。
在深度重要性的驱使下,一个问题浮出水面:堆叠更多的层是否一定能学得更好的网络?解答这一问题的一个障碍就是臭名昭著的梯度消失/爆炸问题。它从一开始就阻碍着收敛。然而这一障碍,在很大程度上已经可以通过标准初始化和正则化层得到解决,从而确保几十层的网络利用SGD和反向传播能够收敛。
但当更深层的网络开始收敛时,退化问题又暴露了出来:随着神经网络深度的增加,精确度开始饱和(这本不足为奇),然后会迅速的降低。出人意料的是,这种退化并不是由过拟合导致的,并且在深度模型上增加更多的层反而会导致更大的训练误差,正如文章[11,42]所述,并通过我们的实验将得以充分证实。图1展示了一个典型的例子。
退化(训练精度)现象表明,不是所有的系统都同样易于优化。让我们考虑一个浅层架构和一个与之对应的增加了更多层的深层架构。有一个解决方案可以用来构建深层模型:添加的层是恒等映射,其他层从训练好的浅模型中复制而来。我们推测,通过这种构建方式得到的深层模型应该不会比浅层模型产生更高的训练误差。但实验结果表明,我们手头上的方案都找不到同样好或是更好的解(或者是无法在合理的时间里做到)。
在本文中,我们通过引入一个深度残差学习框架解决了退化问题。我们不再期望每一层层能够直接拟合一个潜在的映射,而是明确的让这些层去拟合残差映射。从形式上看,令H(x)来表示期望的潜在映射,我们让堆叠的非线性层去拟合另一个映射F(x)≔H(x)-x。此时原映射H(x)就可以改写成F(x)+x。我们假设残差映射比原映射更容易被优化。极端情况下,如果一个恒等映射是可优化的,那么将残差减小到0要比用堆叠非线性层来拟合恒等映射容易的多。
F(x)+x可以通过带有“快捷连接”的前馈网络来实现(如图2)。快捷连接是指那些跳过一个或多个层的通路。在我们的模型中,快捷连接仅仅简单执行恒等映射,它们的输出被累加到叠加层的输出中。恒等快捷连接既没有增加额外的参数也没有增加计算复杂度。整个网络依然可以用SGD+反向传播来做端到端的训练,并且可以很容易地用常见的库来实现(比如Caffe)而不用修改slover配置(slover是caffe中的核心slover.prototxt)
我们在ImageNet数据集上做了全面的实验,来证实退化问题以及评估我们的方法。我们证明了:1.我们的超深残差网络易于优化,不过相应的普通网络(简单的堆叠层)当在深度增加时,表现出更高的训练误差;2.我们的深度残差网络可以轻松的享受深度增加所带来的精度增加,其效果要远远优于以前的那些网络。
类似的现象也同样出现在CIFAR-10数据集上,这表明我们提出的训练方法的优化难度和效果并不仅仅适合于某一类特定的数据集。我们在这个数据集上成功训练出超过100层的模型,并且还探索了超过1000层的模型。
在ImageNet分类数据集上,我们用超深残差网络获得了出色的结果。我们152层的残差网络是ImageNet的参赛网络中最深的,然而却拥有比VGG网络更低的复杂度。我们最终的效果是测试集上3.57%的错误率,以此摘取了ILSVRC2015物体分类的第一名。这种超级深的表示方法在其他识别任务中也有良好的泛化能力,使我们进一步赢得了ImageNet检测, Imagenet定位,COCO检测 COCO分割多个比赛的第一名。这充分证明了残差学习的原则是可泛化的,我们同样期望残差学习的方法能用在其他的视觉和非视觉问题上。
残差表示:
在图像识别任务中,VLAD[18]是用基于词典的残差向量来进行特征编码的一种表达形式,fisher向量可以看作是VLAD的一个概率版本,在图像检索和分类中它们都是强有力的浅层表达。对于向量量化,残差向量编码要比原始向量编码更有效。
在低级视觉和计算机图形学中,为了求解偏微分方程(PDE),通常是使用多重网格(Multigrid)法,把系统重新表达成不同尺度的子问题,每个子问题负责求解粗细尺度之间的残差解。除此之外,另一种求解PDE的方法是分层基预处理[45,46],是基于表达两个尺度之间残差向量的变量。在[3,45,46]中证明了这些求解器要比那些没有利用残差性质的普通求解器收敛地快得多。这些研究表明,一个好的重新表达或者预处理能够简化优化问题。
快捷连接:
实践和理论都对 “快捷连接”做了长期的研究。在训练多层感知器网络(MLP)的早期实践中,就是添加一个从网络输入直连到输出的线性层[34,49]。在[44,24]中,少量的中间层直接与辅助分类器相连以解决梯度消失/爆炸问题,论文[39,38,31,47]中提出一系列方法,利用快捷连接将层的响应、梯度、传递误差集中起来。在论文[44]中,一个“incepion” 层是由一个快捷分支和少量较深的分支组成。
与我们同期的工作,如“Highway network”[43,42],展示了带有门限函数的快捷连接。这些门函数是数据相关的并且带有参数。相反,我们的恒等快捷连接没有参数。当一个门限快捷连接呈关闭状态时(接近0),highway network中的层就表现为非残差函数。相反的,我们的方法总是学习残差函数;在学习残差函数时,我们的自身快捷连接是永不关闭的,因此所有的信息总能通过。与借此学习残差函数。此外highway network并不能实现精度随深度的增加而提高(比如超过100层后)。
3.1 残差学习
我们假设H(x)是若干个堆叠层将要去拟合的潜在映射(不一定要整个网络),其中x表示第一层的输入。假如多个非线性层可以渐进逼近复杂的函数,那么这等价于它们同样能渐进逼近残差函数,例如,H(x)-x(假设输入和输出维度相同)。所以与其期望这些层去逼近H(x),不如让它们去逼近残差函数F(x)≔H(x)-x。原方程则变为F(x)+x,尽管这两种形式都应该能渐进逼近目标函数(根据假设),但是学习的难易程度却不相同。
这种重构的动机是由于退化问题这个反直觉的现象(图1,左)。正如我们在介绍中讨论的,如果添加的层被构造为恒等映射,那么一个更深模型的训练误差不应该大于与之对应的较浅模型。退化问题表明,求解器可能很难使用多个非线性层来逼近恒等映射。如果恒等映射是最优的,那么通过残差学习重构,求解器可以轻松地使多层非线性层的权值趋向零来逼近恒等映射。
虽然在实际情况中恒等映射不可能是最优的,但我们的重构将有助于对问题进行预处理。如果最优函数比起零映射而言更接近恒等映射的话,那么对于求解器来说,寻找关于恒等映射的扰动比学习一个新的函数要容易的多。我们通过实验验证(图7),学习到的残差函数通常只有很小的响应,这表明恒等映射提供了合理的预处理。
3.2 用快捷连接实现恒等映射
我们对每一层堆叠层上采用残差学习。一个构造块在图2所示,在本文中,构造块的定义如下:
y = F(x,{W_i}) +x (1)
其中x和y分别表示构造块的输入和输出向量。函数F(x,{W_i})表示需要学习的残差映射。图2中的示例有两层,F=W_2 σ(W_1 x)中的σ表示RELU,出于简化考虑省略了偏置项。操作F+x是由一个快捷连接和逐元素相加完成。在加法完成后再进行一次非线性操作。
公式1中的快捷连接既没有引入额外的参数,也没有增加计算复杂度。这不仅是在实际应用中具有吸引力,而且在我们对比普通网络和残差网络时也尤为重要。这样我们可以在参数、深度、宽度以及计算成本都相同的基础上对两个网络进行公平的比较(除了可以忽略不计的逐元素加法)
公式1中x和F的维度必须相同,如果不相同的话(比如当改变输入输出的通道数时),我们可以通过快捷连接做一次线性映射W_s来匹配两者的维度:
y = F(x,{W_i})+W_s x (2)
我们同样可以在公式1中使用方阵W_s。但我们的实验表明,恒等映射足以解决退化问题,并且是一种经济的方式。因此W_s仅仅被用来匹配维度。
残差函数F的形式是灵活的,虽然更多层也是可以的,但本文实验中涉及的F为2层或3层的(图5)。但如果F只有一层的话,公式1就会近似于一个线性层:y=W_1 x+x,对于这种情况,我们没看到它有什么优势。
我们还发现,尽管上述的公式为了简便起见,都是关于全连接层的,但是它们同样适用于卷积层。函数F(x,{W_i})可以代表多个卷积层。在两个特征图的按通道顺序执行逐元素相加。
3.3 网络结构
我们测试过多种普通/残差网络,并观察到一致的现象。我们在下文描述(用于ImageNet的)两个模型来进行讨论。
普通网络:
我们的普通网络(图3中)主要受VGG网络(图3左)的启发。卷积层的滤波器大多为3x3,并遵循了两个设计原则:
1输出特征尺寸相同的层,含有相同数量的滤波器;
2如果特征尺寸减半,则滤波器的数量必须翻倍,以保持每层的时间复杂度相同。
我们直接通过步长为2的卷积层进行下采样。网络末端以一个全局的均值池化层和一个1000路的全连接层(Softmax激活)结束,有。加权层的总计34层,如图3所示。值得注意的是,比起VGG网络,我们的模型包含更少的滤波器和更低的复杂度。我们的34层结构含有36亿个FLOPS(乘法-加法),仅仅是VGG-19(196亿FLOPs)的18%。
残差网络:
在普通网络的基础上,我们插入了快捷连接(图3,右),将网络转化为其对应的残差版本。当输入输出维度相同时,快捷连接可直接使用(公式(1))(图3中的实线)。当维度增加时(图3中的虚线所示的快捷连接),我们考虑两种策略:
(a)快捷连接仍然使用恒等映射,增加的维度用零填充处理。此方法不会引入额外的参数;
(b)通过公式2中的投影快捷连接来匹配维度(通过1×1的卷积核完成)。对于这两种选项,当快捷连接跨越两种尺寸的特征图时,均使用步长为2的卷积处理。
3.4 实现
我们用于ImageNet的网络是根据]21,41]来实现的,图片根据短边等比缩放,短边长度在[256,480]区间内随机采样进行尺度增强[40]。从一张图像或者它的水平翻转图像中随机采样一个224x224的裁切,每个像素都要减去均值[21]。图像使用标准的颜色增强。我们在每一层卷积层之后,激活层之前采用了批量归一化(BN)。我们根据[13]中方法来初始化权重并对普通/残差网络从零开始训练。我们使用SGD算法,mini-batch的大小为256。学习速率从0.1开始,当错误率平稳时将学习速率除以10,对各模型进行了多达60万次迭代训练。我们将权值衰减设置为0.0001,动量设置为0.9。我们不用dropout,根据[16]的实验结果,我们没有使用Dropout。
测试时,为了进行比较,我们采用了标准的十折验证。为达到最佳效果,我们采用了[40,13]中的全卷积形式,并在多个尺度的结果上取平均分。的网络就像中说的一样,最终结果为对多个尺寸图像(调整图像大小使得短边分别为{224,256,384,480,640})
4.1 ImageNet分类
我们在ImageNet 2012分类数据集上评估了我们的方案。训练集包含1000中类别。训练集为128万张图片,验证集为5万张图片。并在测试服务器上的10万张图片上得到最终的测试结果。并对前1类和前5类错误率进行评估。
普通网络
我们首先评估了18层和34层普通网络。34层网络如图3(中)所示,18层普通网络结构相似。详细结构参见表1。
表2中的结果表明较深的34层普通网络比较浅的18层普通网络有着更高的验证误差。为了揭示这种现象的原因,在图4中我们比较了它们在训练过程中的训练误差和验证误差。从图中我们观测到了明显的退化问题:34层的普通网络在整个训练过程中有着较高的训练误差,尽管18层普通网络的解空间只是34层普通网络的一个子空间。
我们认为这种优化难题不可能是由梯度消失导致的。因为这些普通网络在训练时使用了批量归一化,这能保证前向传递的信号具有非零方差。我们同样验证了反向传递阶段的梯度由于批量归一化而具有良好的范式。所以前向和反向阶段的信号都不存在消失的问题。事实上34层的普通网络仍然有不错的准确率(表 3),这表明了求解器在某种程度上是有效的。我们推测,深层普通网络的收敛率是呈指数衰减的,这影响了训练误差的降低。这种优化困难的原因我们将在以后的工作中进行研究。
残差网络
接下来我们对18层和34层的残差网络进行评估。残差网络的基本框架和普通网络基本相同,除了在每一对3*3的滤波器间添加了一个快捷连接,如图.3 (右)所示。在表2以及图.4(右)的比较中,所有的快捷连接都是恒等映射,并对维度增加采用零填充(选项A)。因此,比起普通网络,它们并没有增加额外的参数。
我们从表2和图4中得到了三个重要发现。
第一,与普通网络相反,34层的残差网络要优于18层残差网络(提高了2.8%)。更重要的是,34 层的残差网络在训练集和验证集上均表现出相当低的误差。这表明这种设置可以很好地解决退化问题,并且我们可以由增加的深度来提高准确率。
第二,与对应的普通网络相比,34层的残差网络在top-1 误差上降低了3.5% (表2),这得益于训练误差的降低(图.4右vs左)。这也验证了残差学习在极深网络中的有效性。
最后,我们同样注意到,18层的普通网络和残差网络的准确率很接近 (表2),但是18层的残差网络收敛速度更快(图4右vs左)。
如果网络“并不是特别深” (如18层),现有的SGD依然能够对普通网络求的不错的解。在这种情况下,残差网络能够使优化得到更快地收敛。
恒等 vs 映射快捷连接
我们已经验证了无参数的恒等快捷连接是有助于训练的。接下来我们研究了映射快捷连接(公式2)。在表3中,我们比较了三种选项:
(A) 对增加的维度使用零填充,所有的快捷连接都是无参数的(与表2 和 图4 (右)相同);
(B) 对增加的维度使用映射快捷连接,其它使用恒等快捷连接;
(C) 所有的都是映射快捷连接。
表3表明这三种选项都比没有快捷连接要好。B略好于A,我们认为这是因为A中使用零填充的维度并没有进行残差学习。C略好于B,我们把这个归结于多个(13个)映射快捷连接引入了众多的额外参数。不过A、B、C之间细小的差别也表明了映射连接方式对于解决退化问题来说并不是必不可缺的。所以我们在本文接下来的内容中,为了减少空间和时间复杂度以及模型尺寸,并没有使用选项C的模型。恒等映射因其没有引入额外的复杂度而对以下介绍的瓶颈结构尤为重要。
深度瓶颈结构
接下来我们介绍用于ImangeNet的更深的模型。考虑到训练时间的限制,我们将结构快修改成瓶颈结构设计。对于每一个残差函数F,我们使用了三层堆叠层而非两个(图5)。 这三层分别是11、33 和11 的卷积层。11 的层主要负责减少然后增加(恢复)维度,使得3*3的层有更小的输入和输出维度。图5展示了一个例子,这两种设计具有相似的时间复杂度。
无参数的恒等快捷连接对于瓶颈结构尤为重要。如果使用映射快捷连接来替代图5(右)中的恒等快捷连接,将会发现时间复杂度和模型尺寸都会加倍,因为快捷连接连接了两个高维端,所以恒等快捷连接对于瓶颈设计是更加有效的。
50层ResNet
我们将34层网络中2层的结构块替换成3层的瓶颈结构块,得到了50层ResNet (表 1)。使用选项B来处理增加的维度。整个模型含有38亿个FLOPs。
101层和152层 ResNets
我们使用更多的3层模块来构建101层和152层的ResNets (表1)。值得注意的是,虽然层的深度明显增加,但是152层ResNet的复杂度(113亿个FLOPs)仍然比VGG-16(153 亿个FLOPs)和VGG-19(196亿个FLOPs)的小很多。
50/101/152层ResNets比34层ResNet的准确率要高得多(表3和4)。而且我们并没有观察到退化问题,并从增加的深度中得到了显著提高的准确率。所有的指标都证明深度带来了好处。(表3 和4)。
与前沿方法的比较
在表4中我们与目前最好的单模型结果做了比较。我们的34层ResNets取得了非常好的准确率。152层的ResNet的单模型top-5验证误差仅为 4.49%,甚至比先前组合模型的结果还要好 (表5)。我们将6个不同深度的ResNets合成一个组合模型(在提交结果时只用到2个152层的模型)。这在测试集上的top-5误差仅为3.57% (表5),这一项在ILSVRC 2015 上获得了第一名的成绩。
4.2 CIFAR-10 与分析
我们在包含5万张训练图像和1万张测试图像的10类CIFAR-10数据集上进行了更多的研究。我们在训练集上进行训练,在测试集上进行评估。我们关注的是极深模型的效果,而不是追求最好的结果,因此我们特意使用了如下的简单框架。
普通网络和残差网络的框架如图3(中/右)所示。网络的输入是3232的减掉各像素均值的图像。第一层是33的卷积层。然后我们使用6n个3*3的卷积层的堆叠,卷积层对应的特征图尺寸有三种:{32,16,8},每一种卷积层的数量为2n 个。对应的滤波器数量分别为{16,32,64}。使用步长为2的卷积层进行下采样。在网络的最后是一个全局的平均池化层和一个10类的包含softmax的全连接层。一共有6n+2个堆叠的加权层。具体的结构见下表:
使用快捷连接来连接33的卷积层对(共有 3n个快捷连接)。在这个数据集上我们所有的模型都使用恒等快捷连接(选项 A),因此我们的残差模型和对应的普通模型具有相同的深度、宽度和参数量。
我们将权值衰减设置为0.0001,动量设置为0.9,采用[13]中的权值初始化和批量归一化[16],并且没有使用dropout。模型的mini-batch的大小为128,在2块GPU 上进行训练。学习率初始为0.1,在第32000和48000次迭代时将其除以10,总的迭代次数为64000,训练集/验证集划分为45000/5000。我们在训练阶段遵循[24]中的简单数据增强法则:在图像的每条边填充4个像素,然后在填充后的图像或者它的水平翻转图像上随机采样一个3232 的裁剪。在测试阶段,我们只使用原始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层的ResNets收敛得很好 (图6, 中)。它与其它的深层窄模型,如FitNet和 Highway (表6)相比,具有更少的参数,然而却达到了最好的结果 (6.43%, 表6)。
层响应分析。
图7展示了层响应的标准差(std)。响应是每一个3*3卷积层的BN之后、非线性层(ReLU/addition)之前的输出。对于ResNets,这个分析结果揭示了残差函数的响应强度。图7表明了ResNets的响应总体要比它对应的普通网络的响应要小。这些结果也验证了我们的基本动机(章节3.1),即残差函数比非残差函数更接近零。从图7中ResNet-20、56和110的结果,我们也注意到,越深的ResNet的响应幅度越小。当使用更多层是,ResNets中单个层对信号的改变越少。
探究1000 层
我们探索了一个超过1000层的极深模型。我们设置n=200,也就是1202层的网络模型,并按照上述方式进行训练。我们的方法对1000层的模型也并不难优化,并且达到了<0.1%的训练误差(图6,右),它的测试误差也相当低(7.93%, 表 6)。
但是在这样一个极其深的模型上,仍然存在很多问题。1202层模型的测试结果比110层的结果要差,尽管它们的训练误差差不多。我们认为这是由过拟合导致的。这样一个1202层的模型对于小的数据集来说太大了(19.4M)。在这个数据集上强正则化方法,如maxout或者 dropout,才能获得最好的结果。在本文中,我们并没有使用maxout/dropout,只是简单的通过设计深层窄模型来进行正则化,因为我们关心的是优化难题。但是通过强大的正则化或许能够提高实验结果,我们会在以后进行研究。
4.3 PASCAL和MS COCO上的物体检测
我们的方法在其它识别任务上展现出了良好的泛化能力。表7和8展示了在PASCAL VOC 2007 和 2012以及 COCO上的目标检测结果。我们使用快速R-CNN作为检测方法。在这里,我们比较关注由ResNet-101 替换VGG-16所带来的提升。两种模型进行检测时的具体实现是相同的。所以检测结果提升只能来自更好的网络。最值得注意的是,在COCO数据集上,我们在COCO的标准指标(mAP@[.5, .95])上比先前的结果提升了6.0%,这相当于28%的相对提升。而这完全得益于所学到的表达。
基于深度残差网络,我们在ILSVRC & COCO 2015竞赛的ImageNet检测、ImageNet定位、COCO检测以及COCO分割上获得了第一名。