ResNet论文阅读---《Deep Residual Learning for Image Recognition》

ResNet论文阅读—《Deep Residual Learning for Image Recognition》

作者

这里写图片描述

摘要

越深的神经网络训练越困难。我们提出了一个残差学习框架,减轻网络训练的负担,这个网络比目前的大多数网络深得多。我们明确地将每一层重新定义为参照层的输入学习残差函数,而不是学习一个未知的函数。我们提供了全方面的实验数据表明残差网络更加容易优化,并且通过增加深度能够获得更高的准确率。在ImageNet数据集上,我们对一个深达152层(是VGG网络的8被深)的残差网络进行评估,其拥有更低的复杂度。残差神经网络在ImageNet数据集上整体错误率降低到3.57%。这个结果在ILSVRC2015分类任务上赢得了第一名。我们同样在CIFAR-10和CIFAR-100进行了分析。
深度表示对许多视觉识别任务至关重要。归功于我们极深表示,我们将COCO目标检测数据集的结果提升了28%。深度残差网络是我们提交到ILSVRC和COCO2015比赛的网络的基础,我们同样在ImageNet目标检测,ImageNet目标定位,COCO目标检测和COCO图像分割中赢得了第一名。

1.绪论

深度卷积神经网络已经在图像分类领域取得了一系列突破。深度网络自然地组合了低/中/高层次的特征,并采用端到端的多层次分类,特征的“层次”能够通过堆叠多层(深度)得到丰富。最近的研究揭示网络的深度至关重要,在ImageNet数据集竞赛上几个有代表性的结果都采用了“非常深”的模型——从16层到30层。其他一些视觉识别任务同样从深度模型中获益。
随着网络深度增加,出现了这样一个问题:是不是堆叠更多的层就一定能学习一个更好的网络呢?梯度消失/爆炸是一个臭名昭著的问题阻碍了这个问题的回答,它从一开始就阻碍了网络的收敛。但是梯度消失/爆炸问题很大程度上可以通过标准的初始化和中间正则化层基本解决,保证了数十层的网络能够收敛,利用随机梯度下降(SGD)和反向传播。
当深度网络开始收敛,性能退化问题又出现了:随着网络深度的增加,准确率达到饱和(这或许不足为奇),接着急剧退化。出人意料地,这种退化问题不是过拟合导致的,而且增加更多的层到一个合适的深度模型中会导致更高的训练误差,就像[11,42]中所说,并且得到了我们实验的验证。图1是一个典型的例子。

这里写图片描述

性能退化(训练精度)暗示并不是所有的系统都同样易于优化。让我们考虑一个浅层架构和它加入了更多层后的深层对应架构。构建这个更深的架构存在这么一种情况:附加的层是恒等映射,其他层是从学习到的浅层模型中复制过来。这种构建方式的存在暗示更深的模型不应该产生更高的训练误差相较于对应的浅层架构。但是实验显示我们目前的解决方案都不能找到比这种构建方式更好或者同样好的结果(或者不能在可接受的时间内完成)。(关于这个这里有一个更好更形象的解释)
在这篇论文中,我们引入深度残差学习架构来解决性能退化问题。我们不再期望每几层能够直接拟合一个期望的最优映射,而是明确的让这些层去拟合一个残差映射。形式上,我们用 H ( x ) 表示期望的最优映射,现在我们让堆叠的非线性层拟合另一个映射 F ( x ) := H ( x ) x 我们假设最优化残差映射要比最优化原始映射更加简单。极端情况,当一个恒等映射已经是最优时,将残差调节到0要比用一个堆叠的非线性层拟合一个恒等映射简单的多。
公式 F ( x ) + x 能够用一个前向传播神经网络和“快捷连接(shortcut connections)”实现,如图2所示。

这里写图片描述

快捷链接跳过了一层或多层。在我们的例子中,快捷连接简单地执行恒等映射,它们的输出被附加到堆叠层的输出中。恒等快捷连接既没有增加额外的参数也没有增加计算复杂度。整个网络仍然能够采用SGD和反向传播端到端的训练,也能够使用通常的框架(比如caffe)轻松实现而不用修改solvers配置。
我们在ImageNet上进行了全方位的实验展示性能退化问题和评估我们的方法。我们发现:1)我们的深度残差网络很容易优化,但是当层数增加时对应的普通网络(简单地堆叠层)有更高的训练误差;2)我们的深度残差网络可以轻松享受层数增加带来的准确率提高,产生的结果也远远优于先前的网络。
在CIFAR-10上同样得到了相似的现象,这表明优化是困难的,我们方法的影响不仅仅体现在特定的数据集上。在这个数据集上,我们成功地训练了超过100层的模型,甚至突破1000层。
在ImageNet分类数据集上,我们的深度残差网络获得了极佳的结果。我们152层的残差网络是目前应用在ImageNet数据集上最深的网络,但是比VGG有更低的复杂度。整体上,我们的模型在ImageNet测试数据集上的top-5错误率为3.57%,并且赢得了ILSVRC2015分类比赛的第一名。深度残差网络在其他目标识别任务上有着极佳的泛化性能,让我们同样获得了ImageNet目标检测,ImageNet目标定位,COCO目标检测和COCO图像分割的第一名。这充分证明了残差学习理论是通用的,我们期望它能够应用到其他视觉和非视觉问题中。

