Transformer 架构

归一化:BatchNorm / LayerNorm / RMSNorm 与 Pre-LN

归一化用来稳定训练、加速收敛。NLP/LLM 主流从 BatchNorm 转向 LayerNorm,再到更省计算的 RMSNorm,并把位置从残差后挪到残差前(Pre-LN)。本文一次理清。

一句话回答

归一化把神经元激活拉回稳定分布,防止梯度爆炸/消失、加速收敛。LLM 时代主线是:BatchNorm(不适合序列) → LayerNorm(按特征维) → RMSNorm(去掉均值中心,更省);位置普遍用 Pre-LN(放残差之前更稳)。

BatchNorm 为什么不适合 NLP

BN 在一个 batch 内、跨样本对同一个特征维度求均值方差。问题:

结论:CV 里 BN 很香,但序列模型几乎不用 BN,改用 LayerNorm(只在一个样本内部、跨特征维归一化,与 batch 无关)。

LayerNorm:按特征维归一化

对单个样本的整条隐藏向量(d 维)求均值 μ 和方差 σ²,再标准化、缩放平移:

x̂ = (x − μ) / √(σ² + ε)    y = γ ⊙ x̂ + β
BN:跨 batch 同一特征维归一化(不适合序列) 样本1 ●  样本2 ●  样本3 ●  ← 横向聚合 LN:单样本内跨特征维归一化(与 batch 无关) [x₁ x₂ x₃ … x_d] → 自身求 μ,σ 每个样本独立归一
优点:与 batch 大小无关、推理一致、适合变长序列。BERT、GPT-2、原始 Transformer 都用 LN。

RMSNorm:LLM 的主流

RMSNorm(Zhang 2019,被 Llama、Qwen、GPT-J 等采用)发现:LayerNorm 里的均值中心化(减 μ)收益不大,于是去掉它,只除以均方根 RMS:

RMS(x) = √( (1/d)·Σ xᵢ² + ε )    x̂ = x / RMS(x)    y = γ ⊙ x̂
收益:少算一次均值和一次减法,计算更省、数值更稳,在超大模型上积少成多。质量与 LN 基本持平,所以成为 LLM 默认。

Pre-LN vs Post-LN

归一化放在残差连接的里面还是外面,影响训练稳定性:

Post-LN(原版)
输出 = x + Sublayer(LN(x))。深层易梯度消失,需要精细 warmup、学习率调度。
Pre-LN(主流)
输出 = x + Sublayer(x),内部先 LN。梯度路径更直,训练更稳,几乎不需 warmup。
Post-LN: x → LN → Sub → +x [ LN ]→[ Sub ]→(+)→ x Pre-LN: LN(x) → Sub → +x x→[ LN ]→[ Sub ]→(+)→ x Pre-LN 让梯度能「直连」流过残差,深层不崩
现代 LLM 几乎都用 Pre-LN + RMSNorm 组合。

对比一览

方法归一化维度减均值?依赖 batch?典型使用
BatchNorm跨样本同特征是强依赖CV(非序列)
LayerNorm单样本内特征是否BERT / 原版 Transformer
RMSNorm单样本内特征否否Llama / Qwen / GPT-J
位置结论:Pre-LN 比 Post-LN 训练更稳,现代 LLM = Pre-LN + RMSNorm。

总结