2019 年之后训出来的大模型,归一化层几乎清一色是 RMSNorm:LLaMA、Qwen、Gemma、DeepSeek 都是。LayerNorm 的两个操作(减均值、除标准差),RMSNorm 砍掉了前者,只保留缩放。这篇文章讨论一个自然的问题:减均值这一步为什么可以扔?答案不在实验表格里,而在两个归一化各自对什么样的变换不敏感。
两个公式并排看
给定向量 $x\in\mathbb{R}^d$,LayerNorm 是
$$ \mathrm{LN}(x) = \frac{x-\mu}{\sqrt{\sigma^2+\varepsilon}}\odot g,\qquad \mu=\frac{1}{d}\sum_i x_i,\quad \sigma^2=\frac{1}{d}\sum_i (x_i-\mu)^2, $$
RMSNorm 是
$$ \mathrm{RMS}(x) = \frac{x}{\sqrt{\frac{1}{d}\sum_i x_i^2+\varepsilon}}\odot g, $$
其中 $g$ 是可学习的逐通道增益。差别一目了然:LayerNorm 先把数据中心化再标准化,RMSNorm 直接用均方根(RMS)做尺度归一。
不变性分析:各自对什么变换免疫
判断一个归一化"保留了什么、扔掉了什么",最锋利的工具是看它对哪些变换不变。对 LayerNorm,任意平移 $x \mapsto x + c\mathbf{1}$($\mathbf{1}$ 是全一向量)不改变输出,因为均值 $\mu$ 恰好吸收掉 $c$;任意缩放 $x\mapsto ax$($a>0$)也被方差除法抵消。所以 LayerNorm 的输出只依赖于 $x$ 在去掉"均值方向"后的方向——它把向量投影到与 $\mathbf{1}$ 正交的子空间再归一化。
RMSNorm 只对缩放 $x\mapsto ax$ 不变,对平移敏感。问题来了:Transformer 的残差流里,"均值方向"携带有效信息吗?
这里有一个结构性观察。残差连接 $x \leftarrow x + f(x)$ 让信息沿同一向量不断累加,经过几十层之后,$x$ 的各通道均值往往累积出一个很大的公共偏移——这个偏移很大程度上是深度累积的副产品,是"噪声性的常量",而不是逐 token 的判别性信息。LayerNorm 每层都要花计算量把它减掉;RMSNorm 的立场则是:这个偏移本来就不重要,不值得专门消掉,缩放归一已经足以稳定训练。Zhang & Sennrich(2019)提出 RMSNorm 时的假设正是缩放不变性才是 LayerNorm 有效的核心,均值归一的贡献很小,他们给的实验显示性能持平、速度提升约 7%~64%(取决实现与硬件)。
我自己的实测经验与此一致:在小规模 GPT 复现里把 LN 换成 RMSNorm,loss 曲线几乎重合,每步耗时下降肉眼可见。省下的不只是减法本身,还有均值计算带来的一次全向量归约(reduce),在 kernel 层面少一遍数据遍历。
从工程实现再多说一层。LayerNorm 需要两遍统计:先归约出均值,再归约出方差(Welford 可以合并成一遍,但仍要维护两个累加器);RMSNorm 只需要归约平方和一个累加器,一次数据遍历即可完成。在 Tensor Core 打满、归一化成为访存瓶颈的小 batch 推理场景,这一遍之差就是实测吞吐的几个百分点。$\varepsilon$ 的取值两者也有微妙差别:RMSNorm 的 $\varepsilon$ 直接垫在均方上,残差流范数本身就大的场景下它几乎不起作用;LayerNorm 的 $\varepsilon$ 垫在方差上,遇到近似常量的输入(均值主导)时分母可以很小,$\varepsilon$ 才真正被用到。这也从侧面说明:RMSNorm 放弃处理的"均值主导"情形,恰恰是 LN 里最依赖 $\varepsilon$ 保护的病态情形。
梯度视角:RMSNorm 同样能稳住尺度
归一化的深层价值在反向传播。看 RMSNorm 的雅可比(先忽略 $\varepsilon$ 与 $g$),记 $r = \sqrt{\frac{1}{d}\|x\|^2}$,$\hat x = x/r$,则
$$ \frac{\partial \hat x}{\partial x} = \frac{1}{r}\left(I - \hat x \hat x^\top\right). $$
括号里是向 $\hat x$ 正交补空间的投影矩阵——这意味着梯度在回传时被自动去掉了沿 $\hat x$ 方向的分量,参数更新不会改变已归一化向量的方向,只调"内容"。这与 LayerNorm 的机制同构(LN 的雅可比多一项均值方向的投影),同样带来尺度解耦:$\|x\|$ 的增长被 $1/r$ 因子抵消,残差流范数膨胀时梯度自动收缩,深层网络的更新幅度因此稳定。RMSNorm 保留了这套稳定机制的主体,省掉的只是沿 $\mathbf{1}$ 方向的投影。
增益 $g$ 的梯度,与权重衰减的隐藏耦合
把 $g$ 补回来看完整梯度。记上游梯度 $\delta=\partial\ell/\partial\hat y$($\hat y=\hat x\odot g$),则
$$ \frac{\partial\ell}{\partial g} = \delta\odot\hat x,\qquad \frac{\partial\ell}{\partial x} = \frac{1}{r}\big(I-\hat x\hat x^\top\big)(g\odot\delta). $$
第一式说明 $g$ 学到的是"上游误差与归一化输入的逐通道相关性"——哪些通道该放大、哪些该压掉完全由数据决定,这也是 RMSNorm 放弃均值归零后、网络仍能自行利用那个自由度的机制。第二式里 $g$ 出现在梯度内部:增益越大,回传给 $x$ 的梯度越大。
这里藏着一个反直觉的耦合。RMSNorm 对缩放不变,意味着把 $g$ 整体乘以 $a$、输出也放大 $a$ 倍,而下一层的归一化会把这个 $a$ 再吃掉——所以 $\|g\|$ 几乎不改变前向行为,却线性地放大有效学习率。于是作用在 $g$ 上的权重衰减,名义上是正则,实际效果是调步长:WD 把 $\|g\|$ 往下拉,有效学习率跟着收缩。这个"尺度不变参数 + WD = 隐式学习率调度"的现象在 weight norm 的文献里有完整分析,它也解释了为什么带归一化的网络对 weight decay 系数异常敏感——你以为在调正则强度,其实在动学习率。
一个诚实的提醒:RMSNorm 不是严格等价
均值信息被保留,意味着 RMSNorm 的输出空间比 LayerNorm 大一个维度。理论上这让模型可以把信息编码进"公共偏移"里,多一条信息通道;实际上也带来了轻微的理论风险——比如各层输出均值协同漂移。主流模型选择 RMSNorm,说明实践中这个风险不构成问题,$g$ 参数足以让网络自行学会利用或压制这个自由度。工程选择的逻辑从来不是"哪个更优雅",而是"哪个在同等效果下更便宜"。
与 pre-LN 的配套关系
RMSNorm 几乎从不单独出现,它总是和 pre-LN 架构绑定:归一化放在残差分支内部($x + f(\mathrm{RMS}(x))$),残差主干上不做任何归一。这个组合有明确的分工——pre-LN 保证残差流本身是恒等通路,梯度沿主干无损回传;RMSNorm 在分支入口把输入尺度钉住,防止几十层累加后分支看到越来越大的输入。如果反过来用 post-LN(归一化在主干上),RMSNorm 对缩放的不变性会让主干范数的控制变得别扭:缩放被每层归一化重置,深层信号衰减的问题比 LayerNorm 版更严重。架构选型里"LLaMA 式 = pre-LN + RMSNorm + SwiGLU + RoPE"之所以成为事实标准,正是因为这几个组件在梯度流和尺度稳定性上互相咬合,换掉任何一个都要重新验证其余部分。
小结
LayerNorm = 去均值 + 缩放归一,对平移和缩放都不变;RMSNorm = 只做缩放归一,赌的是"均值方向不携带关键信息"。从雅可比看,两者的梯度稳定机制同构,RMSNorm 只少一项投影。这场简化能成立,根本上是因为 Transformer 的残差结构里均值偏移更像深度累积的副产品而非信号。归一化设计的启发在于:先想清楚你的表示里哪些自由度是噪声,然后把归一化设计成恰好对它们不敏感——而不是把所有能归的都归一化掉。