如果说残差连接负责给深层网络留一条直路,Layer Normalization(LN)负责的就是另一件同样基础的事:别让每一层输出的数值尺度乱跑。
这件事听起来像数值细节,但在 Transformer 里它几乎是结构性组件。没有 LN,attention 分数容易变尖,FFN 激活容易飘,深层训练会变得非常敏感;而换成 BatchNorm(BN)这种在视觉里很成功的归一化,又会立刻碰到序列长度、自回归和 batch 依赖的问题。于是 Transformer 家族几乎从一开始就把 LN 当成默认答案。
这一篇就把这套逻辑讲透:LN 到底在算什么,它为什么比 BN 更适合序列模型,pre-LN 为什么改变了深层训练的手感,以及 RMSNorm 这类现代变体到底省掉了什么、保留了什么。
一、LayerNorm 到底归一化了什么
LayerNorm 是 Ba、Kiros、Hinton 在 2016 年提出的。给定某个 token 的隐藏向量:
\[ x = [x_1, x_2, \dots, x_d] \]
LN 会先在这个向量内部计算均值和方差:
\[ \mu = \frac{1}{d} \sum_{i=1}^{d} x_i, \qquad \sigma^2 = \frac{1}{d} \sum_{i=1}^{d} (x_i - \mu)^2 \]
然后做标准化,再加可学习的缩放和平移:
\[ \operatorname{LN}(x)_i = \gamma_i \frac{x_i - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta_i \]
其中 \(\gamma, \beta \in \mathbb{R}^d\),是每个维度自己的可学习参数。
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,那原始表示里的信息是不是被抹掉了?
不会。原因有两点:
- \(\gamma\) 和 \(\beta\) 是可学习的,网络可以学会恢复或重排它需要的尺度;
- 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
原论文的写法是:
\[ \begin{aligned} h' &= \operatorname{LN}(x + \operatorname{MHA}(x)) \\ y &= \operatorname{LN}(h' + \operatorname{FFN}(h')) \end{aligned} \]
也就是 attention / FFN 先做完,和残差相加,再统一归一化。
这套写法在 6 层翻译模型里完全能用,但当层数变深时,训练会越来越依赖 warmup、初始化和学习率配方。
3.2 现代主流:Pre-LN
现代更常见的是:
\[ \begin{aligned} h' &= x + \operatorname{MHA}(\operatorname{LN}(x)) \\ y &= h' + \operatorname{FFN}(\operatorname{LN}(h')) \end{aligned} \]
它把 LN 提前到每个子层输入,直觉上做了两件事:
- 给 attention / FFN 一个分布更稳定的输入;
- 让 residual 主路径尽可能保持直通。
3.3 梯度上的差别比前向更关键
Post-LN 和 Pre-LN 前向看起来只差一个括号位置,但反向差别很大。
在 post-LN 里,主路径梯度也必须穿过 LN 的 Jacobian;在 pre-LN 里,主路径更接近恒等映射。这就是为什么 pre-LN 通常更容易训深层模型。
3.4 原论文为什么还能训起来
因为它的深度不算大,只有 6 层;同时配上了:
- 4000 步 warmup;
- 比默认更激进的 Adam 参数;
- 比较仔细的初始化与正则化。
一旦模型往更深处走,仅靠这些配方技巧就不够了,所以社区后来才逐渐转向 pre-LN。
四、LN 为什么能稳定 attention 和 FFN
把 LN 放到 Transformer 里,最直接的好处体现在两处:attention 分数和 FFN 激活。
4.1 对 attention:控制 Q/K 的尺度
attention 分数来自:
\[ \frac{QK^\top}{\sqrt{d_k}} \]
如果输入激活尺度在不同层里乱飘,那么:
- Q/K 的范数会一起飘;
- 点积会突然变大或变小;
- softmax 会过尖或过平;
- 梯度要么集中在极少数位置,要么全是噪声。
LN 的作用就是把子层输入的数值范围拉回稳定区间,让 attention score 的统计特性更可控。
4.2 对 FFN:控制激活不要一路放大
FFN 是两层大矩阵乘再加激活函数。没有 LN,某几层的激活一旦偏大,就很容易通过矩阵乘继续放大,最后出现厚尾甚至数值爆炸。
LN 不是彻底消灭这种风险,但会显著降低它。你可以把它看成“每次进入大算子前先做一次定标”。
4.3 LN 和 warmup 是互补关系
这也是为什么原论文虽然用了 post-LN,仍然需要 warmup。LN 提供的是局部数值稳定;warmup 解决的是训练最初几千步优化器统计不稳、参数还很随机的问题。两者不是替代关系,而是叠加关系。
五、RMSNorm 为什么后来会流行
标准 LayerNorm 有两个步骤:
- 减均值;
- 除以标准差。
RMSNorm(Root Mean Square Layer Normalization)把第一步去掉了,只保留按均方根缩放:
\[ \operatorname{RMSNorm}(x)_i = \gamma_i \frac{x_i}{\sqrt{\frac{1}{d}\sum_{j=1}^{d} x_j^2 + \epsilon}} \]
5.1 它少掉了什么
RMSNorm 不再显式把均值拉成 0,所以没有 \(\beta\) 这一项,也不需要计算中心化后的方差。它保留的是“控制整体幅值”,去掉的是“强制中心化”。
5.2 为什么这在实践里经常够用
很多大模型实验发现,对 Transformer 来说,真正关键的往往是把激活的尺度控制住,而不是一定要把均值也严格移到 0。既然如此,RMSNorm 就提供了一个更轻、更简单、数值上也常常够好的替代。
5.3 它为什么特别受 decoder-only LLM 欢迎
原因主要有三个:
- 计算更省一点;
- 实现更简单;
- 在大模型里通常几乎不掉效果。
LLaMA、Mistral、Qwen 等很多现代 LLM 都用了 RMSNorm 或者它的变体。
5.4 这不意味着 LN 过时
标准 LN 在 encoder、视觉 Transformer、很多多模态模型里仍然非常常见。RMSNorm 的流行更像是“在某类大模型和工程约束下,一个更省的近似已经足够好”,而不是 LN 被完全淘汰。
六、几个工程上很容易踩的坑
6.1 epsilon 不是随便填的
LN 里那个 \(\epsilon\)
是为了防止除零,但它也会影响数值稳定性。设得太大,归一化会变钝;设得太小,低精度训练时容易出问题。不同框架和模型常见设置包括
1e-5、1e-6。
6.2 低精度训练时常用更高精度算 norm
即使模型主体用 FP16 或 BF16,很多实现也会在算均值、方差时临时转成 FP32,再把结果 cast 回去。原因很简单:归一化的统计量对精度比较敏感,尤其是长链路训练时,微小误差会逐层积累。
6.3 LN 不是“哪里不稳就加哪里”
Transformer 里的 LN 放置位置是整体设计的一部分,不是可以随手乱插的补丁。随便多加几层 LN,可能会让主路径被过度打断,反而损失表达力。
6.4 微调时是否训练 LN 参数,也会影响手感
在 LoRA、Adapter、BitFit 这类参数高效微调里,有人会选择:
- 冻结 LN 参数;
- 或者只解冻 LN 和 bias;
- 或者把 LN 一并训练。
这不是纯实现细节,因为 LN 的 \(\gamma/\beta\) 直接影响每层激活分布,改它们往往会带来很强的全局效应。
七、几个常见误解
7.1 “LN 就是把每一层输出压成均值 0、方差 1,所以会损失表达力”
不对。LN 后面还有可学习的 \(\gamma\)、\(\beta\),而且它保留了向量内部的相对结构。它限制的是无约束漂移,不是把语义抹平。
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 的协同设计。
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Transformer 与注意力机制】24|残差连接:为什么深层网络必须留一条直路
从 ResNet 的核心思想出发,讲清 Transformer 里残差连接真正解决的不是“信息保留”这种空泛说法,而是优化路径、梯度传播和迭代修正。顺带说明为什么 pre-norm 能训得更深、为什么现代大模型会讨论 residual scaling,以及 residual stream 为什么是理解大模型机制的关键对象。
【Transformer 与注意力机制】38|GPT 系列:从 GPT-1 到 GPT-4 的路线演进
GPT 路线的关键不是某个模型名字,而是 Decoder-only Transformer、next-token prediction、规模扩展、上下文学习、指令微调和人类反馈逐步合流。本文从 GPT-1 讲到 GPT-4,只使用公开可确认信息,解释为什么自回归语言模型最终成为大语言模型时代的主线。
【Transformer 与注意力机制】39|T5:把所有 NLP 任务统一成 Text-to-Text
T5 的核心不是又发明了一种 Transformer,而是把翻译、摘要、分类、问答都改写成“输入文本到输出文本”的统一格式。本文解释 T5 为什么选择 Encoder-Decoder 架构,span corruption 和 BERT/GPT 的目标有什么差异,C4 和系统化消融实验为什么让 T5 成为迁移学习路线的重要基准。
【Transformer 与注意力机制】40|三大路线之争:为什么大模型几乎都是 Decoder-only
Transformer 不是只有一种形态。Encoder-only、Encoder-Decoder、Decoder-only 分别对应理解、条件生成和自回归生成三类信息流。本文横向比较 BERT、T5、GPT 代表的三条路线,解释为什么通用大模型时代 Decoder-only 占主流,以及为什么这不意味着另外两条路线失去价值。