← 返回题目列表

LayerNorm 和 RMSNorm 有什么区别?Pre-LN 和 Post-LN 呢?

高频 中等 第 5 / 25 题 更新于 2026/09/18
LayerNormRMSNormPre-LN归一化

简化版

LayerNorm 和 RMSNorm 都是对单个 token 的特征向量做归一化,稳定训练:

  • LayerNorm 先减均值、再除标准差,带缩放 γ 和偏移 β。
  • RMSNorm 省掉「减均值」和「偏移 β」,只用均方根(RMS) 缩放,计算更省、效果相当,是 Llama 等现代大模型的选择。

Pre-LN 和 Post-LN 指归一化放在残差块的哪个位置:

  • Post-LN(原始 Transformer):归一化放在残差相加之后,深层难训、需要学习率预热。
  • Pre-LN:归一化放在子层之前(残差支路内),梯度更稳、易训深,是当代大模型的默认选择。

详细版

为什么要归一化

深层网络里,各层激活的分布会漂移(尺度忽大忽小),导致梯度不稳、训练困难。归一化把每层特征拉回一个稳定的分布,让训练更平稳、能堆更深。

LayerNorm(Layer Normalization)

LN(x) = γ ⊙ (x − μ) / √(σ² + ε) + β
μ = mean(x),  σ² = var(x)   # 在特征维度上统计
  • 每个 token 的特征向量独立归一化(与 batch 无关,适合变长序列)。
  • 有两组可学习参数:缩放 γ、偏移 β。

RMSNorm(Root Mean Square Norm)

RMSNorm(x) = γ ⊙ x / RMS(x),   RMS(x) = √(mean(x²) + ε)
  • 不减均值、不加偏移,只用 RMS 缩放,只保留 γ。
  • 计算量更小(省了求均值和中心化),实验证明质量与 LayerNorm 相当甚至更好,因此被 Llama、T5、Qwen 等广泛采用。

Pre-LN vs Post-LN

Post-LN(原始)Pre-LN(现代)
结构x + Sublayer(x) 后再 LNx + Sublayer(LN(x))
深层训练难,梯度易爆/消失稳,可训很深
学习率预热强依赖依赖弱
最终性能调好时可能略高稳定、主流

完整版教学

一、归一化到底在解决什么问题

训练深层网络时,一个老大难是内部协变量偏移 / 激活尺度失控:随着层数加深,激活值的均值和方差会不断漂移,某些层输出爆炸、某些层趋近于零,梯度随之不稳,网络又难训又难深。

归一化的作用是在每一层把特征拉回一个受控的分布(零均值、单位方差附近),让后续计算站在稳定的数值基础上。这样梯度传播更顺畅,可以用更大的学习率、堆更多的层。Transformer 里归一化是标配,位置和形式的选择直接影响能不能训好一个几十上百层的大模型。

二、为什么 Transformer 用 LayerNorm 而不是 BatchNorm

CNN 里常用 BatchNorm(按 batch 统计每个通道的均值方差),但 Transformer 用 LayerNorm,原因关键:

  • 序列变长、batch 内不齐:NLP 的序列长度不一,BatchNorm 跨样本、跨位置统计不稳定;LayerNorm 只在单个 token 自己的特征维上统计,与 batch 大小、序列长度无关。
  • 推理与训练一致:BatchNorm 训练/推理行为不同(要维护running统计),LayerNorm 没这个问题,逐样本即时计算。
  • 自回归友好:解码时逐 token 生成,LayerNorm 对单个 token 就能算,天然契合。

记住:LayerNorm 归一化的方向是”每个 token 的特征向量内部”,和 batch 无关,这是它适配 Transformer 的根本原因。

三、RMSNorm:砍掉一半操作,效果不降

RMSNorm 的动机是「LayerNorm 里减均值这一步,真的必要吗?」实验发现:归一化带来收益的主要是”缩放不变性”(把向量的尺度拉稳),而”中心化”(减均值)贡献不大。

于是 RMSNorm 直接砍掉减均值和偏移 β:

LayerNorm: y = γ ⊙ (x − μ)/σ + β      # 4 步:求均值、求方差、中心化+缩放、偏移
RMSNorm:   y = γ ⊙ x / RMS(x)          # 2 步:求均方根、缩放

好处:

  • 更快、更省:少算一个均值、少一次减法、少一组 β 参数。在大模型每层都要跑无数次,累积节省可观。
  • 质量不降:Llama、T5 等大规模验证它与 LayerNorm 相当,甚至更稳。

