Deep Residual Learning for Image Recognition 论文笔记

0 摘要

训练更深的神经网络是很困难的,本论文提出了一种残差学习的框架,这种网络相比以前的网络更深,而且可以减轻训练的负担。我们明确地将这层作为输入层相关的学习残差函数,而不是学习未知的函数。这种残差网络很容易优化,而且可以显著增加深度来提高准确性。

1 介绍

网络的深度非常重要。通过增加深度,网络可以很自然地整合低/中/高层次的特征,特征也会变得更加丰富。
受到深度意义的驱使,出现了一个问题:学习更好的网络是否和叠加层数一样简单?解决该问题的一大障碍是梯度爆炸与消失问题,它们从一开始就会阻碍网络的收敛。然而,这个问题很大程度上被标准初始化和中间层批标准化解决了,这使得数十层的网络能通过具有反向传播的随机梯度下降开始收敛。
当更深的网络能够开始收敛时,暴露了一个退化问题:随着网络深度的增加,准确率达到饱和,然后迅速下降。意外的是,这种下降不是由过拟合引起的,并且在适当的深度模型上添加更多的层会导致更高的训练误差。精准度的下降表明了,并不是所有的系统都同样容易优化。

下图更深的网络有更高的训练误差和测试误差。
这里写图片描述
本论文介绍一个深层次的残差学习框架来解决精准度下降问题。我们明确地让这些堆叠层拟合残差映射,而不是希望这些堆叠层直接拟合期望的基础映射。我们把期望的基础映射表示成 H ( x ) ,让堆叠的非线性层拟合另一个映射 F ( x ) = H ( x ) x 。那么原映射便转化成 F ( x ) + x 。我们假设残差映射比原始的的映射更容易优化。在极端情况下,如果恒等映射是最优的,那么将残差置为零比通过一堆非线性层来拟合这个恒等映射更容易。在实际中,恒等映射不太可能是最优的,但是上述改写问题的方式能帮助预处理问题。如果最优函数接近恒等映射,那么优化将会变得容易些。
注:学习 H ( x ) x 要比直接学习 H ( x ) 要简单多(这个有点类似于做数据处理,如网络的输入图像要减图像均值一样),所以网络训练也比较简单。

如下图: F ( x ) + x 可以通过带有shortcut connections的前馈神经网络来实现。
这里写图片描述
shortcut connections是那些跳过一层或更多层的连接。在这里,shortcut connections简单地执行恒等映射,并将其输出添加到堆叠层的输出。shortcut connections既不增加额外的参数也不增加计算复杂度。整个网络仍然可以由带有反向传播的SGD进行端到端的训练,并且可以使用Caffe轻松实现,而无需修改求解器。
让神经网络学习残差映射,而不是原始映射。在ImageNet上实验结果表明:
-1、极深的残差网络易于优化,当深度增加时,残差网络对应的“简单”网络(简单堆叠层)却会表现出更高的训练误差
-2、深度残差网络可以从大大增加的深度中轻松获得准确性收益,生成的结果实质上比以前的网络更好。

2 相关工作

Shortcut Connections

本文想法和Highway networks非常相似, 就连要解决的问题(网络加深,准确率却退化)都一样。Highway networks一文借用LSTM中gate的概念,除了正常的非线性映射 H x , W H 外,还设置了一条从 x 直接到 y 的通路,以 T ( x , W T ) 作为gate来把握两者之间的权重,C为保留系数,如下公式所示: y = H ( x , W H ) T ( x , W T ) + x C ( x , W C )
与 highway network区别
1. Deep ResNet 的shortcut一直是x,没有参数,学习比较简单。而且一直传递x,每个模块只学习残差 F ( x ) , 网络稳定而且容易学习。
2. Deep ResNet证明了随着网络深度的增加,性能变好。而Highway Network 并没有证明。

3 深度残差学习

3.1 残差学习

我们令 H ( x ) 作为多层神经网络需要去拟合的目标函数。如果假设多个非线性层可以逐渐近似一个复杂的函数,那么等价于假设他们可以逐渐近似残差函数,即 H ( x ) x 。因此,与其让期望这些层近似 H ( x ) ,我们让这些层直接近似残差函数 F ( x ) = H ( x ) x 。原始的函数则变成了 H ( x ) = F ( x ) + x 。尽管这两种形式都应该能够逐渐地近似期望的函数,但学习的轻松度可能是不同的。

更直白一点,如果能用几层网络去逼近一个复杂的非线性映射 H ( x ) ,那么同样可以用这几层网络去逼近它残差函数,但我们“猜想“优化残差函数要比直接优化 H ( x ) 简单。

3.2 shortcuts的恒等映射

我们采取将每一个堆叠层都进行残差学习。图2展示的building block可以被定义成:
y = F ( x , W i ) + x ——记做等式(1)
其中, x y 分别是层的输入和输出向量。函数 F ( x , W i ) 表示需要学习的残差映射。
图2是一个两层的例子:
F = W 2 σ ( W 1 x )
其中,σ表示ReLU激活函数,偏差b省略。 F + x 的操作是通过一个shortcut connection将对应元素进行相加来执行的。在加法之后,我们采用了第二次非线性映射 σ ( F + x )

