如果说残差连接负责给深层网络留一条直路,Layer Normalization(LN)负责的就是另一件同样基础的事:别让每一层输出的数值尺度乱跑。
这件事听起来像数值细节,但在 Transformer 里它几乎是结构性组件。没有 LN,attention 分数容易变尖,FFN 激活容易飘,深层训练会变得非常敏感;而换成 BatchNorm(BN)这种在视觉里很成功的归一化,又会立刻碰到序列长度、自回归和 batch 依赖的问题。于是 Transformer 家族几乎从一开始就把 LN 当成默认答案。
这一篇就把这套逻辑拆开:LN 到底在算什么,它为什么比 BN 更适合序列模型,pre-LN 为什么改变了深层训练的手感,以及 RMSNorm 这类现代变体到底省掉了什么、保留了什么。
一、LayerNorm 到底归一化了什么
LayerNorm 是 Ba、Kiros、Hinton 在 2016 年提出的。给定某个 token 的隐藏向量:
LN 会先在这个向量内部计算均值和方差:
然后做标准化,再加可学习的缩放和平移:
其中 ,是每个维度自己的可学习参数。
1.1 它的归一化范围是“单个 token 的所有通道”
这句话值得反复强调,因为它和 BatchNorm 的差别就在这里。
对于一个形状是 [B, T, d] 的 Transformer 激活:
- LayerNorm:对每个
(b, t)独立地,沿最后一维d做归一化; - 也就是说,每个 token 都自己算一套均值和方差;
- 跟 batch 里别的样本、同一序列里别的位置都没关系。
因此 LN 的行为不依赖:
- 当前 batch size 有多大;
- 序列长度是 128 还是 8192;
- 这是训练还是推理。
这正是它特别适合 Transformer 的第一层原因。
1.2 LN 不是把信息“洗掉”,而是把尺度拉回稳定区间
有些初学者会担心:既然 LN 每次都把均值拉成 0、方差拉成 1,那原始表示里的信息是不是被抹掉了?
不会。原因有两点:
- 和 是可学习的,网络可以学会恢复或重排它需要的尺度;
- LN 主要约束的是公共偏移和整体尺度。经过中心化和缩放后,表示在绝对坐标系里的位置会变,但这不等于语义信息被直接抹掉。
换句话说,LN 不是把向量内容洗白,而是把它拉回一个更适合后续线性层和 softmax 继续工作的数值区域。
二、为什么不用 BatchNorm
从 2015 年开始,BatchNorm 几乎是深度网络训练的标配。那 Transformer 为什么一上来就没选它?
答案很简单:BN 的统计维度和序列模型的需求对不上。
2.1 BatchNorm 依赖 batch 统计
BN 对某一层某一通道,会在整个 batch 上统计均值和方差。对 [B, T, d] 的张量来说,它更像是在某些维度上跨 batch 聚合。
这在 CNN 里很好用,因为:
- 图像尺寸固定;
- batch 往往够大;
- 推理时可以用训练期累积的 running mean / variance。
但对 Transformer 来说,麻烦很快出现。
2.2 变长序列会让 BN 的统计口径很别扭
自然语言里,不同样本的长度经常不同,padding 又很多。你要是跨 batch 去统计均值方差,会立刻碰到:
- 不同位置的语义分布本来就不同;
- padding 会污染统计;
- batch 大小时,统计稳定性差别很大。
尤其是小 batch 或微调场景,BN 的统计会很抖。
2.3 自回归推理更不适合 BN
decoder-only LLM 推理时,经常是一条请求一个 batch、一步一个 token 地生成。此时:
- batch size 可能等于 1;
- 每一步前缀长度不同;
- 你很难定义稳定又合理的 batch 统计。
LN 不依赖跨样本统计,因此会避开这一类问题,因为它只看当前 token 自己的隐藏向量。
2.4 BN 会引入训练/推理不一致
BN 训练时用当前 batch 统计,推理时用 running statistics;而 LN 训练推理一模一样。这对长序列生成非常重要,因为生成时任何训练/推理分布不一致都会被 autoregressive 方式逐步放大。
所以对 Transformer 来说,LN 不是“一个可替代 BN 的选项”,而更像最自然、也最常见的默认解。
三、LN 在 Transformer 里具体放在哪里
这一点前一篇已经碰到过,但值得单独拿出来。
Transformer 里 LN 的核心分歧,不是要不要用,而是放在残差相加之前还是之后。
3.1 原论文:Post-LN
原论文的写法是:
也就是 attention / FFN 先做完,和残差相加,再统一归一化。
这套写法在 6 层翻译模型里完全能用,但当层数变深时,训练会越来越依赖 warmup、初始化和学习率配方。
3.2 现代主流:Pre-LN
现代更常见的是:
它把 LN 提前到每个子层输入,直觉上做了两件事:
- 给 attention / FFN 一个分布更稳定的输入;
- 让 residual 主路径尽可能保持直通。
3.3 梯度上的差别比前向更关键
Post-LN 和 Pre-LN 前向看起来只差一个括号位置,但反向差别很大。
在 post-LN 里,主路径梯度也必须穿过 LN 的 Jacobian;在 pre-LN 里,主路径更接近恒等映射。Xiong 等人在 2020 年对 pre-LN / post-LN 的分析,也指向了这个方向:pre-LN 通常更容易训练更深的模型。
3.4 原论文为什么还能训起来
因为它的深度不算大,只有 6 层;同时还配上了:
- 4000 步 warmup;
- 比默认更激进的 Adam 参数;
- 比较仔细的初始化与正则化。
一旦模型往更深处走,仅靠这些配方技巧就不够了,所以社区后来才逐渐转向 pre-LN。
四、LN 为什么能稳定 attention 和 FFN
把 LN 放到 Transformer 里,最直接的好处体现在两处:attention 分数和 FFN 激活。
4.1 对 attention:控制 Q/K 的尺度
attention 分数来自:
如果输入激活尺度在不同层里乱飘,那么:
- Q/K 的范数会一起飘;
- 点积会突然变大或变小;
- softmax 会过尖或过平;
- 梯度要么集中在极少数位置,要么全是噪声。
LN 的作用就是把子层输入的数值范围拉回稳定区间,让 attention score 的统计特性更可控。
4.2 对 FFN:控制激活不要一路放大
FFN 是两层大矩阵乘再加激活函数。没有 LN,某几层的激活一旦偏大,就很容易通过矩阵乘继续放大,最后出现厚尾甚至数值爆炸。
LN 不是彻底消灭这种风险,但通常会显著降低它。你可以把它看成“每次进入大算子前先做一次定标”。
4.3 LN 和 warmup 是互补关系
这也是为什么原论文虽然用了 post-LN,仍然需要 warmup。LN 提供的是局部数值稳定;warmup 解决的是训练最初几千步优化器统计不稳、参数还很随机的问题。两者不是替代关系,而是叠加关系。
下图表达的是常见现象:post-LN 往往更依赖 warmup,而不是给出一条可以直接拿去复现的统一损失曲线。
五、RMSNorm 为什么后来会流行
标准 LayerNorm 有两个步骤:
- 减均值;
- 除以标准差。
RMSNorm(Root Mean Square Layer Normalization)把第一步去掉了,只保留按均方根缩放:
5.1 它少掉了什么
RMSNorm 不再显式把均值拉成 0,所以没有 这一项,也不需要计算中心化后的方差。它保留的是“控制整体幅值”,去掉的是“强制中心化”。
5.2 为什么这在实践里经常够用
不少工作和工程实践都表明,对 Transformer 来说,真正关键的往往是把激活的尺度控制住,而不是一定要把均值也严格移到 0。既然如此,RMSNorm 就提供了一个更轻、更简单、数值上也常常够好的替代。
5.3 它为什么特别受 decoder-only LLM 欢迎
原因主要有三个:
- 计算更省一点;
- 实现更简单;
- 在不少 decoder-only LLM 里,效果损失通常很小。
以 LLaMA 系列为代表,不少现代 decoder-only LLM 采用了 RMSNorm 或其近亲变体;Mistral、Qwen 等开源模型也延续了这一路线。
5.4 这不意味着 LN 过时
标准 LN 在 encoder、视觉 Transformer、很多多模态模型里仍然非常常见。RMSNorm 的流行更像是“在某类大模型和工程约束下,一个更省的近似已经足够好”,而不是 LN 被完全淘汰。
六、几个工程上很容易踩的坑
6.1 低精度训练时常用更高精度算 norm
即使模型主体用 FP16 或 BF16,很多实现也会在算均值、方差时临时转成 FP32,再把结果 cast 回去。原因很简单:归一化的统计量对精度比较敏感,尤其是长链路训练时,微小误差会逐层积累。
6.2 LN 不是“哪里不稳就加哪里”
Transformer 里的 LN 放置位置是整体设计的一部分,不是可以随手乱插的补丁。随便多加几层 LN,可能会让主路径被过度打断,反而损失表达力。
七、几个常见误解
7.1 “LN 就是把每一层输出压成均值 0、方差 1,所以会损失表达力”
不对。LN 后面还有可学习的 、,而且它不会因为一次中心化和缩放就自动把语义信息抹平。它限制的是无约束漂移,不是把表示洗白。
7.2 “BN 比 LN 更强,只是 Transformer 没跟上”
不是“谁更强”的问题,而是谁和序列建模的统计结构更匹配。BN 很适合大 batch 图像模型;LN 更适合变长序列和自回归推理。
7.3 “Pre-LN 只是实现习惯差异”
也不对。它直接改变了残差主路径的梯度性质,所以会显著影响深层训练稳定性。
7.4 “RMSNorm 就是更便宜的 LN,因此总是更好”
不是。它只是很多场景下足够好,而且更省。是否更合适,还取决于架构、任务和训练配方。
7.5 “有了 LN 就不需要 warmup”
错。LN 和 warmup 解决的是不同层面的问题:一个管激活分布,一个管训练初期优化动态。
八、结语
LayerNorm 在 Transformer 里的地位,和卷积网络里的 BatchNorm 有点像:平时画图时一笔带过,但没有它,整个训练配方都要重新写。它真正提供的,不是抽象的“稳定性”三个字,而是更具体的东西:对子层输入做局部定标、让 attention 和 FFN 的数值分布保持可控、配合残差把深层优化问题压到一个可训的范围里。
从原论文的 post-LN,到今天大模型广泛采用的 pre-LN 和 RMSNorm,这条演化线说明的不是“归一化这件事有没有用”,而是“在深层 Transformer 里,归一化该以什么姿态出现”。下一篇我们回到原论文主线,看看这些结构和训练配方最终在实验结果上换来了什么。
九、参考文献
- Ba, J. L., Kiros, J. R., Hinton, G. E. "Layer Normalization." arXiv:1607.06450, 2016. LN 的原始提出。
- Ioffe, S., Szegedy, C. "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift." ICML 2015. BN 的原始提出,用来和 LN 对照。
- Vaswani, A. et al. "Attention Is All You Need." NeurIPS 2017. Transformer 中 LN 的标准用法。
- Xiong, R. et al. "On Layer Normalization in the Transformer Architecture." ICML 2020. 分析 pre-LN / post-LN 的优化差异。
- Zhang, B., Sennrich, R. "Root Mean Square Layer Normalization." NeurIPS 2019 Workshop. RMSNorm 的代表性工作。
- Wang, S. et al. "DeepNet: Scaling Transformers to 1,000 Layers." IEEE TPAMI 2024. 深层 Transformer 中 norm 与 residual 的协同设计。