1.背景
- 网络的 depth 很重要
- Is learning better networks as easy as stacking more layers?
问题:梯度消失/爆炸阻碍收敛。 解决:添加 normalized initialization和 intermediate normalization layers - deeper networks
degradation problem:depth increasing, accuracy gets saturated and then degrades rapidly
训练集误差增大 (优化难题,模型越复杂,SGD的优化更困难,导致了模型达不到好的学习效果) - 解决 degradation problem:引入一个深度残差学习框架
2. Deep Residual Learning
残差网络参考了VGG19网络,在其基础上进行了修改,也是有5个卷积块,只不过把卷积块换成残差结构,残差结构有两种形式
identity mapping(恒等映射) :y = F( x ; { Wi } ) + x
其中: F( x ; { Wi } ) 表示残差
左图:a basicBlock(浅层) -------------右图:a “bottleneck” block f(深层)(考虑可以负担的训练时间)
-
2.1. Residual Learning
(1) 原始输入信息传输到后面的层中
特征图经过卷积层和非线性层后和之前的特征图进行数据融合,融合结果再往后面的网络推进。
(2) 假定某段神经网络的输入是 x,期望输出是 H(x),如果直接把输入 x 传到输出作为初始结果,那么此时需要学习的目标就是 F(x)=H(x)-x,这就是一个 ResNet 的残差学习单元(Residual Unit),ResNet 的学习目标不再是学习一个完整的输出,而是学习输出和输入的差别,也就是残差。 -
2.2. Identity Mapping by Shortcuts
(1) 网络有很多“支线”来将输入直接连到后面的层,使得后面的层可以直接学习残差,被称为 shortcut 或 skip connections,能够保护信息的完整性,整个网络只需要学习输入、输出差别的那一部分,简化了学习目标和难度。
(2)
输入和输出相同维度: 直接使用 identity mapping :y = F( x ; { Wi } ) + x (不增加参数和计算复杂度)
输入和输出不同维度:matching dimensions
方法1:仍然采用 identity mapping ,用零填充增加维度 (没有残差学习)
方法2:projection shortcut: y = F ( x ; { Wi } ) + Ws x (使用1x1卷积)
方法3:全部使用projection shortcut (有额外参数)
3种方法产生的结果差异很小,说明:projection shortcuts are not essential for addressing the degradation problem
3.补充
-
有效性
前向计算:低层卷积网络高层卷积网络信息融合;层数越深,模型的表现力越强
反向计算:导数传递更直接,越过模型,直达各层 -
残差结构用在多层卷积上,identity mapping:2个特征图
-
普通网络中的 degradation problem 不是由梯度消失(过拟合)造成的
conjecture :deep plain nets may have exponentially low convergence rates,which impact the reducing of the training error -
residual functions might be generally closer to zero than the non-residual functions.
4.重点
- 复杂的问题解决方式:
(1)将复杂问题分解成几个较简单的问题,然后分别训练几个较简单的模型,最后将几个模型的输出连接起来送入FC层分类。
(2)不分解原问题,而是把神经网络分解,来降低拟合函数的复杂度。
论文结构是(1)
- 不是(2)的原因:
BN改变了“identity”分支的分布,影响了信息的传递,在训练的时候会阻碍loss的下降 - 不是(3)的原因:
如果ReLU作为“residual”分支的结尾,那么“residual”分支的结果永远非负,这样前向的时候输入会单调递增,从而会影响特征的表达能力,所以我们希望“residual”分支的结果应该在(-∞, +∞) - (5)是resnet_v2版本:
结构好的原因在于两点:1)反向传播基本符合假设,信息传递无阻碍;2)BN层作为pre-activation,起到了正则化的作用;