Pre-LN 与 Post-LN:归一化位置之争
本文基于模型知识整理(生成时未联网核对),理论分析建议对照 Xiong et al. 2020 复核。
一句话定义
LayerNorm 放在子层之前(Pre-LN:x+Attn(LN(x)),现代默认)还是之后(Post-LN:LN(x+Attn(x)),2017 原版)——Post-LN 最终质量略优但必须靠 warmup 才训得稳;Pre-LN 梯度畅通、几乎不需要 warmup、可训更深——现代大模型清一色 Pre-LN 或其变体。
为什么重要
这是"理论稳定 vs 最终性能"的经典工程权衡,也是大模型训练配方(kp-013)的第一块积木。2017 原论文用 Post-LN+精调 warmup;GPT-2 起转向 Pre-LN;Llama 的 RMSNorm+Pre-LN 是当代标准——理解位置差异,就读懂了训练配方演化的第一页。
前置知识
kp-006(Block 结构)、LayerNorm 的作用(归一化激活尺度)。
核心概念
- 两种结构:
- Post-LN:x₁ = LN(x + Attn(x))——LN 在残差相加之后,每层输出都被重新归一化; - Pre-LN:x₁ = x + Attn(LN(x))——LN 只作用于进子层的支路,残差主干"裸奔"直通。
- 梯度行为差异(Xiong 2020 的核心结论):
- Post-LN:梯度在层间经 LN 反复重缩放,靠近输出的层梯度大、靠近输入的层梯度小——深模型需要 warmup"慢慢加热"否则爆炸; - Pre-LN:残差主干的梯度直通无阻(含 LN 的支路才被缩放),各层梯度近似均匀——可直接训深,最终性能对学习率更宽容。
- 质量差异:Post-LN 在充分调参(含 warmup)下最终损失常略优于 Pre-LN——"归一化每层输出"有轻微的正则化效果;Pre-LN 换取的是训练鲁棒性(大模型训练一次成本千万级,鲁棒性价值远超那点质量差)。
- 现代变体:RMSNorm(Llama 系:去均值化简,只除 RMS——更省计算);Sandwich-LN(前后都放,MoE 稳定用)——归一化本身的简化也是配方演化的一部分。
原理与机制
Post-LN 梯度为什么会分层:每过一层,梯度被 LN 的雅可比乘一次(重缩放因子与该层激活分布有关)——L 层连乘造成梯度的系统性层间失衡(深层的输入端层梯度指数级缩小)。warmup 的作用=在初期小步长下让激活分布先稳定,避免第一批更新就踩爆。
Pre-LN 的"主干直通":残差路径 x→x+Attn(LN(x)) 中,x 到输出的映射含恒等项——梯度对恒等项偏导为 1,不随深度衰减;LN 只影响支路。代价:主干上的表示"未被归一化",尺度可能逐层漂移(靠初始化与 RMSNorm 端点归一化治理,kp-013)。
选择哲学:小模型/学术复现(Post-LN 可行,追求极限质量);大模型/工业训练(Pre-LN/RMSNorm,追求必成与鲁棒)——当训练一次贵到无法重试,鲁棒性就是最大的性能。
图示
Post-LN: x₁ = LN(x + Attn(x)) 每层输出重归一化
梯度层间失衡 → 必需 warmup ; 深层难训 ; 最终质量略优
Pre-LN: x₁ = x + Attn(LN(x)) 主干直通
梯度均匀 → 免warmup可深训 ; 现代默认
变体: RMSNorm(去均值简化, Llama) | Sandwich(MoE)
权衡: Post=理论质量 vs Pre=训练鲁棒
直观类比
Post-LN 像"每道工序后全车质检":质量稳定但流水线相互牵制,开工前要精细热机(warmup);Pre-LN 像"只在零件进机器前自检":总装线直通不停站——速度快、不易停线,整车质量靠首尾两道终检兜底。
实例或案例
- GPT-2 起(2019)Pre-LN 成为 GPT 系标准;Llama/RWKV/Mistral 的 RMSNorm 全是 Pre 位置。
- 训练深 Post-LN 的挣扎:原始论文需精心 warmup(4000 步);社区复现深 Post-LN 常见 loss spike——与 Pre-LN 对照鲜明的工程记忆。
- MoE 中的 Sandwich-LN:MoE 输出方差大,前后双重归一化稳住专家输出(kp-022 的联动)。
常见误区
- 误区一:"Post-LN 是错误设计"。它只是时代产物(当时无 warmup 经验积累),其质量上限仍是理论上限之一;"错误"的是不加配套措施就用。
- 误区二:"RMSNorm 是 LayerNorm 的等价替身"。去掉了均值中心化(更少计算、实验性能相当)——是刻意简化不是随意替换。
- 误区三:"Pre-LN 深层尺度漂移无关紧要"。主干激活尺度确实会漂(层越深越大)——靠端点归一化与初始化纪律治理,完全不管会出问题。
与其他知识点的关系
自测题
- 写出 Pre-LN 与 Post-LN 的公式。
答:Pre:x+Attn(LN(x));Post:LN(x+Attn(x))——LN 在支路前 vs 相加后。
- 为什么 Post-LN 需要 warmup 而 Pre-LN 基本不需要?
答:Post-LN 梯度经逐层 LN 重缩放、层间失衡(输入端层梯度小),初期大步长易爆;Pre-LN 主干梯度直通均匀——无需热身即可稳定。
- 为什么现代大模型甘愿接受 Pre-LN 的轻微质量差?
答:大模型训练一次成本巨大,Pre-LN 的鲁棒性(免 warmup 微调、可训更深、对超参宽容)在期望成本上完胜微小质量差。
延伸阅读
- Xiong 等, "On Layer Normalization in the Transformer Architecture"(ICML 2020,梯度分析原文)。
- Zhang & Sennrich, "Root Mean Square Layer Normalization"(NeurIPS 2019,RMSNorm)。
- GPT-2/Llama 官方实现(对照两种 LN 的代码位置)。