一句话定义:Pre-LN 和 Post-LN 指的是在 Transformer 的每个子层里,层归一化(Layer Normalization,AI 词典:LayerNorm">LayerNorm)放在残差分支之前还是之后。
先看公式。一个 Transformer 块通常包含自注意力(self-attention)和前馈网络(feed-forward network)两个子层,每个子层外面套一个残差连接(residual connection)。设输入为 x,子层计算为 F(x),那么:
- Post-LN:
y = LayerNorm(x + F(x)),先做残差相加,再归一化。 - Pre-LN:
y = x + F(LayerNorm(x)),先归一化,再送入子层,残差路径保持原样。
打个比方:残差连接像一条“原味高汤”直通出口的管道,子层像旁边的“调味车间”。Post-LN 是调味车间和高汤汇合后,再统一尝咸淡、做标准化;Pre-LN 是先把原料标准化再进调味车间,高汤则原封不动地流到出口。关键差别在于:Pre-LN 给梯度留了一条干净的“高速公路”——恒等路径上没有 LayerNorm 挡着,反向传播时梯度不容易被反复缩放;Post-LN 的归一化卡在残差之后,梯度必须穿过它,层数一深就容易出现梯度消失或爆炸,训练对学习率和 warmup(预热)非常敏感。
对比一下:
| 维度 | Post-LN | Pre-LN |
|---|---|---|
| 归一化位置 | 残差相加之后 | 子层输入之前 |
| 恒等路径 | 被 LayerNorm 打断 | 干净直通 |
| 训练稳定性 | 较敏感,常需 warmup | 较稳,容错更高 |
| 常见取舍 | 早期 Transformer 常用 | 深层大模型更常见 |
需要强调:Pre-LN 不是一种新的归一化算法,只是摆放位置的变化;它和 LayerNorm、残差连接是“位置关系”,不是替代关系。另外,Pre-LN 通常更好训练,但不代表最终效果一定全面胜出,有些任务下 Post-LN 配合精细的初始化和 warmup 也能取得有竞争力的结果,这属于经验规律而非铁律。后来还出现了把归一化放在子层前后等混合变体,思路都是围绕“让梯度更好走”做文章。
对从业者的实际意义:如果你在搭深层 Transformer,遇到 loss 尖峰、不收敛、对 warmup 极度敏感,可以优先检查归一化位置,试试 Pre-LN;如果训练已经稳定,想压榨最终精度,也可以把 Post-LN 加 warmup 作为对照。对普通职场人来说,这解释了为什么大模型能堆到很深的层数——不只是参数多,更是因为残差和归一化的摆放顺序让梯度“跑得动”。具体到某个框架或模型采用哪种,以官方文档和论文说明为准。
