三种 Norm 一张图读懂:LayerNorm、RMSNorm、AdaRMS
为什么需要归一化?
训练大模型时,每一层的激活值容易忽大忽小,梯度不稳定。
归一化(Normalization) 把每个 token 的 DDD 维向量 x\mathbf{x}x 拉到合适尺度,再让网络学习如何缩放、平移。
下面三个名字最常一起出现:
| 方法 | 一句话 |
|---|---|
| LayerNorm(LN) | 先减均值,再除以标准差 |
| RMSNorm | 不减均值,除以均方的平方根 |
| AdaRMS | 分母同 RMS,缩放/平移由条件 c\mathbf{c}c 决定 |
前提
对 单个 token 的向量 x∈RD\mathbf{x} \in \mathbb{R}^Dx∈RD,在 DDD 维 内部 做统计(不跨 token、不跨 batch)。
ε\varepsilonε 为极小常数(如 10−610^{-6}10−6),防止除零。
一、LayerNorm
先 中心化(减均值),再按 标准差 缩放,最后用可学习参数 γ,β\boldsymbol{\gamma}, \boldsymbol{\beta}γ,β 做仿射变换。
μ=1D∑i=1Dxi,x^=x−μVar(x)+ε,y=γ⊙x^+β \mu = \frac{1}{D}\sum_{i=1}^{D} x_i, \qquad \hat{\mathbf{x}} = \frac{\mathbf{x} - \mu}{\sqrt{\mathrm{Var}(\mathbf{x}) + \varepsilon}}, \qquad \mathbf{y} = \boldsymbol{\gamma} \odot \hat{\mathbf{x}} + \boldsymbol{\beta} μ=D1i=1∑Dxi,x^=Var(x)+εx−μ,y=γ⊙x^+β
- 有减均值 x−μ\mathbf{x}-\mux−μ
- 分母是 Var+ε\sqrt{\mathrm{Var}+\varepsilon}Var+ε(标准差),不是方差本身
- 可学习参数约 2D2D2D 个(γ\boldsymbol{\gamma}γ 与 β\boldsymbol{\beta}β 各 DDD 维)
常见于 Transformer、ViT。
二、RMSNorm
不减均值,用各维平方的平均值 mmm 开根号作为尺度,把 x\mathbf{x}x 除过去,再可学习缩放。
m=1D∑i=1Dxi2,x^=xm+ε,y=(1+w)⊙x^ m = \frac{1}{D}\sum_{i=1}^{D} x_i^2, \qquad \hat{\mathbf{x}} = \frac{\mathbf{x}}{\sqrt{m + \varepsilon}}, \qquad \mathbf{y} = (1 + \mathbf{w}) \odot \hat{\mathbf{x}} m=D1i=1∑Dxi2,x^=m+εx,y=(1+w)⊙x^
亦有实现写 y=w⊙x^\mathbf{y} = \mathbf{w} \odot \hat{\mathbf{x}}y=w⊙x^。
正确与错误写法:
正确: x^=xm+ε错误: x^=xm+ε \boxed{ \text{正确:}\ \hat{\mathbf{x}} = \frac{\mathbf{x}}{\sqrt{m + \varepsilon}} \qquad \text{错误:}\ \hat{\mathbf{x}} = \frac{\mathbf{x}}{m + \varepsilon} } 正确: x^=m+εx错误: x^=m+εx
x⋅rsqrt(m+ε)\mathbf{x} \cdot \mathrm{rsqrt}(m+\varepsilon)x⋅rsqrt(m+ε) 与上式等价。
LLaMA、Gemma 等常用 RMSNorm,比 LayerNorm 少算一步均值,往往略快。
三、AdaRMS
去噪、流匹配等场景里,网络要在不同噪声水平 ttt 下表现不同。AdaRMS 在 每一层 用条件 c\mathbf{c}c(如时间步嵌入)调节归一化后的向量,思路类似扩散模型中的 AdaLN。
RMS 归一化(与 RMSNorm 相同):
x^=xmean(x2)+ε \hat{\mathbf{x}} = \frac{\mathbf{x}}{\sqrt{\mathrm{mean}(\mathbf{x}^2) + \varepsilon}} x^=mean(x2)+εx
条件仿射:
[s, t, g]=f(c),y=x^⊙(1+s)+t [\mathbf{s},\, \mathbf{t},\, \mathbf{g}] = f(\mathbf{c}), \qquad \mathbf{y} = \hat{\mathbf{x}} \odot (1 + \mathbf{s}) + \mathbf{t} [s,t,g]=f(c),y=x^⊙(1+s)+t
可选门控残差:
hout=hin+g⊙Sublayer(⋅) \mathbf{h}_{\mathrm{out}} = \mathbf{h}_{\mathrm{in}} + \mathbf{g} \odot \mathrm{Sublayer}(\cdot) hout=hin+g⊙Sublayer(⋅)
x^\hat{\mathbf{x}}x^ 的分母与 RMSNorm 相同;s,t\mathbf{s}, \mathbf{t}s,t 随 c\mathbf{c}c 变化,而非全局固定的 γ,β\boldsymbol{\gamma}, \boldsymbol{\beta}γ,β。
四、并排对照
LayerNorm:x^=x−μmean((x−μ)2)+ε,y=γ⊙x^+βRMSNorm:x^=xmean(x2)+ε,y=(1+w)⊙x^AdaRMS:x^=xmean(x2)+ε,y=x^⊙(1+s(c))+t(c) \begin{aligned} \textbf{LayerNorm:} \quad & \hat{\mathbf{x}} = \dfrac{\mathbf{x}-\mu}{\sqrt{\mathrm{mean}((\mathbf{x}-\mu)^2)+\varepsilon}}, \quad \mathbf{y} = \boldsymbol{\gamma}\odot\hat{\mathbf{x}}+\boldsymbol{\beta} \\[0.6em] \textbf{RMSNorm:} \quad & \hat{\mathbf{x}} = \dfrac{\mathbf{x}}{\sqrt{\mathrm{mean}(\mathbf{x}^2)+\varepsilon}}, \quad \mathbf{y} = (1+\mathbf{w})\odot\hat{\mathbf{x}} \\[0.6em] \textbf{AdaRMS:} \quad & \hat{\mathbf{x}} = \dfrac{\mathbf{x}}{\sqrt{\mathrm{mean}(\mathbf{x}^2)+\varepsilon}}, \quad \mathbf{y} = \hat{\mathbf{x}}\odot(1+\mathbf{s}(\mathbf{c}))+\mathbf{t}(\mathbf{c}) \end{aligned} LayerNorm:RMSNorm:AdaRMS:x^=mean((x−μ)2)+εx−μ,y=γ⊙x^+βx^=mean(x2)+εx,y=(1+w)⊙x^x^=mean(x2)+εx,y=x^⊙(1+s(c))+t(c)
| 减均值? | x^\hat{\mathbf{x}}x^ 分母 | 输出 | |
|---|---|---|---|
| LayerNorm | ✓ | Var+ε\sqrt{\mathrm{Var}+\varepsilon}Var+ε | γ⊙x^+β\boldsymbol{\gamma}\odot\hat{\mathbf{x}}+\boldsymbol{\beta}γ⊙x^+β |
| RMSNorm | ✗ | mean(x2)+ε\sqrt{\mathrm{mean}(\mathbf{x}^2)+\varepsilon}mean(x2)+ε | (1+w)⊙x^(1+\mathbf{w})\odot\hat{\mathbf{x}}(1+w)⊙x^ |
| AdaRMS | ✗ | 同 RMS | x^⊙(1+s)+t\hat{\mathbf{x}}\odot(1+\mathbf{s})+\mathbf{t}x^⊙(1+s)+t |
五、数值例子
设 x=[1,2,3,4]⊤\mathbf{x} = [1,2,3,4]^\topx=[1,2,3,4]⊤:
- LayerNorm:μ=2.5\mu=2.5μ=2.5,x^\hat{\mathbf{x}}x^ 大致正负对称
- RMSNorm:m=7.5m=7.5m=7.5,x^=x/7.5\hat{\mathbf{x}} = \mathbf{x}/\sqrt{7.5}x^=x/7.5,分量同向拉伸
二者 x^\hat{\mathbf{x}}x^ 不同——不仅是否减均值不同,分母用的统计量也不同。RMSNorm 并不是「不减均值的 LayerNorm」。
六、选用建议
- 经典结构、生态成熟 → LayerNorm
- 大语言模型、略省计算 → RMSNorm
- 强条件生成(时间步、类别等),希望每层注入条件 → AdaRMS(或 AdaLN)
小结
LN:x^=x−μVar(x)+ε, y=γ⊙x^+β \textbf{LN:}\quad \hat{\mathbf{x}}=\frac{\mathbf{x}-\mu}{\sqrt{\mathrm{Var}(\mathbf{x})+\varepsilon}},\; \mathbf{y}=\boldsymbol{\gamma}\odot\hat{\mathbf{x}}+\boldsymbol{\beta} LN:x^=Var(x)+εx−μ,y=γ⊙x^+β
RMS:x^=xmean(x2)+ε, y=(1+w)⊙x^ \textbf{RMS:}\quad \hat{\mathbf{x}}=\frac{\mathbf{x}}{\sqrt{\mathrm{mean}(\mathbf{x}^2)+\varepsilon}},\; \mathbf{y}=(1+\mathbf{w})\odot\hat{\mathbf{x}} RMS:x^=mean(x2)+εx,y=(1+w)⊙x^
AdaRMS:x^=xmean(x2)+ε, y=x^⊙(1+s(c))+t(c) \textbf{AdaRMS:}\quad \hat{\mathbf{x}}=\frac{\mathbf{x}}{\sqrt{\mathrm{mean}(\mathbf{x}^2)+\varepsilon}},\; \mathbf{y}=\hat{\mathbf{x}}\odot(1+\mathbf{s}(\mathbf{c}))+\mathbf{t}(\mathbf{c}) AdaRMS:x^=mean(x2)+εx,y=x^⊙(1+s(c))+t(c)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)