RMSNorm:无均值归一,LLaMA 系默认

均方根归一化(Root Mean Square Layer Normalization,RMSNorm) 只按向量的均方根(RMS) 缩放,不减均值,多数实现没有 (\beta),只留可学习 (\gamma)。Zhang & Sennrich(2019)认为 LN 的收益主要来自重缩放而非重定心。LLaMA、Qwen、Gemma、Mistral 等现代 Decoder 用它替换 LN。

段末注释:RMS 即 (\sqrt{\mathrm{mean}(x^2)}),刻画能量/模长,不含「离均值多远」。后文 RMSNorm 不缩写。

系列导读5050.大模型-算法要点-0


1. 作用

与 LN 相同的宏观目标:稳住激活尺度,让深层残差可训。差别是更便宜、少两个统计量:

相对 LN RMSNorm 的取舍
更快 不算 (\mu),少一次减法和方差展开;论文报约 7%–64% 加速(视实现)
更少参数 通常只有 (\gamma),无 (\beta)
表达 不强制零均值;对许多 LLM 任务足够

选 RMSNorm 几乎总是架构默认跟着底座(要复现 LLaMA 就不要改回 LN),不是微调旋钮。


2. 功能 / 机制

[
\mathrm{RMS}(\mathbf{x})=\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^{2}+\varepsilon},\qquad
\mathrm{RMSNorm}(\mathbf{x})=\boldsymbol{\gamma}\odot\frac{\mathbf{x}}{\mathrm{RMS}(\mathbf{x})}
]

训练与推理同一公式。PyTorch 无同名官方层,社区用 LlamaRMSNorm 一类实现:x * torch.rsqrt(x.pow(2).mean(-1)+eps) * weight

图 1 只量 RMS、用 \(\gamma\) 缩放;不做 \(\mu\)、不做 \(\beta\)

现代 Decoder 几乎都是 Pre-RMSNorm

[
\mathbf{h}\leftarrow \mathbf{h}+\mathrm{Sub}\big(\mathrm{RMSNorm}(\mathbf{h})\big)
]

层末再来一次 RMSNorm 才进 LM head(LLaMA 的 final_norm)。


3. 默认经验值

常见值 备注
(\varepsilon) (10^{-5})~(10^{-6}) HuggingFace LlamaConfig.rms_norm_eps 默认 (10^{-6});Llama-2 部分尺寸用 (10^{-5})。训推必须一致
(\gamma) 可学习,init (1) 勿 init 成 (0),首步输出会塌
(\beta) 手写时不要多加 bias
Dropout LLaMA 预训练常 0 与「用 RMSNorm」是两件事

FP16 若出现 0-RMS 行,可把 (\varepsilon) 略提到 (10^{-5});不要和权重文件里的值拧着来。


4. 整体应用

  • 架构:替换每处 LN;位置仍是 Pre-Norm + 末层 Norm。
  • 训练:(\gamma) 参与梯度;weight decay 通常排除 norm 的 (\gamma)。
  • 推理:无开关;vLLM / llama.cpp 必须读同一 rms_norm_eps,否则长生成会漂。

HuggingFace:rms_norm_eps


5. 使用案例

LLaMA 1/2/3:Pre-RMSNorm,AdamW,预训练无 Dropout。
Qwen / Mistral / Gemma:同族选择。
T5 / Gopher 等:较早把 RMSNorm 带进 Encoder–Decoder。
ProteinMPNN / BERT / GPT-2:仍是 LN,不要按 LLaMA 改 (\varepsilon) 名。


6. 易混对照

名称 差在哪
LayerNorm 减 (\mu)、除 (\sigma)、有 (\beta);见本系列 02
Weight decay 惩罚 (W),不改激活归一
ε 与学习率 (\varepsilon) 是除零垫,不是步长

参考

  • Zhang & Sennrich, Root Mean Square Layer Normalization, 2019.
  • Touvron et al., LLaMA / LLaMA 2。
  • 实现:HuggingFace LlamaRMSNorm;配置字段 rms_norm_eps
-------------本文结束感谢您的阅读-------------