Deep Residual Learning for Image Recognition(图像识别的深度残差学习)

提出残差网络,2016年的CVPR最佳论文。

论文原文:https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html

提出了残差学习框架来简化深度超过以往网络的训练过程。将网络层重构为基于输入的学习残差函数(而非直接学习无输入参考的映射函数)。

1. 引言

深度神经网络通过端到端的多层架构,天然实现了低/中/高层特征与分类器的有机整合,而特征层级的丰富度可通过堆叠层数(即网络深度)来提升。深度在图像领域非常重要。提出了一个问题:构建更优神经网络是否仅需简单堆叠更多层?要回答这一问题,首先需要克服梯度消失/爆炸[1, 9]这一 notorious 难题——该问题从训练初期就会阻碍模型收敛。然而,通过标准化初始化和中间归一化层的应用,该问题已得到显著缓解——这些技术使得数十层的深度网络能够通过反向传播随机梯度下降(SGD)实现有效收敛。

当更深的网络能够开始收敛时,一个退化问题便暴露出来:随着网络深度的增加,模型准确率会先达到饱和(这或许不足为奇),继而迅速下降。这种退化并不是由过拟合引起的,在适当深度的模型上增加更多的层会导致更高的训练误差,如图1所示:

这个退化(训练准确率)说明了不是所有的系统都同样容易去优化。假设存在一个浅层网络架构及其通过叠加更多层构建的深层变体。根据构造原理,深层模型存在一个理论解:新增层采用恒等映射(identity mapping),其余层直接复制训练好的浅层网络参数。该构造解的存在证明深层模型的训练误差理论上不应高于其浅层原型。但实验表明,现有优化器无法找到与构造解相当或更优的实际解(或在可行时间内无法实现)。(这一段看起来有点打脑壳,让我用中文翻译一下,就是说假设有一个浅层的网络架构和一个深层的网络架构,这个深层的网络架构就是在浅层网络架构后面或者里面叠加了更多的层,甚至连浅层网络架构的参数值都没变,只是叠加了更多层,叠加的这个更多层是啥呢——H(x)=x,就是说这个层的输入等于输出。如果按照这种方式去构造呢,那么这个更深的网络架构在理论上是不会比浅层网络架构拥有更高的训练误差的。)

作者不再直接拟合目标映射,而是显式地让这些层学习残差映射。设目标映射为\(\mathcal{H}(x)\),让堆叠地非线性层拟合另一个映射\(\mathcal{F}:=\mathcal{H}(x)-x\)。原始目标的映射被设为\(\mathcal{F}(x)+x\)。优化残差映射比优化原始的、未参考输入的映射更容易。对于极端情况,如果恒定映射(H(x)=x)是最优的,对比让堆叠的非线性层拟合恒等映射(H(x)=x)来说,让残差F(x)=0更容易(H(x)=F(x)+x,F(x)=0,即H(x)=x)

\(\mathcal{F}(x)+x\)这个式子可以通过带有“快捷连接”[2,34,49]的前馈神经网络实现,如图2所示。快捷连接跳过了一个或多个层。在此论文中,快捷连接直接执行的恒等映射,并且把恒等映射的输出加在了堆叠层的输出中。恒等快捷连接既不增加额外参数,也不增加计算复杂度。整个网络仍然可以通过反向传播的SGD进行端到端训练,并且可以使用通用库(例如Caffe[19])轻松实现,而无需修改求解器。

作者在ImageNet上进行了全面的实验,以显示退化问题并评估该方法。发现:1)极深残差网络很容易优化,但对应的“普通”网络(简单地堆叠层)随着深度的增加而表现出更高的训练误差; 2)深度残差网络可以很容易地从深度大大增加中获得精度增益,产生的结果比以前的网络好得多。

2. 方法

2.1 残差学习

说有一个假设多层非线性可以拟合复杂函数,那么就意味着可以拟合残差函数:F(x)=H(x)-x。作者想让网络拟合残差函数。为啥这么重构是为了解决解的退化,如果网络层可以拟合到恒等映射H(x)=x,那么就算是加非常深的层原理上来说解也不会退化,退化的解就说明了,网络层拟合到恒等映射这件事是困难的。残差学习重构的原因是,如果发现浅层网络的输出比其深层网络的输出对于任务的效果更好,那么直接就可以让H(x)=F(x)+x中网络学习到的F(x)为0,那么就得到了一个浅层网络的恒等映射了(通过让多个非线性层权重为0)。虽然说现实中恒等映射得到的结果不会是最优的,但是网络的最优结果一般更接近恒等映射而不是零映射,通过学习F(x),然后加上x,能够更容易学习到恒等映射附近的扰动。

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

\(\begin{equation} y=F(x, \{ W_i \})+x \end{equation} \tag{1}\)

