07. LayerNorm 和 RMSNorm 有什么区别?为什么现代大模型偏好 RMSNorm?

整理 LayerNorm 与 RMSNorm 的差异及大模型中的选择。

简单回答

LayerNorm 做两步:减均值(centering)+ 除标准差(scaling),而 RMSNorm 省掉了减均值那一步,只用均方根(RMS)做 scaling。实验表明减均值对性能贡献很小,但计算开销不可忽略,所以大模型普遍用 RMSNorm 来降低归一化的计算成本,同时效果基本不损失。

详细解释

LayerNorm 回顾

LayerNorm 的计算公式:

其中 是均值, 是方差, 是可学习的缩放和偏移参数, 是防止除零的小常数。

它做了两件事:re-centering(减均值,让分布以 0 为中心)和 re-scaling(除标准差,让分布方差为 1)。这样做的目的是稳定中间层的激活值分布,避免训练过程中分布漂移(internal covariate shift)。

从计算角度看,LayerNorm 需要对每个 token 的隐层向量做两次 reduce 操作:第一次算均值(求和再除以维度),第二次算方差(求差的平方和再除以维度)。然后做两次 element-wise 操作:减均值、除标准差。加上 γ 和 β 的缩放和偏移,总共涉及多步运算。

RMSNorm 的简化

RMSNorm(Root Mean Square Layer Normalization)的公式:

对比 LayerNorm,RMSNorm 做了两个简化:第一,去掉了减均值这一步(re-centering),直接用 RMS 做缩放;第二,去掉了偏移参数 β,只保留缩放参数 γ。

Zhang & Sennrich 在 2019 年的论文中通过消融实验证明:LayerNorm 的效果主要来自 re-scaling 操作,re-centering 对最终性能的贡献很小。既然贡献小,就可以安全地省掉。

计算效率的差异

从 GPU kernel 的角度看,RMSNorm 相比 LayerNorm 省了什么?省了一次 reduce 操作(计算均值的那次求和)和一次 element-wise 操作(减均值)。

单看一个 Norm 层,这个节省不大。但大模型里 Norm 的调用频率非常高——每一层有两个 sub-layer(Attention 和 FFN),每个 sub-layer 前面都有一个 Norm(Pre-Norm 架构),一个 72 层的模型就有 144 个 Norm 操作。在训练和推理中,Norm 层的总计算开销不容忽视。

另外从 kernel fusion 的角度,RMSNorm 的计算更简单,更容易和前后的操作 fuse 成一个高效的 kernel。

为什么现代大模型偏好 RMSNorm?

总结下来就是两点:效果不损失(大量模型验证),计算更高效(少一次 reduce 和一次减法)。LLaMA、Qwen、Mistral、DeepSeek 等主流模型全部使用 RMSNorm。

此外,现代大模型普遍把偏置项(bias)也去掉了——不仅 RMSNorm 里没有 β,连 Attention 和 FFN 的线性层里的 bias 也去掉了(如 LLaMA、PaLM)。原因类似:bias 对性能贡献很小,但增加参数和计算。

Pre-Norm vs Post-Norm

和 RMSNorm 经常一起讨论的是 Norm 的位置。原始 Transformer 用 Post-Norm(先做 Attention/FFN,再 Norm),现代大模型用 Pre-Norm(先 Norm,再做 Attention/FFN)。

Post-Norm 的残差连接不是 ,而是 。Pre-Norm 是

Pre-Norm 的优势在于梯度流更稳定。因为残差连接中有一条直接通路(identity path),梯度可以直接从深层传回浅层,不需要经过 Norm。这让深层模型训练更稳定,learning rate 的容忍度更高。Post-Norm 在深层模型中容易出现梯度爆炸/消失。

不过有研究指出 Post-Norm 在训练充分的情况下最终效果可能更好(DeepNorm 就是试图结合两者优点的方案),但工程上 Pre-Norm 的训练稳定性优势太大了,所以几乎所有大模型都用 Pre-Norm。

面试时可以这样答

LayerNorm 有两步操作:先减均值做 centering,再除标准差做 scaling。RMSNorm 的改进很直接——把减均值那步去掉了,只保留用均方根做 scaling,同时也去掉了 bias 参数。原论文做了消融实验证明,centering 对性能的贡献很小。

在大模型场景下,这个简化价值很大。一个 70 多层的模型有 144 个 Norm 层,每个 Norm 省一次 reduce 操作和一次减法,累积起来的开销不小。而且 RMSNorm 计算更简单,更容易做 kernel fusion 优化。LLaMA、Qwen 这些模型实际验证下来效果和 LayerNorm 基本没差别。

顺带提一下 Norm 位置的选择,现在大模型基本都用 Pre-Norm,就是先 Norm 再过 Attention 和 FFN,这样残差连接里有一条 identity path,梯度可以直接从深层传回浅层,训练更稳定。Post-Norm 理论上最终效果可能更好,但训练太难了,实际中基本不用了。

另外现代大模型的一个趋势是全面去 bias——不仅 RMSNorm 没有 β,连线性层的 bias 也去掉了,因为贡献小但增加参数和计算。

常见追问

  1. Pre-Norm 和 Post-Norm 在训练动态上的本质区别是什么?为什么 Pre-Norm 更容易训练?
  2. DeepNorm 是什么?它怎么尝试结合 Pre-Norm 和 Post-Norm 的优点?
  3. 如果完全去掉 Norm 层,模型会发生什么?Norm 在训练中到底起什么作用?