在 Google 的论文Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation中指出
我们的 LSTM RNN 有层,层之间有残差连接......
什么是残差连接?为什么层间有残差连接?
理想情况下,我首先寻找一个简单直观的解释,可能伴随着示意图。
当然,细节可以在原始论文中找到,但我认为这个问题会对社区有益。
在 Google 的论文Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation中指出
我们的 LSTM RNN 有层,层之间有残差连接......
什么是残差连接?为什么层间有残差连接?
理想情况下,我首先寻找一个简单直观的解释,可能伴随着示意图。
当然,细节可以在原始论文中找到,但我认为这个问题会对社区有益。
剩余连接与“跳过连接”相同。它们用于允许梯度直接流过网络,而不通过非线性激活函数。非线性激活函数本质上是非线性的,会导致梯度爆炸或消失(取决于权重)。
跳过连接在概念上形成了一条“总线”,它直接通过网络,相反,梯度也可以沿着它向后流动。
网络层的每个“块”,例如卷积层、池化等,都会在总线上的某个点处挖掘值,然后在总线上添加/减去值。这意味着块确实会影响梯度,相反,也会影响前向输出值。但是,通过网络可以直接连接。
实际上,resnets(“残差网络”)还没有被完全理解。他们显然是凭经验工作的。一些论文表明它们就像一组较浅的网络。有各种各样的理论:)它们不一定是自相矛盾的。但无论哪种方式,对它们工作的确切原因的解释超出了交叉验证问题的范围,这是一个开放的研究问题:)
在较早的答案中,我在Gradient backpropagation through ResNet skip connections中绘制了一张关于我如何在脑海中看到 resnet 的图表。这是我制作的图表,转载:
我理解了主要概念,但是这些残差连接通常是如何实现的?它们让我想起了 LSTM 单元的工作原理。
所以,想象一个网络,在每一层你有两个并行的卷积块: - 输入进入每个块 - 输出相加
现在,用直接连接替换其中一个块。如果您愿意,可以使用身份块,或者根本没有块。这是一个剩余/跳过连接。
实际上,剩余的转换单元可能是两个串联的单元,中间有一个激活层。
关于图像识别的深度残差学习,我认为说 ResNet 包含残差连接和跳过连接是正确的,它们不是一回事。
以下是论文中的一段引文:
我们假设优化残差映射比优化原始的、未引用的映射更容易。极端情况下,如果恒等映射是最优的,则将残差推至零要比通过一堆非线性层拟合恒等映射更容易。
将残差推到零的概念表明残差连接对应于学习的层而不是跳跃连接。我认为最好将“ResNet”理解为学习残差的网络。
在下图中(论文中的图 2),通过权重层和 relu 激活的路径是残差连接,而身份路径是跳过连接。
Squeeze-and-Excitation Networks的作者似乎也基于他们论文中的图 3 有这种理解。
参考
为了更好和更深入地理解残差连接概念,您可能还想阅读这篇论文:用于图像识别的深度残差学习。这篇论文在解释Transformers架构中的编码器元素时也被“ Attention Is All You Need ”论文引用。
在超分辨率中,有许多带有残差连接的网络架构。如果你有一张低分辨率的图片 x 并且你想重建一张高分辨率的图片 y,那么网络不仅要学习从 y 中预测丢失的像素,还必须学习 x 的表示。
因为 x 和 y 具有高相关性 -> y 是 x 的更高分辨率表示,所以您可以添加从输入到最后一层输出的跳过连接。这意味着,网络中发生的所有事情都只会集中在学习 yx 上。因为在最后,x 被添加到输出中。