2. 相关工作

残差表示在图像识别中,VLAD是利用基于字典的残差向量对特征进行编码的,Fisher向量可以看作是VLAD的一个概率版本。在图像检索和分类中两者都是强大的浅层表示方法。对于矢量量化,编码残差向量比原始向量高效得多。
在低层次视觉和计算机图形学中,求解偏微分方程(PDEs)通常采用多尺度网格法,其将整个系统转为为不同尺度上的子问题,每一个子问题负责求出粗粒度和细粒度之间的残差解。除此之外,基于预处理是另外一种方法,依赖于表示两个尺度之间的残差向量。在[3,45,46]中证明了这些使用残差的解法要比标准解法收敛得更快。这些方法表明一个好的模型重构或预处理能够简化优化过程。
快捷连接快捷连接的实践和理论已经研究很长一段时间。在训练多层感知机的一个实践中,在输入层和输出层之间直接连接了一个线性层。在[44,24]中,一些中间层之间连接到辅助分类器上以解决梯度消失/爆炸。论文[39,38,31,47]提出了通过快捷连接实现层中响应,梯度和误差反向传播的方法。在论文[44]中,“Inception”层由一个快捷分支和几个更深的分支构成。
和我们同期的工作中,“highway networks”利用门函数实现了快捷连接。这些门依赖于数据和自身参数,相反我们的恒等映射没有参数。当门捷径处于“关闭”(接近0)时,highway networks不再包含残差函数。相反地,我们的方法总是学习参残差函数;我们的恒等快捷连接永远不会关闭,所有的信息都会一直传递下去,还有额外的残差函数被学习。除此之外,highway networks没有展现出当层数极深(比如超过100层)时性能的提升。

3.深度残差学习

3.1残差学习

让我们考虑 H ( x ) 是一个通过多个堆叠层(不需要整个网络)拟合的期望映射,其中 x 表示连接到这些层中第一层的输入。如果假设多个非线性层可以逐渐逼近复杂函数,那么同样可以假设它们能够逐渐逼近残差函数,比如 H ( x ) x (假设输入和输出的维数相同)。因此预期堆叠层去逼近 H ( x ) ,我们直接让这些层逼近一个残差函数 F ( x ) := H ( x ) x 。原始函数因此变成 F ( x ) + x 。虽然两种形式都能渐进逼近期望函数,但是学习的难度是不一样的。
这种对网络结构的改进的冬季来源于性能退化这个反直觉现象。就像我们在绪论中讨论的,如果附加的层能够构建成一个恒等映射,那么更深的模型应该不会比它对应的浅层网络有大的训练误差。性能退化问题表明求解器在通过多个非线性层逼近恒等映射时存在困难。通过残差学习的改造,如果恒等映射已经是最优的,求解器可以很简单的调整多个非线性层的权重为0实现恒等映射。
在实际情况中,恒等映射已经是最优的通常不太可能,但是我们的改造可能有助于预处理这个问题,如果优化函数更加接近恒等映射而不是零映射,参考恒等映射网络应该更加容易发现扰动,而不是将其作为一个全新的函数去学习。我们通过实验(图7)证明,学习到的残差函数通常都响应较小,这表明恒等映射提供了合理的预处理。

3.2通过快捷连接实现恒等映射

我们在几个堆叠层中加入残差学习。图2展示了一个构造块(building block),在本论文中,我们将一个构造块定义为:

扫描二维码关注公众号,回复: 2721287 查看本文章
(1) Y = F ( X , W i ) + X

其中 X Y 分别是输入、输出向量。函数 F ( X , W i ) 代表需要学习的残差映射。以图2中的两层网络为例, F = W 2 σ ( W 1 X ) σ 表示ReLU,出于简化考虑,省略了偏置项。操作 F + x 通过快捷连接和元素相加实现。在加法之后,我们采取第二次非线性映射。(比如 σ ( y ) ,见图2).
公式(1)中的快捷连接既没有额外的参数也没有增加计算复杂度。这不仅在应用中很有吸引力,在我们普通网络与残差网络的比较中也尤为重要。我们能够公平的对比普通/残差网络因为两者拥有相同数目的参数,相同的深度,宽度和计算代价(不考虑可以忽略不计的逐元素相加运算)。
在公式(1)中, x F 的维度必须相同。如果不一致(比如改变输入/输出的通道),我们可以在快捷连接上执行一个线性投影 W s 来匹配维度:

