已经表明,随着层数的增加,“普通”神经网络的训练误差和伴随的测试误差往往会增加。我不太确定为什么会发生这种情况。在最初的ResNet论文中,他们假设并验证这不是由于梯度消失造成的。
据我了解,模型很难近似层之间的恒等映射,此外,当此映射最佳时,模型可能倾向于近似零函数。如果是这种情况,为什么会发生这种情况?最后,为什么这不会发生在身份映射也可能是最优的较浅的网络中?
我是这个话题的新手,所以如果我不能完全理解这个问题,我深表歉意。谢谢你。
已经表明,随着层数的增加,“普通”神经网络的训练误差和伴随的测试误差往往会增加。我不太确定为什么会发生这种情况。在最初的ResNet论文中,他们假设并验证这不是由于梯度消失造成的。
据我了解,模型很难近似层之间的恒等映射,此外,当此映射最佳时,模型可能倾向于近似零函数。如果是这种情况,为什么会发生这种情况?最后,为什么这不会发生在身份映射也可能是最优的较浅的网络中?
我是这个话题的新手,所以如果我不能完全理解这个问题,我深表歉意。谢谢你。
在训练深度神经网络时已经观察到退化问题。随着我们增加网络深度,准确性会饱和(这是意料之中的)。为什么会这样?因为我们期望一个足够深的神经网络来很好地模拟我们数据的所有复杂性。我们认为,总有一天,深度网络中的附加层为我们提供的额外建模能力将完全学习我们的数据。
这是最容易的部分。现在我们还看到,随着我们进一步增加网络的层数(在饱和区域之后),网络的准确性下降了。好的,我们说,这可能是由于过度拟合造成的。除了,这不是由于过度拟合,深度模型中的额外层会导致更高的训练错误(训练,而不是测试)!
正如您在上图中所看到的,更深的网络会导致更高的训练错误。要了解这一发现是多么违反直觉,请考虑以下论点。
考虑一个有 n 层的网络。该网络会产生一些训练错误。现在考虑一个具有 m 层 (m>n) 的更深的网络。当我们训练这个网络时,我们希望它的性能至少与较浅的网络一样好。为什么?用经过训练的较浅网络的 n 层替换深层网络的前 n 层。现在用恒等映射替换深层网络中剩余的 n-m 层(也就是说,这些层只是简单地输出馈入它们的内容,而无需进行任何更改)。因此,我们的更深层模型可以轻松学习更浅层模型的表示。如果存在更复杂的数据表示,我们希望深度模型能够学习到这一点。见文末注释。
但这在实践中不会发生!我们刚刚在上面看到,更深的网络会导致更高的训练错误!
这是残差网络旨在解决的问题。
注意:理解这一点的类比来自多项式回归。假设我有一些数据可以使用线性表示有效地学习,也就是说,我的假设是 h(x)=wx+b 其中 w 和 b 是学习参数。为了更加确定,我在训练时使用二次假设 h(x)=ax2+bx+c。现在,如果线性假设是学习这些数据的最佳方法,我希望二次假设通过学习 a->0 来学习这种线性表示。这是在实践中观察到的,但正如我们在上面看到的,不适用于神经网络!