Resnet是怎么解决网络退化的问题的

摘自https://zhuanlan.zhihu.com/p/54289848

随着网络层数的增加,梯度爆炸和梯度消失问题严重制约了神经网络的性能,研究人员通过提出包括Batch normalization在内的方法,已经一定程度上缓解了这个问题,但依然不足以满足需求。

作者想到了构建恒等映射(Identity mapping)来解决这个问题,问题解决的标志是:增加网络层数,但训练误差不增加。为什么是恒等映射呢,我是这样子想的:20层的网络是56层网络的一个子集,56层网络的解空间包含着20层网络的解空间。如果我们将56层网络的最后36层全部短接,这些层进来是什么出来也是什么(也就是做一个恒等映射),那这个56层网络不就等效于20层网络了吗,至少效果不会相比原先的20层网络差吧。

残差跨过一些层,求导的时候就可以直接加上shortcut的终点层的delta了。

表示resnet相当于多个模型的集成,其中真正有效的部分其实很短,梯度消失和爆炸本质上还是存在的,只是由于从loss到输入的有效路径变短了,所以问题不明显了

各种Resnet之间的差异

摘自https://zhuanlan.zhihu.com/p/54289848

ResNet主要有五种主要形式:Res18,Res34,Res50,Res101,Res152;

如下图所示,每个网络都包括三个主要部分:输入部分、输出部分和中间卷积部分(中间卷积部分包括如图所示的Stage1到Stage4共计四个stage)。尽管ResNet的变种形式丰富,但都遵循上述的结构特点,网络之间的不同主要在于中间卷积部分的block参数和个数存在差异。
图片说明
中间卷积部分主要是下图中的蓝框部分,通过3*3卷积的堆叠来实现信息的提取。红框中的[2, 2, 2, 2]和[3, 4, 6, 3]等则代表了block的重复堆叠次数。
图片说明

可以看出,ResNet50起,就采用Bottleneck结构,主要是引入1x1卷积。我们来看一下这里的1x1卷积有什么作用:

  • 对通道数进行升维和降维(跨通道信息整合),实现了多个特征图的线性组合,同时保持了原有的特征图大小;
  • 相比于其他尺寸的卷积核,可以极大地降低运算复杂度;
  • 如果使用两个3x3卷积堆叠,只有一个relu,但使用1x1卷积就会有两个relu,引入了更多的非线性映射;

ResNet到底能不能解决梯度消失/梯度爆炸?

只能说是缓解,而不能是彻底消除了。
残差跨过一些层,求导的时候就可以直接加上shortcut的终点层的delta了。
最有效的避免梯度爆炸的方法是梯度裁剪和batch-normalization。
https://www.zhihu.com/question/316745397

ResNet及其变种的结构梳理、有效性分析与代码解读

参考 https://zhuanlan.zhihu.com/p/54289848

关键点:

ResNet要解决什么问题?
ResNet怎么解决网络退化问题?
精华:8.2、从梯度反向传播角度理解ResNet的有效性