摘要
训练很深的网络很难,我们提出了一个残差连接来降低深层网络的复杂度,使得其更容易训练。
1.介绍
问题:学习更好的网络像堆叠更多的层一样简单吗?
解决:存在梯度消失和梯度爆炸问题,这个问题,可以通过好的标准初始化和BN来解决,这就使得网络可以通过SGD来进行收敛
问题:随着网络开始收敛时候,会出现退化现象,也即深层的网络的训练误差和测试误差都会比浅层网络的要高。
解决:理论上来说,深层的网络一定会比浅层的网络误差要小。理论分析为:深层网络增加的层是恒等映射,而其他层是从已经训练好的浅层模型复制来的。按照这样的思路来说,深层网络的再差也能达到和浅层网络一样的误差,但是结果反而不是。
提出残差连接
假设我们期望的连接映射为H(x),原来的基础映射为x,现在增加一个残差块来学习H(x)比x多学习到的那一部分g(x)。故H(x)=g(x)+x,通过显示的增加恒等映射,来降低模型的复杂度,使得网络更容易训练出来。在极端情况下,如果一个恒等映射是最优的,那么将残差置零比用一堆非线性层来拟合一个恒等映射更容易。
GBM之前也使用过类似的残差块,这给我们提示:可以用之前的idea来解决当下现存的问题。
2.相关工作
介绍前人其实也有在研究过类似的东西,比如:残差表示和快捷连接
3.深度残差学习
3.1残差学习
3.2恒等映射快捷
快捷连接既不引入额外的参数,也不增加计算复杂度。
3.3网络架构
当网络的维不匹配时,有两种解决策略
A: 捷径仍然执行恒等映射,增加维数时填充额外的零项。这个选项不引入额外的参数;
B: 投影快捷方式用于匹配尺寸(由1×1卷积完成)。
4.实验
架构分析
18层和34层,中间可以分为4层,不同层之间使用投影来匹配维度。
18层和34层,中间4层增加了个数。
深层网络的中间层,一般都是先降维,然后卷积,最后升维。远比直接升维做两次卷积的复杂度要低
解决输出和输入不匹配的问题(常用2)
- 加0来填充
- 维度不同时,用投影来增加维度。相同时,不用投影
- 维度同与不同,都用投影
SGD精髓:只要梯度够大,就能train
原来的梯度小,现在加法会加上一个较大的梯度,所以能train的动