深度学习

残差连接(residual connection)

/ rih-ZID-joo-ul kuh-NEK-shun /

残差连接,是一个让「真正的深网络」——上百层——得以训练而不至于崩掉的小小接线技巧。它的想法简单得近乎叫人不好意思:在某一层对输入做变换的那条路径之外,再加一条捷径,把原始输入原样穿过去,再加回到这一层的输出上。于是,你不再逼着每一层从零重新发明一切,而只要它去学那个「残差」——那点小小的改动、那点剩下的差额——叠加在已经进来的东西之上。

想象你在修改一个段落。你可以每过一遍都把它整段重写,也可以保留现有文字、只标出要改的地方。后一种更稳妥:如果某一遍实在没什么有用的可加,它大可不动原文,你也半点不损失。残差连接给了一层同样的选项。如果一层帮不上忙,它可以学着输出近乎零,让未经触动的输入经由捷径流过去——于是「多加几层」再也不会把事情弄糟,至多可能变好。

它为什么如此要紧:在这之前,把许多层叠起来反而会拉低准确率,因为训练信号(梯度)得一层层往回传,传着传着就褪成了零——这正是「梯度消失」问题。那条捷径给了这个信号一条清晰、直达的回传通路,于是很深的网络终于能训练好。它在 2015 年作为 ResNet 问世,如今这一个想法已成了几乎每一种深度架构的标准配件,连 Transformer 也在内。它并非白来——它增添了连接和内存——但它在「可训练的深度」上换回的回报,是巨大的。

把一个模块的输出写成 输出 = F(输入) + 输入。那个「+ 输入」就是残差连接。如果这个模块学到 F ≈ 0,输入便原样穿过、毫无改变——于是即便这一层无可奉献,也绝不添乱。

只学那点改动,而非全部——并让原始的东西免费流过。

「残差连接」与「跳跃连接」常被互换使用。核心洞见是:只让一层去学「与输入的差额」,远比让它去学「完整的映射」容易得多——而且它还给训练信号留了一条回家的捷径。

又称
skip connection残差连接殘差連接跳跃连接ResNetshortcut connection