为什么需要归一化?

训练大模型时,每一层的激活值容易忽大忽小,梯度不稳定。
归一化(Normalization) 把每个 token 的 DDD 维向量 x\mathbf{x}x 拉到合适尺度,再让网络学习如何缩放、平移。

下面三个名字最常一起出现:

方法 一句话
LayerNorm(LN) 先减均值,再除以标准差
RMSNorm 不减均值,除以均方的平方根
AdaRMS 分母同 RMS,缩放/平移由条件 c\mathbf{c}c 决定

前提

单个 token 的向量 x∈RD\mathbf{x} \in \mathbb{R}^DxRD,在 DDD内部 做统计(不跨 token、不跨 batch)。
ε\varepsilonε 为极小常数(如 10−610^{-6}106),防止除零。


一、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=1Dxi,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=1Dxi2,x^=m+ε x,y=(1+w)x^

亦有实现写 y=w⊙x^\mathbf{y} = \mathbf{w} \odot \hat{\mathbf{x}}y=wx^

正确与错误写法:

正确: 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)xrsqrt(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+gSublayer()

x^\hat{\mathbf{x}}x^ 的分母与 RMSNorm 相同;s,t\mathbf{s}, \mathbf{t}s,tc\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.5x^\hat{\mathbf{x}}x^ 大致正负对称
  • RMSNormm=7.5m=7.5m=7.5x^=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)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