(2) Y = F ( X , W i ) + W s X

我们同样可以在公式(1)中引入一个方阵 W s 。但是我们通过实验证明对于解决性能退化问题恒等映射已经足够并且更加的经济,因此 W s 仅仅在需要匹配维度时才使用。
残差函数F的形式是灵活的。这篇论文实验中设计的函数F有两层或者三层(图5),并且更多的层也是可以的。但是如果F只有一层,公式(1)将等价于一个线性映射: y = W 1 x + x ,这样一来就没有可见的优势了。
我们同样注意到虽然上面的公式为了简化起见都是关于全连接层的,但是它们同样适用于卷积层。函数 F = ( x , W i ) 可以代表多个卷积层。按照对应通道,在两个特征图上进行逐元素相加运算。

3.3网络结构

我们在多种普通/残差网络上进行了测试,并观察到一致的现象。为了提供讨论的实例,我们将在下文中描述用于ImageNet的两个模型。
普通网络.我们普通的基准网络主要受到VGG网络的启发(图3左)。卷积层基本都是3×3的过滤器并遵循了两个设计原则:(1)如果输出的特征图大小相同,那么每层的过滤器数目也相同。(2)如果特征图的大小减半,那么过滤器的数量翻倍,保持每层的时间复杂度不变。我们直接通过步长为2的卷积层进行下采样。在网络的最后经过一个全局池化层和一个1000个全连接的softmax层。网络中含有权重的层一共有34层(图3中)。
值得注意的是,我们的模型包含更少的过滤器,因此相较VGG有更低的复杂度。我们34层的普通基准网络的浮点计算次数是3.6亿次,这仅仅是VGG-19的18%。
残差网络.在上面普通网络的基础上,我们加入快捷连接(图3右)就得到了对应的残差版本。当输入和输出的维度相同时,恒等快捷连接(公式(1))可以直接使用(图3中的实现),当维度增加时(图3中的虚线),我们采用了两种策略:(A)快捷连接仍然采用恒等映射,对于维度增加的用零边框补齐。这种方法不会增加额外的参数。(B)采用公式(2)中的投影捷径来匹配尺寸(采用1×1的卷积完成)。对于以上两种策略,当快捷连接连接两个不同大小的特征图时,步长将被设置为2。

3.4实现

我们用于ImageNet的网络是依据[21,41]实现的。调整图像大小,其较短的边在[256,480]之间进行随机采样,用于尺度增强。一个224×224的裁切是图像的随机抽样或者水平翻转,并将裁切的结果减去它的平均像素值。同时也进行了标准颜色增强。在每个卷积层和激活层之间我们采用了批量正则化(BN)。我们按照[13]中的方法初始化权值,分别从零开始训练所有的普通/残差网络。我们使用SGD算法,将mini-batch的大小设置为256。学习速率初始化为0.1,当错位率趋于稳定时将学习速率除以10,各模型迭代训练60万次,我们采用了权重衰减,设置为0.0001,和附加动量设置为0.9。按照[16]的实践,我们没有采用dropout。

这里写图片描述

4实验

4.1ImageNet分类任务

普通网络.我们首先构建了深度为18层和34层的两个普通网络,两个网络结构相似,表1展示了具体的网络配置。表2中的结果证明更深的34层的不同网络比18层的较浅的网络在验证集上有更高的错误率。为了揭露其中的原因,在图4左边,我们比较了它们训练过程中在训练集/验证集上的错误率。我们观察到了性能退化问题——34层的普通网络在整个训练过程中都有更高的训练误差,即使18层的普通网络只是34层的一个子集。

这里写图片描述
这里写图片描述
这里写图片描述