shortcut connection既没有引入额外的参数,也没有增加计算复杂度。这不仅在实践中很有吸引力,而且在我们对普通的网络和残差网络的比较中也很重要。我们可以公平地比较同时具有相同数量的参数、深度、宽度和计算成本(除了可以忽略的相对应的元素相加操作之外)的普通网络和残差网络。

x和F的维数在等式(1)中必须相等。如果不是这样的话(例如:当改变输入/输出通道时),我们可以通过shortcut connection来执行一个线性投影 W S ,以匹配维度:
y = F ( x , W i ) + W s x —— 记做等式(2)

残差函数F的形式是灵活的。本文的实验涉及到一个函数F,它有两个或三个层(图5),当然更多的层也是可以的。但是,如果F只有一个层,等式(1)与线性层 y = W 1 x + x 相似,我们没有观察到它的优势。我们还注意到,尽管上面的符号是为了简单起见而使用完全连接的层,但它们适用于卷积层。函数 F ( x ; W i ) 可以代表多个卷积层。元素相加是一个通道接着通道,在两个特征图上执行的。

3.3网络的结构

基准图
这里写图片描述

普通网络

我们的普通网络(图中间)主要受VGG网络的启发。卷积层主要有3×3的过滤器,并遵循两个简单的设计规则:
1)对于相同输出特征图尺寸,卷积层有相同个数的滤波器
2)如果特征图尺寸缩小一半,滤波器个数加倍以保持每个层的计算复杂度。通过步长为2的卷积来进行降采样。一共34个权重层。
该网络以一个全局平均池层和一个1000层的完全连接层和softmax来结束。

值得注意的是,我们的模型比VGG网络(图左)更少的过滤器和更低的复杂性。我们的具有34层的普通网络有3.6亿 FLOPs(乘加),只是VGG-19(19.6亿FLOPs)的18%。

残差网络

基于上面的普通网络,我们加入了shortcut connection(图右),将网络转换为对应的残差版本。当输入和输出是相同的维度时,恒等shortcut(等式(1))可以直接使用(图中实线)。当维度增加(图中虚线),我们提供两个选择:(A)short connection仍然执行恒等映射,用额外的零填充增加维度。这个选择不引入额外的参数;(B)等式 (2)中的线性投影用于匹配维数(由1×1卷积完成)。对于这两个选项,当shortcut跨越两种尺寸的特征图,它们执行的步长是2。

4 实验

ImageNet 分类

普通网络

34层与18层网络比较:训练过程中,
1、34层plain net(不带residual function)比18层plain net的error大 。34层的普通网络在训练过程中始终具有更高的训练误差。
2、34层residual net(不带residual function)比18层residual net的error小,更比34层plain net小了3.5%(top1)

残差网络

残差网络除了每对3×3的filters之间增加了shortcut连接外,基准结构和之前的普通网络相同。对所有的shortcut使用恒等映射,并使用0填充技术用于增加维度(选择A)。因此,与相应的普通网络相比,它们没有增加额外的参数。
结果显示:
1、34层的ResNet比18层的ResNet要好(2.8%)。这表明,在这样的设置下,退化问题得到了很好的解决,并且我们成功的从增加的深度获得了精度的提高。
2、与其相对应的普通网络相比,由于成功减少了训练误差 (图4右与左),ResNet将top-1的误差降低了3.5%(表2)。这一比较验证了在极深系统中残差学习的有效性。
3、18层residual net比18层plain net收敛快。当网络不过度深时(18层),目前的SGD求解器仍能在简单网络中找到好的解。在这种情况下,ResNet通过在早期提供更快的收敛简便了优化。

实验结果
实验结果
训练过程
训练过程

恒等shortcut vs 投影shortcut

这里写图片描述
研究投影shortcut(等式2)。在表3中,我们比较了三个选项:
(A)使用恒等映射,如果residual block的输入输出维度不一致,对增加的维度用0来填充;
(B)在block输入输出维度一致时使用恒等映射,不一致时使用线性投影以保证维度一致;
注:维度增加是指feature map增加的部分
(C)对于所有的block均使用线性投影。
对这三个选项都进行了实验,发现虽然C的效果好于B的效果好于A的效果,但是差距很小,因此线性投影并不是必需的,而使用0填充时,可以保证模型的复杂度最低,这对于更深的网络是更加有利的。

更深的Bottleneck结构

这里写图片描述
针对ImageNet的深度网络。考虑到我们所能承担的训练时间,我们修改building block为bottleneck。对于每个残差函数 F ,我们使用一个3层的堆叠结构代替2层的结构。这三层分别是1×1、3×3和1×1的卷积,1×1的卷积的目的是使维度先减小再增加(复原),让3×3的卷积层作为一个低维输入输出的bottleneck。
50层ResNet:我们用这种3层的bottleneck代替34层ResNet中的每个两层block,构成50层ResNet(表1)。我们使用选项B来增加维度。这个模型有38亿FLOPs。
101层和152层ResNet:我们通过使用更多的3层block构建101层和152层ResNet(表1)。尽管深度有了显著的增加,152层ResNet(113亿FLOPs)仍然比VGG-16/19(153亿/196亿FLOPs)复杂度更低。
50/101/152层的比34层更精确(表3和4),我们没有观察到退化问题,并因此从相当高的深度上获得了显著的精度增益。在所有评估指标上都可以看到深度的好处。

猜你喜欢

转载自blog.csdn.net/weixin_37904412/article/details/79966085