← 返回题目列表

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

高频 中等 第 5 / 25 题 更新于 2026/09/25
LayerNormRMSNormPre-LN归一化
学习 AI 实战项目

简化版

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

  • LayerNorm 先减均值、再除标准差,带缩放 γ 和偏移 β。
  • RMSNorm 不做中心化,通常也不设偏移 β,只按**均方根(RMS)**缩放;公式与实现更简,一些现代模型采用它,但质量与速度收益需实测。

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

  • Post-LN(原始 Transformer):归一化放在残差相加之后,深层训练通常更敏感。
  • Pre-LN:归一化放在子层之前,保留更直接的恒等残差路径,通常更易优化深层网络;并非任何配方下都更好。

详细版

为什么要归一化

归一化控制每个 token 表示的尺度并改变优化几何,有助于数值稳定和梯度传播。“内部协变量偏移”只是历史直觉,不能当作公认的唯一机制。

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 缩放,只保留 γ。
  • 算术步骤更少,但端到端收益取决于融合 kernel 和访存;一些架构取得了与 LayerNorm 有竞争力的效果,不能概括为普遍相当或更好。

Pre-LN vs Post-LN

Post-LN(原始)Pre-LN(现代)
结构x + Sublayer(x) 后再 LNx + Sublayer(LN(x))
深层训练往往更敏感通常更易优化
学习率预热常需要谨慎调节通常敏感度较低,仍可能使用
最终性能调好时可能略高稳定、主流

完整版教学

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

训练深层网络时,激活尺度、残差累积和各层 Jacobian 会共同影响数值与梯度。LayerNorm/RMSNorm 让每个 token 的通道尺度受控,并重参数化后续子层的输入,从而改善优化稳定性。

LayerNorm 会中心化并按方差缩放,RMSNorm 只控制均方根,因此“都拉到零均值单位方差”并不准确。它们通常改善稳定性,但可用学习率和最大深度仍取决于初始化、残差缩放、优化器与精度。

二、为什么 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 的设计问题是:能否只保留重缩放而去掉重新中心化。原始实验表明这种简化在其测试任务上有效,但不能据此断言中心化在所有架构里贡献都不大。

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

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

好处:

  • 实现更简:少做中心化,通常没有 β;实际 kernel 可能仍主要受内存访问限制。
  • 经验上可用:多个架构采用后取得良好效果,但与 LayerNorm 的公平优劣必须在同配方下消融。

因此 RMSNorm 成为常见选择之一;仍有模型使用 LayerNorm 或其他归一化,不能说“几乎清一色”或保证同样稳定性。

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

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

Post-LN(原始 Transformer):

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

Post-LN 的跨层梯度连续经过归一化与子层 Jacobian,深层优化通常对初始化、学习率和 warmup 更敏感。但“必须 warmup 才能训练”不是数学必然,也有专门初始化和残差缩放方案改善它。

Pre-LN(当代主流):

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

好处:残差主干提供显式恒等项,梯度可沿这条路径传播,因此深层网络通常更易优化。它仍可能使用 warmup,残差流的幅度也可能随层累积,需要最终 Norm、缩放或初始化配合。

Pre-LN 与 Post-LN 的最终质量没有普适排序;差异会随深度、初始化和训练预算变化。DeepNorm、Sandwich-Norm 等方案进一步调整残差与归一化位置,说明选型不是简单二选一。

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

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

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

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

这个组合在多种模型中被验证为可扩展配方,但不是“现代 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 在残差相加后归一化;Pre-LN 在子层前归一化,保留更直接的恒等梯度路径。 Pre-LN + RMSNorm 是常见组合而非唯一答案;RMSNorm 不保证质量相当,Post-LN 也非必然训不动。最终比较稳定性、质量和目标硬件 kernel,同时记住两种 Norm 都按单个 token 的特征维统计、与 batch 统计无关。