我对神经网络的回归很感兴趣。
具有零隐藏节点 + 跳过层连接的神经网络是线性模型。
相同的神经网络但有隐藏节点呢?我想知道跳过层连接的作用是什么?
直观地说,如果你包括跳过层连接,那么最终模型将是线性模型 + 一些非线性部分的总和。
向神经网络添加跳层连接有什么优点或缺点吗?
我对神经网络的回归很感兴趣。
具有零隐藏节点 + 跳过层连接的神经网络是线性模型。
相同的神经网络但有隐藏节点呢?我想知道跳过层连接的作用是什么?
直观地说,如果你包括跳过层连接,那么最终模型将是线性模型 + 一些非线性部分的总和。
向神经网络添加跳层连接有什么优点或缺点吗?
我玩这个游戏很晚了,但我想发帖以反映卷积神经网络在跳过连接方面的一些当前发展。
微软研究团队最近赢得了 ImageNet 2015 竞赛,并发布了一份技术报告Deep Residual Learning for Image Recognition,描述了他们的一些主要想法。
他们的主要贡献之一是深度残差层的概念。这些深层残差层使用跳跃连接。使用这些深度残差层,他们能够为 ImageNet 2015 训练一个 152 层的卷积网络。他们甚至为 CIFAR-10 训练了一个超过 1000 层的卷积网络。
激励他们的问题如下:
当更深的网络能够开始收敛时,一个退化问题就暴露出来了:随着网络深度的增加,准确度变得饱和(这可能不足为奇),然后迅速退化。出乎意料的是,这种退化并不是由过度拟合引起的,而在适当深度的模型中添加更多层会导致更高的训练误差......
这个想法是,如果你采用“浅”网络并只是堆叠更多层以创建更深的网络,那么更深网络的性能应该至少与浅层网络一样好,因为更深的网络可以学习确切的浅层网络通过将新的堆叠层设置为标识层来构建网络(实际上我们知道,如果不使用架构先验或当前的优化方法,这可能极不可能发生)。他们观察到情况并非如此,当他们在较浅的模型上堆叠更多层时,训练错误有时会变得更糟。
所以这促使他们使用跳过连接并使用所谓的深度残差层来允许他们的网络学习与身份层的偏差,因此术语残差在这里指的是与身份的差异。
所以他们将地图视为一些残差图。他们使用跳过层连接将此映射转换为。因此,如果残差是“小”,则映射大致是恒等式。
以这种方式,通过跳过连接使用深度残差层允许他们的深度网络学习近似的身份层,如果这确实是最优的或局部最优的。事实上,他们声称他们的剩余层:
我们通过实验(图 7)表明,学习到的残差函数通常具有较小的响应
至于为什么这确实有效,他们没有确切的答案。身份层不太可能是最优的,但他们认为使用这些残差层有助于解决问题,并且在给定与身份映射比较的参考/基线的情况下学习新函数比“从头开始”学习更容易不使用身份基线。谁知道。但我认为这将是您问题的一个很好的答案。
顺便说一句,事后看来:sashkello 的答案更好,不是吗?
理论上,跳层连接不应该提高网络性能。但是,由于复杂的网络难以训练且容易过度拟合,因此当您知道您的数据具有很强的线性分量时,将其显式添加为线性回归项可能非常有用。这暗示了模型的正确方向......此外,这更易于解释,因为它将您的模型呈现为线性 + 扰动,解开网络背后的一些结构,这通常仅被视为一个黑匣子。
我的旧神经网络工具箱(这些天我主要使用内核机器)使用 L1 正则化来修剪掉冗余权重和隐藏单元,并且还具有跳层连接。这样做的好处是,如果问题本质上是线性的,隐藏单元往往会被修剪,你会得到一个线性模型,它清楚地告诉你问题是线性的。
正如 sashkello (+1) 所暗示的,MLP 是通用逼近器,因此在无限数据和无限数量的隐藏单元的限制下,跳过层连接不会改善结果(但我们什么时候会接近这个限制?)。真正的优势在于,如果网络架构与问题很好地匹配,它可以更容易地估计权重的好值,并且您可以使用更小的网络并获得更好的泛化性能。
但是,与大多数神经网络问题一样,通常要确定它对特定数据集是否有用或有害的唯一方法是尝试并查看(使用可靠的性能评估程序)。
可以在这里找到从多个角度对跳过连接的深入解释:
https://theaisummer.com/skip-connections/
在这里,我提供文章的要点:
基本上,跳过连接是许多卷积架构中的标准模块。通过使用跳过连接,我们为梯度提供了一条替代路径(使用反向传播)。经过实验验证,这些额外的路径通常有利于模型收敛。顾名思义,深度架构中的跳过连接跳过神经网络中的某个层,并将一层的输出作为输入提供给下一层(而不仅仅是下一层)。
如前所述,使用链式法则,当我们向后退时,我们必须不断将项与误差梯度相乘。但是,在长长的乘法链中,如果我们将许多小于 1 的东西相乘,那么得到的梯度会非常小。因此,当我们接近深度架构中的较早层时,梯度变得非常小。在某些情况下,梯度变为零,这意味着我们根本不更新早期层。
一般来说,有两种基本方法可以通过不同的非顺序层使用跳跃连接:
a) 残差架构中的加法,
b) 与密集连接架构中的连接。
我希望它能澄清你的理解!