理论上来说,网络结构越深,提取的图像特征越“高级”,应该得到的学习效果更好。但是当我们传统网络堆到一定深度时,却准确度下降了。文章中主出了深层网络存在的两个问题:
1.梯度弥散与梯度爆炸
2.对于一个已经实现了最优拟合的浅层网络,如果再增加一些层,我们希望这些层最终权重都是1,实现恒等映射,而实际的学习中很难做到这一点,导致多经过网络加深后反而效果下降。这个问题称作退化问题。
针对以上问题,作者提出了这样的block结构:
针对问题1:
我们发现,反向传播的链式法则每一还都多加了一个1,这样每次乘的都不会是一个小于1的值,解决了梯度弥散问题。
针对问题2:
我们发现在每个block网络学习优化的目标由F(x)变成了H(x)-x,对于问题2中多出的层,我们原来希望所有的权重训练成1,现在希望所有权重训练成0,而文章提出这些参数优化成0显然比优化成1更容易实现。(这可能是由于这些参数初始化时就是零均值的)
在另一篇文章里我们看到这样一张图,非常有助于理解:
相比于以前的网络(比如vgg16),Resnet并不是各个模块串行的,相当于把各个不同深度的网络并联起来,最终的结果是浅层网络和深层网络共同作用的。一个Resnet堆得很深,最终起作用的部分可能并不深。
通过上述结构,我们可以构建非常深的CNN,并且保证效果至少不会变差。