这就是现代大模型几乎清一色转向 RMSNorm 的原因——用更低的成本拿到同样的稳定性。

四、Pre-LN vs Post-LN:归一化摆在哪,决定能训多深

这是比「LN 还是 RMSNorm」更影响训练稳定性的选择。

Post-LN(原始 Transformer)

x = LN( x + Sublayer(x) )     # 先残差相加,再归一化

问题:残差主干上的信号会被反复归一化,深层时梯度容易在反向传播中放大或衰减,训练不稳,必须配合学习率预热(warmup)和小心调参才能训起来。层数一多就更难。

Pre-LN(当代主流)

x = x + Sublayer( LN(x) )     # 先归一化,再进子层,残差主干直连

好处:残差主干是一条”没有被归一化打断”的干净通路,梯度可以顺着残差直接回传,深层也稳。可以训几十上百层,对 warmup 依赖弱,收敛更可靠。

代价:有研究指出 Pre-LN 在充分调优时最终性能可能略逊于 Post-LN,但稳定性和可扩展性的巨大优势让它成为大模型默认。后续还有 DeepNorm、Sandwich-LN 等改良,试图兼得稳定与性能。

记忆图景:Post-LN 是「加完再洗」,残差路被反复洗、深层易乱;Pre-LN 是「洗完再加」,残差路一通到底、深层也稳。大模型要堆很深,所以选 Pre-LN。

五、把两组选择拼起来看现代大模型

当代主流大模型(如 Llama)的典型配方是:Pre-LN 的位置 + RMSNorm 的形式,即:

h = x + Attention( RMSNorm(x) )
y = h + FFN( RMSNorm(h) )

这个组合同时拿到了「Pre-LN 的深层可训练性」和「RMSNorm 的低成本稳定」,是经过大规模验证的稳妥选择。面试时能说出「Pre-LN + RMSNorm 是现代 LLM 标配」并解释各自理由,就到位了。

六、用残差路径判断训练稳定性

设一个子层为 F。Pre-LN 写成 x_{l+1}=x_l+F(Norm(x_l)),梯度沿残差支路可直接跨过 F 和归一化;Post-LN 写成 x_{l+1}=Norm(x_l+F(x_l)),跨层梯度必须连续经过归一化。网络很深时,前一种恒等路径通常更容易优化,但这不代表它在任何规模上都一定质量更高。

LayerNorm 对 4096 维向量同时计算均值和方差;RMSNorm 只根据均方根缩放,不做中心化。少一次均值相关运算只是局部收益,端到端加速还取决于融合算子和内存访问,因此不能把“公式更短”直接等同于模型整体快一倍。

选择主要收益需要验证的边界
Pre-LN深层梯度路径更直接最终质量与残差尺度
Post-LN经典结构、层输出已归一深层训练稳定性与 warmup
RMSNorm计算更简、现代 LLM 常用kernel 支持与精度回归

七、常见误区与追问

  • 误区:RMSNorm 与 LayerNorm 完全等价。 RMSNorm 不减均值,只按均方根缩放;二者归一化统计与表达并不相同。
  • 追问:Transformer 为什么不用 BatchNorm? 序列长度、padding 和小批次会让跨样本统计不稳定,LayerNorm/RMSNorm 对每个 token 独立归一化。
  • 追问:Pre-LN 为什么更易训练深层网络? 残差支路提供不经过子层与归一化的直接梯度路径,减轻连续变换造成的梯度困难。
  • 误区:Pre-LN 在质量上总优于 Post-LN。 Pre-LN 更稳但可能带来有效深度等问题,具体质量依赖初始化、残差缩放、深度和训练配方。
  • 追问:RMSNorm 公式更简单就一定显著提速吗? 端到端收益取决于融合 kernel 和访存占比,必须用目标硬件实测而不能只数算术操作。

八、加强记忆

两组选择、四个词钉死:LayerNorm=减均值+除标准差+γβ;RMSNorm=只用均方根缩放(去掉减均值和 β,更省、效果相当)。Post-LN=加完再归一化(深层难训、要 warmup);Pre-LN=归一化后再进子层(残差直连、易训深,主流)。 现代大模型的标准配方是 Pre-LN + RMSNorm——既要能堆很深(Pre-LN),又要每层都便宜稳定(RMSNorm)。再记 LayerNorm 的关键性质:在每个 token 自己的特征维上归一化,与 batch 无关,这是它取代 BatchNorm 进入 Transformer 的根本原因。