当前位置: 代码迷 >> 综合 >> 对于残差网络(Resnet)的理解
  详细解决方案

对于残差网络(Resnet)的理解

热度:5   发布时间:2023-12-18 11:04:01.0

     理论上来说,网络结构越深,提取的图像特征越“高级”,应该得到的学习效果更好。但是当我们传统网络堆到一定深度时,却准确度下降了。文章中主出了深层网络存在的两个问题:

1.梯度弥散与梯度爆炸

2.对于一个已经实现了最优拟合的浅层网络,如果再增加一些层,我们希望这些层最终权重都是1,实现恒等映射,而实际的学习中很难做到这一点,导致多经过网络加深后反而效果下降。这个问题称作退化问题。


针对以上问题,作者提出了这样的block结构:


针对问题1:

我们发现,反向传播的链式法则每一还都多加了一个1,这样每次乘的都不会是一个小于1的值,解决了梯度弥散问题。

针对问题2:

我们发现在每个block网络学习优化的目标由F(x)变成了H(x)-x,对于问题2中多出的层,我们原来希望所有的权重训练成1,现在希望所有权重训练成0,而文章提出这些参数优化成0显然比优化成1更容易实现。(这可能是由于这些参数初始化时就是零均值的)

在另一篇文章里我们看到这样一张图,非常有助于理解:


相比于以前的网络(比如vgg16),Resnet并不是各个模块串行的,相当于把各个不同深度的网络并联起来,最终的结果是浅层网络和深层网络共同作用的。一个Resnet堆得很深,最终起作用的部分可能并不深。

      通过上述结构,我们可以构建非常深的CNN,并且保证效果至少不会变差。

  相关解决方案