跳到主要内容

3.4 残差与层归一化:让百层高楼不塌

传话游戏的诅咒​

课间玩过传话游戏吗?「明天早读改在操场」,传过三个人就变成了「明天早操改在走廊」。每个人都只改动一点点,叠在一起就面目全非。

现在想想 Transformer 的处境:GPT-2 有 12 层,2025 年的旗舰模型上百层。如果每一层都把向量重写一遍,第 1 层辛苦提取的信息传到第 100 层还能剩下多少?

反方向更糟。2.5 节你亲手走过反向传播:梯度往回传,每过一层都要乘一次「本地导数」。一百个比 1 小的数连乘,结果小到约等于零——底层参数收不到任何学习信号,这就是梯度消失;反过来一百个比 1 大的数连乘就是梯度爆炸。

所以在很长一段时间里,深度学习有个尴尬的悖论:网络越深应该越强,实际却是深到几十层就训不动了——不是过拟合,是梯度根本传不到底。

2015 年,图像识别领域的 ResNet 用一个小学生都会的运算破解了绝症:加法。

残差:不重写,只批注​

残差连接给每一层立了新规矩:

本层输出=本层输入+本层算出的修正量\text{本层输出} = \text{本层输入} + \text{本层算出的修正量}

变化看似微小,含义却完全不同:每一层不再是「重抄员」,而是「批注者」——原文原封不动地往下传,每层只在旁边贴一张自己的便签。

这个加号同时治好了两种病:

  • 信息不走样:第 1 层的输出沿着「+ 输入」这条通道直达顶层,一百层也冲不掉原文;
  • 梯度有直达电梯:反向传播时,梯度同样能沿这条通道原样传回底层。原来的「连乘链」旁边,多了一条永不衰减的高速公路;
  • 学习变容易:每层的起点是「什么都不做」(修正量为零即可),只需学「还差什么」——比从零重写容易得多。

层归一化:音量调平器​

还有一个隐患:向量一路被加来加去,里面的数字可能越滚越大,或越缩越小,后面的层就没法安稳工作。

层归一化(LayerNorm)负责善后:在每个子层旁边,把向量的数值重新校准——减去平均值、除以波动幅度,再做一次可学习的微调。像一台音量调平器,把忽大忽小的信号拉回舒适区间,层层如此,数值永远稳定。

顺带一提:现代大模型普遍把归一化放在每个子层之前(叫 Pre-LN),训练比原始做法更稳,原因见深入层。

这个类比在哪里不准确?

「批注不重写」容易让人以为残差是跳过计算——不是。修正量那部分照样全力计算,残差只是保证最后用加法「保底」,信息不至于被覆盖丢失;而且几十层加下来,「原文」也会被逐渐稀释,并非永远原样。另外别把 LayerNorm 和图像模型里常见的 BatchNorm 混为一谈:前者对单个样本内部做校准,后者跨整批样本统计,语言模型基本只用前者——更准确说是它的简化版 RMSNorm(2025–2026 年主流开源大模型的标配)。

小结​

本节要点
  • 残差连接:输出 = 输入 + 修正量,给信息和梯度各修了一条恒等直达通道,是「百层网络训得动」的第一功臣。
  • 每层从「重写」降级为「批注」,只需学习增量,学习难度大降。
  • LayerNorm / RMSNorm 把每层数值校准回稳定区间,防止信号越传越大或越传越小。
  • 现代大模型的标准组合(2025–2026 年):Pre-LN + RMSNorm。
📝 动手自测0/3
1. 残差连接解决的核心问题是什么?
2. 在「输出 = 输入 + 修正量」中,如果某层学到的修正量恰好全是 0,会发生什么?
3. 层归一化(LayerNorm)在 Transformer 里的角色是?

延伸阅读​