我们认为,这种优化困难不太可能是梯度消失造成的。这些普通网络在训练中采用了BN,这确保了前向传播时有非零的方差。我们也确认了反向传播时的梯度表现很健康因为有BN。因此,既不是向前也不是向后的信号消失。事实上,34层的普通网络仍然能够达到有竞争力的精度(表3),这表明该网络在一定程度上是能工作的。我们推测,深的普通网络可能有指数级的较低的收敛速度,这会对训练误差的降低产生影响。这样的优化困难的原因我们还将在未来进一步探究。
残差网络. 接下来我们验证18层和34层的残差网络(ResNets)。残差网络的基本架构和上述普通网络相同。不同的是一些快捷连接被添加到每对3×3的过滤器之间。图3(右),在第一个对比中(表2和图4右),我们对所有快捷连接使用恒等映射和零边框填充增加维度(optionA)。因此和普通网络相比没有任何额外的参数。
从表2和图4中我们有三个主要的观察。第一, 残差学习带来的情况逆转——在34层上表现比18层好(2.8%)。更重要的,34层的残差网络表现出了相当低的训练误差,并且同样适用于验证集。这表明在这种情况下,性能退化问题得到了很好的控制,我们能在增加深度时获取更高的精度。 第二,相比于其对应的普通网络,34层的残差网络将top-1错误率降低了3.5%(表2),得益于成功的降低了训练误差(图4右vs.左)。这个对比验证了残差网络在深度学习系统中的有效性。
最后,我们也注意到,18层的普通/残差网络准确率相对接近(表2),但18层的残差网络的收敛速度更快(图4右与左)。当网络”不深”(18层以下)的时候,目前的SGD算法仍然能在普通网络上找到较好的解决方案。在这种情况下,残差网络能加速优化,在训练初期提供更快的收敛速度。

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

以上是对论文原文的翻译,如有不妥当和错误之处,尽情指出。

5个人见解

ResNet是近年来卷积神经网络发展中最为关键的一个结构,其真正使得卷积神经网络深度可以突破百层甚至是1000层而不降低网络精度。利用ResNet强大的表征能力,不仅在图像分类领域,许多其他计算机视觉领域(比如物体检测和面部识别)的性能都有大幅提升。
ResNet的启发思想来源于:假设目前有一个可以很好工作的网络A,这时我们构建了一个比它更深的网络B,只需要让B的前一部分与A完全相同,,后一部分只实现一个恒等映射,这样的网络B最低也能获得与A相同的性能,而不至于更差。深度残差学习的思想由此而产生,既然B后面的部分完成的是恒等映射,那为何不在网络训练时加上这一先验,因此在构架网络时,加入了shortcut连接。
对应于实际网络训练中,加入恒等映射一方面保证了在进行反向传播时不会出现梯度消失的问题,因为在进行求导时,恒等映射x保证了梯度不会过小;另一方面,加入恒等映射后,网络转而学习残差函数F(x),相较于直接学习完整的底层映射更加简单,保证了整个网络的决策函数更加平滑,泛化性能因此提高。

6ResNet的主要变种

ResNet的成功,激发了研究人员对其结构的深入研究,非常多的insight都是在ResNet的基础上进行改进。目前ResNet的主要变种包括以下一些网络:
1)ResNeXt

这里写图片描述

该网络与GoogLeNet的Inception模块非常相似,在这个变体中,不同路径输出的合并是通过相加来实现,作者在文中引入了一个叫作“基数(cardinality)”(独立路径的数量)的超参数,提供了一种调整模型能力的新思路,实验表明,通过扩大基数值,我们能够更加高效地提升模型的表现,作者表示,与Inception相比,这个全新的架构更容易适应新的数据集或任务,因为它只有一个简单的范例和一个超参数需要调整,而Inception需要调整很多超参数(比如每个路径卷积核的大小)。
2)Wide ResNet

这里写图片描述

该网络主要探究宽度对网络性能的影响,其实验结果表明,增加网络的宽度,网络性能也能得到提升。 甚至一个14层深的宽残差网络可以达到比1001层深的残差网络具有更佳的性能。同时,由于GPU的并行运算特性,在参数数量级一致的情况下,WRN(Wide ResNet的缩写)的训练效率要远远高于ResNet。
3)DenseNet

这里写图片描述

这个结构进一步使用了shortcut 连接,DenseNet的核心思想是:对于之前每一层都加一个单独的shortcut,使得任意两层之间都可以直接联通,也就是如上图所示的结构。除了解决梯度消失问题, DenseNet这个架构还支持“特征重用”,这就使得网络更加“参数高效”。

7总结

从ResNet到WRN再到ResNeXt,分别验证了深度,宽度,基数对于CNN模型的重要影响。从ResNet到PreActResNet再到DenseNet,通过对梯度流的不断优化,得到了越来越好的效果。

参考文献

[1] K.He, X.Zhang, S.Ren, and J.Sun. Deep residual learning for image recognition. In CVPR, 2016.
[2] K.He, X.Zhang, S.Ren, and J.Sun. Identity mappings in deep residual networks. In ECCV, 2016.
[3] S. Zagoruyko and N. Komodakis. Wide residual networks. In BMVC, 2016.
[4] S. Xie, G. Ross, P. Dollar, Z. Tu and K. He Aggregated residual transformations for deep neural networks. In CVPR, 2017.
[5] H. Gao, Z. Liu, L. Maaten and K. Weinberger. Densely connected convolutional networks. In CVPR, 2017.

猜你喜欢

转载自blog.csdn.net/hohaizx/article/details/79090884