一句话定义:残差连接(Residual Connection)就是把某一层的输入直接加到这一层的输出上:output = F(x) + x。网络不再学“全部内容”,只学“改动量”。
为什么需要它
网络越深,理论上表达力越强。但早期把层一层层直接堆起来(后来被称为 plain network),结果常常是:20 层反而不如 10 层,而且训练误差也更高——不是过拟合,是根本训不动。
原因出在反向传播:梯度从最后一层往回传,每路过一层就乘一次该层的导数。连乘几十次,梯度要么趋近于零(消失),要么爆炸,前面几层几乎收不到有效信号。
打个生活化的比方:一条很长的传话链,每个人都只能把话复述给下一个人,传到最后原意基本没了。残差连接相当于让每个人多做一件事——把上一手拿到的原话纸条原封不动递过去,自己只附一条“修正说明”。下游拿到的是“原文 + 各段修正”。
它为什么有效
- 梯度多了一条直通路径。 加法在求导时留下一项恒等路径,梯度可以几乎无损地回传,叠得再深也不容易衰减。
- “最少不比浅层差”。 如果新增的层没用,网络只要让
F(x)接近 0,整体就退化成浅层网络。于是加深至少不会伤害性能,剩下的交给优化去赚。
和相邻概念的区别
| 概念 | 做什么 | 解决什么 |
|---|---|---|
| 残差连接 | 输出 = 子层结果 相加 输入 | 深层网络训不动、退化 |
| 普通跳跃连接 | 泛指跨层连线,形式多样 | 残差连接是其中最常见的一种 |
| 密集连接(DenseNet) | 跨层结果按通道 拼接 | 特征复用 |
| 门控连接(Highway Network) | 用门控制保留多少输入 | 目的类似,参数更多 |
| 归一化(Batch / Layer Norm) | 调整激活数值分布 | 训练不稳、收敛慢 |
它们常一起出现,但职责不同:残差连接是结构设计,归一化是数值调节。
对从业者的实际意义
今天的深层模型几乎默认带残差连接。ResNet 靠它把网络推到上百层;Transformer 的每个子层也是 x + Sublayer(x) 再归一化,也就是常说的 Add & Norm。很难想象没有它,上百层的 Transformer 还能稳定训练。
两个实用经验:模型加深后效果反而变差,先检查残差路径是否通畅;梯度消失、爆炸频繁出现时,残差是第一道保险,梯度裁剪和归一化是后续补丁。
对非技术岗同样适用:任何多层级流程,如果要求每一级都“重新表述完整信息”,信息衰减是必然的。更好的设计是保留一条原始信息通道,每级只提交增量修改。