可以这么定义一个残差块,其中\(F=W_2 \sigma(W_1x),\sigma\)表示ReU层,F为了简化忽略了偏置b。一个快捷连接执行了F + x, F +x是逐元素相加的, 然后在F + x后又接了一个ReLU层。因为F 和 x是逐元素相加的,所以它们两维度需要相匹配,可以加一个Ws与x相乘使其快速匹配 F 的维度:

\(\begin{equation} y=F(x, \{ W_i \})+W_s x \end{equation} \tag{2}\)

这个跳跃的恒等映射必须要跳跃2层以上,不能是上一层的输出来加在本层的输出上,因为假设上一层的输出是x,本层的输出是W1x,那么加在一起就是W1x+x=(W1+1)x,这个恒等映射就没啥太大作用了。虽然符号是用全连接层符号表示,但是在卷积层上一样生效,全连接的逐元素加体现在卷积层上就是两个不同层输出的特征映射进行逐通道元素相加。

2.3 网络结构

网络架构如下图所示,特征图尺度不变的话那么每层的过滤器的个数也保持不变,如果特征图尺度减半,那么过滤器的数量加倍,以保持每层相同的时间复杂度。下采样是通过将步长设置为2进行的。网络架构如下图所示:

通过加入快捷连接就能将对应的plain网络转换成ResNet网络。实线的连接是F和x处于同一维度,虚线的连接是处于不同的维度。对于处于不同维度的连接(逐通道逐元素相加)采取两种方式,一种是如果是维度不够那么就用零来填充不够加的维度,另外一种就是采取上面公式2的投影,就相当于用1×1的卷积层增加了维度。这两种方式的步长都为2(我觉得第一种方式可能取了一个步长为2的平均池化,而第二种方式则是在1×1卷积的时候步长为2)。

2.4 具体实现

经过一系列的图像增强后(短边调整至[256, 480],随机裁剪至224*224的尺寸从原始图像或者翻转图像,减去平均像素值, 颜色增强),并在每个卷积层和激活层后应用BN归一化。初始化权重,并从头开始训练所有普通/残差网络。使用小批量大小为256的随机梯度下降法(SGD)。初始学习率为0.1,当误差停滞时学习率除以10,模型训练总迭代次数可达60×10⁴次。采用权重衰减系数为0.0001,动量系数为0.9。该实验未使用dropout技术。

在测试阶段,为进行对比研究,采用标准的十裁剪测试法。为获得最佳结果,采用全卷积形式,在多尺度下对评分结果进行平均(图像尺寸调整以较短边长度属于{224,256,384,480,640}像素集合为准)。

3 实验

以下是所有plain网络(就是没有用残差的网络)的架构(从18层到152层):

下表可以看出,高的32层普通网络比低的18层的网络的验证错误更高。下图展示了在训练过程中普通网络和残差网络的训练和验证错误。

参考文献

[1] Y. Bengio, P. Simard, and P. Frasconi. Learning long-term dependencies with gradient descent is difficult. IEEE Transactions on Neural Networks, 5(2):157–166, 1994.

[2] C. M. Bishop. Neural networks for pattern recognition. Oxford university press, 1995.

[9] X. Glorot and Y. Bengio. Understanding the difficulty of training deep feedforward neural networks. In AISTATS, 2010.

[19] Y. Jia, E. Shelhamer, J. Donahue, S. Karayev, J. Long, R. Girshick, S. Guadarrama, and T. Darrell. Caffe: Convolutional architecture forfast feature embedding. arXiv:1408.5093, 2014.

[34] B. D. Ripley. Pattern recognition and neural networks. Cambridge university press, 1996.

[49] W. Venables and B. Ripley. Modern applied statistics with s-plus. 1999.

学习到的内容总结

1.我发现大佬的论文就是每一句话都是重点,我很想浓缩这篇论文的精华,然后发现其实每一句好像已经足够精华了,而且还有点看不懂,看了两篇何凯明的论文都是这样。

2.作者的引言部分介绍步骤(可以模仿一下,模仿老虎,才能成为猫,不然只能是老鼠):

  1. 当前深度神经网络的发展 和 网络深度的重要性
  2. 深度增加带来的问题(第二段引言说很深的网络很难收敛——但是通过初始归一化和中间归一化层解决了,第三段又说很深的网络即使可以收敛,但是又会造成解的退化,退化不是由于过拟合导致的)
  3. 根据解的退化得到深度网络不好优化的结论,然后正式引入自己提出的架构(在浅层网络中加入一些恒等映射层构成的深度网络损失最高也不会比浅层高)
  4. 提出了创新部分,就是那个残差连接那块,解释了创新部分的设计和网络实现的影响
  5. 说自己已经实验过了,实验过后结论比起其他的网络优势在哪里
  6. 说自己实验的表现,和在一些任务或者数据集中的表现

看完说谢谢了吗?哈哈哈~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