为什么残差网络有效?

机器算法验证 机器学习 神经网络 卷积神经网络 残差网络
2022-03-10 19:37:51

我对由 Kaiming He、Xiangyu Zhang、Shaoqing Ren、Jian Sun 撰写的论文Deep Residual Learning for Image Recognition有几个问题。

残差网络的构建块可以看成如下:数据传递到右分支、卷积、缩放、卷积;然后在右分支:恒等映射或卷积;之后,将两个分支的输出相加。

  1. 为什么这允许训练深度网络,避免深度网络饱和?我没有从报纸上得到这个想法。这个总结是否提醒了几层前发生的事情,一个参考点?还是只是聪明的正则化?

  2. 右分支层的数量是如何选择的?

  3. 根据这个 caffe 架构,我们为什么要在正确的分支上训练规模层

3个回答

简而言之(来自我的手机),它之所以有效,是因为渐变会到达每一层,只需在其之间区分少量层即可。

如果您从层堆栈的底部选择一个层,它与仅通过其他几个层的输出层有连接。这意味着渐变将更加纯净。

这是解决梯度消失问题的一种方法。因此模型可以构建得更深。

为什么这允许训练深度网络,避免深度网络饱和?

我们可以将一个层视为一个函数,添加一个层(具有更多参数)会导致一个具有更大假设空间的新函数。

添加图层有两种方法,对于通用方法,我们只需添加一个图层,这将导致左侧描绘的空间,其中较大的空间并不能保证更接近真相(最优,或者局部或全局最优)比添加它之前。

但是,如果我们添加残差连接,它就像右侧所示的“泰勒展开”式参数化。您添加的层数越多,您的参数可能就越接近真实情况。

在此处输入图像描述

因此,只有当较大的函数类包含较小的函数类时,我们才能保证严格增加它们会增加网络的表达能力。对于深度神经网络,如果我们可以将新添加的层训练成一个恒等函数 f(x) = x,那么新模型将与原始模型一样有效。由于新模型可能会获得更好的解决方案来拟合训练数据集,因此添加的层可能更容易减少训练错误。

他们提出的残差网络(ResNet)的核心是每个附加层都应该更容易地包含身份函数作为其元素之一。

参考

  1. 深度学习 - ResNet
  2. 深入学习

这个问题有一个更清晰的答案(在讨论论坛上找到):

捷径的目的是防止梯度消失(很少会爆炸)。想象一下,在训练期间预测的输出不准确,存在一些错误。例如,图片中有一只西伯利亚猫,但网络预测它是一只欧洲短毛猫。差别不大,后者的皮毛较短。现在,这种差异必须作为梯度在整个网络中反向传播。你可以想象,当我们逐层返回图像本身时,这种差异,这个梯度会越来越小,因为总权重小于 1。这就是我们所说的“梯度消失”(顺便提一下,当权重大于 1 时,它们会爆炸梯度,这是一件非常糟糕的事情)。太小的梯度可能不准确,最终可能为零,

这些消失的梯度可以通过这些捷径来避免。如果你甚至在一层上做捷径,渐变可以采用更短的路径返回,大约是原始长度的一半。它可以极大地帮助避免梯度消失(或爆炸)。