这篇论文,一个主要的目的就是把网络变深,变得更深。因此有了残差连接的诞生。
从两个方面记录笔记:为什么会用残差连接,什么是残差学习。
为什么会用残差连接
作者提出一个网络训练过程中出现的问题,叫做“degradation”。
训练过程中,梯度消失/爆炸问题已经解决了,通过精心的初始化以及加上batch normalization层,可以用SGD优化算法训练。但是随着层数的增加,准确率会达到饱和,甚至会降低。通过训练分析,这并不是过拟合造成的,因为训练的误差也会增加(如果是过拟合,训练误差应该继续降低,测试误差会增加),那么这个就叫做“degradation”。
基于此,作者提出“deep residual learning framework”来解决这个问题。
什么是残差学习
提前思考这么一个问题,一个深度网络A,在A后面加上几层非线性层变成B,那么B的效果应该不会比A差,因为理论上,A的解空间应该是B解空间的一个子集。只需要B后面新加的几层是一个identity mapping(恒等变换),那么B的结果就是A的结果,但是现在B的精度比A差,则得出一个结论:几层非线性层无法优化成一个恒等变换。
几个非线性层优化为0相对优化为一个恒等变换简单的多。因此看下图(过滤掉我的PS技术)
假设网络层关系应该是H(x),把 H(x) 分解为 F(x)+x,这样让几个非线性层去拟合 F(x) 即残差函数 H(x) - x,假如H(x) 只是一个恒等变换即 H(x) = x,那么 F(x) 只需要去拟合0即可,简单很多。这就是残差学习。
残差连接注意问题
如果x与F(x)维度不一样,有两种方案
第一种,直接填充0,优点就是不会增加额外的参数
第二种,用1*1卷积提升维度,但增加额外的参数学习
根据作者的实验结果分析,第二种算法精确度高,但计算资源需求大。
对ResNet的另一个解读
有一篇论文叫做:Residual Networks Behave Like Ensembles of Relatively Shallow Networks,这是从另一个角度解读ResNet,从论文名字也可以看出,作者认为ResNet就像多个网络的集合,论文中一张图解释的很清楚。
有兴趣的大家可以去看原论文,后面我可能也会做笔记。
参考
https://blog.csdn.net/u011534057/article/details/51819968
https://blog.csdn.net/Love_wanling/article/details/64906206