本文记录我在读论文《Deep Residual Learning For Image Recognition》时的一些笔记与思考。在读的过程中有一些名词很难理解,经过上下文推敲可以大致猜出其含义,推荐自己读完了之后再观看李沐的ResNet论文讲解视频,可以有更深刻的理解。
研究背景
深度卷积神经网络在图像分类任务中达到一系列的突破。深度网络很自然地将不同层的特征融合起来,形成一个端到端的多层网络风格,而且随着层数的增加,所提取的特征也更加丰富。这随即就引发思考:学习更好的网络就像堆叠更多的层一样简单吗?
事实是,随着网络的层数的叠加,我们会遇到梯度消失和梯度爆炸 问题,而这个问题也会阻碍模型的收敛。然而规范化初始化(normalized initialization
)和 intermediate normalization layers
很好的缓解了这个问题,前者指的是在初始化权重的时候注意不将值设置太大也不要特别小,后者指的是在网络中间加一些normalization
,比如BN: batch normalization
可以校验每个层之间的输出以及梯度的均值和方差,避免有些层特别大,有些层特别小。这就使得包含很多层的网络开始可以基于随机梯度下降(SGD)的优化器进行反向传播收敛了。但是,随着网络层数的加深,精确度开始饱和,然后急剧衰减。作者将这种现象称为退化问题(degradation problem
)。而且这种退化问题不是由于模型的层数变深、模型的参数变多而过拟合导致的,给一个网络添加更多的层会导致更高的训练误差,这一结论在作者的实验中得到了证实,如下图所示(图来自论文原文):
plain
指的是没有使用残差结构的网络。假设有一个浅层的网络,已经优化的比较好了,如果为其增加更多的网络层,作者认为结果不应该变得更差,大不了也只是和没有添加这些层的结果一样,即直接跳过这些层输出结果,这个映射过程称为identity mapping
。但是我们目前的优化方法做不到。所以作者希望构造一个这样的结构(identity mapping
),使得更深的结构不会比浅层结构表现更差。
核心思想
为了解决上述退化问题,作者提出深度残差学习框架 (deep residual learning framework )。作者不是直接提出一种网络层的堆叠方式来直接学习所需要的underlying mapping(可以理解为网络层最终可以实现的函数映射功能),而是构造满足残差映射(residual mapping
)的网络层。假设所需要学习的underlying mapping 为
H
(
x
)
\mathcal{H}(\mathbf{x})
H(x),
X
X
X是浅层网络所学习到的内容,然后继续添加若干层残差映射网络层,这些层不按照前几层的学习模式来直接学习
H
(
x
)
\mathcal{H}(\mathbf{x})
H(x),而是学习
X
X
X与
H
(
x
)
\mathcal{H}(\mathbf{x})
H(x)之间的残差
F
\mathcal{F}
F:
F
(
x
)
:
=
H
(
x
)
−
x
\mathcal{F}(\mathbf{x}):=\mathcal{H}(\mathbf{x})-\mathbf{x}
F(x):=H(x)−x
这样一来,我们最终需要学习的
H
(
x
)
\mathcal{H}(\mathbf{x})
H(x)可以表示为
F
(
x
)
+
x
\mathcal{F}(\mathbf{x})+\mathbf{x}
F(x)+x。这一结构可以使用神经网络前向传播过程中的捷径连接(shortcut connections
)来实现,其中,不经过残差映射网络层直接输出
X
X
X的部分就是上面提到的identity mapping
,即下图的捷径部分,如下图所示(图来自论文原文):
这一结构不会增加任何额外的参数数量以及复杂的运算,一样可以被SGD端到端地训练,且容易实现。在实验中也表明,在较深的神经网络中,文章提出的deep residual nets
很容易优化,而随着网络的深度加深,通过简单堆叠若干层的网络('plain' nets
)会产生更大的训练误差,本文的新网络却可以学习到更多的内容并提高精度。
进一步细节阐述
更多内容请移步原博客阅读:
Deep-Residual-Learning-for-Image-Recognition 论文笔记