Skip to content

Transformer 为什么采用 Layer Normalization 而不是 Batch Normalization ​

  • 标签:Transformer、normalization

🏛 业务架构师 ​

Transformer 用 LayerNorm 而非 BatchNorm,是序列建模场景下的必然选择,四个原因:

  1. 变长序列与 padding 干扰:NLP 输入长度不一,批内靠 padding 对齐——BatchNorm 按批统计均值方差,padding 位置会污染统计量;且同一 batch 里"长句和短句混着算统计"没有语义意义。LayerNorm 按单样本自身归一化,与批组成无关——天然适配变长输入。

  2. 批大小依赖:BatchNorm 的批统计在小 batch(大模型训练显存受限时常见)或推理(批=1)下不稳定,要维护 running statistics,训练/推理行为不一致;LayerNorm 无批依赖,训练推理行为一致,小 batch 也稳。

  3. 特征维度异质性:CV 里同一通道的像素分布相似,批统计合理;NLP 里同一 token 的不同特征维度语义各异,跨样本统计"第 i 维"没有意义——按样本内归一化(LN)才说得通。

  4. 与自注意力的配合:残差流上的 LN 稳定各层激活分布,防止深堆叠时的数值漂移——Pre-LN(放残差前)让百层训练稳定,已是现代 LLM 的标准布局。

业务视角的注脚:这个选型体现了"照搬 CV 经验到 NLP 会翻车"的教训——架构设计要尊重数据形态(序列 vs 网格)。延伸到 2026:RMSNorm(LN 的简化版,去掉均值中心化和偏置)因计算更省、效果相当,已被 Llama 系广泛采用——归一化方案仍在"更简更快"的方向演进,理解选型逻辑比记住结论重要。

🏗 系统架构师 ​

核心原因:序列维度与 batch 维度的统计稳定性差异 + 训练-推理一致性。我分三点讲:

  • 变长序列让 BN 失效:Batch Norm 沿 batch 维度统计(同一特征位置跨样本归一化)——NLP 的 batch 由变长序列组成,padding 位置污染统计量;且同一 token 在不同 batch 的统计量不同,同一句子的归一化结果依赖"和谁凑一个 batch"——推理时(单条生成、batch=1)没有稳定统计可用,训练-推理行为不一致,这是致命伤(CV 里 batch 内图像统计稳定,NLP 完全不同);
  • LN 沿特征维度归一化(每 token 自身):Layer Norm 对每个 token 的特征向量独立归一化——与 batch 无关、与序列长度无关:单条推理与批量训练行为完全一致;padding/变长无影响;天然适配自回归生成(每个 token 独立处理);
  • 深层训练稳定性:Transformer 的残差 + LN 结构(Pre-LN)是百层网络可训练的基石——LN 在每层稳定特征分布尺度,配合残差的恒等通路,梯度流动健康。BN 放在残差流里会破坏恒等路径(有 Post-BN 失败的实证教训)。

架构延伸(2026 现状):LLaMA 系用 RMSNorm(LN 的简化:去均值中心化,只做缩放)——计算更省、效果相当,已成 Decoder-only 事实标准;QK-Norm(对 Q/K 归一化)是大模型训练稳定性的新补充。

一句话:BN 的统计假设在"变长 + 自回归 + 单条推理"的 NLP 世界全部不成立——LN 赢在它与 batch 解耦,归一化应该是样本内操作而非批间操作。

💻 全栈开发专家 ​

Transformer 选 LayerNorm 而非 BatchNorm,核心是变长序列 + 小 batch 场景下 BN 的统计量不可靠:

BN 的问题(在 NLP/Transformer 语境):

  1. 统计量不稳定:BN 沿 batch 维统计均值/方差——但 NLP 句子长短不一,padding 位置是无效值,batch 统计被 padding 严重污染;同一 token 在不同 batch(不同的「邻居句子」)里归一化结果不同,同一输入的表示取决于和谁同 batch——推理尴尬:要么用 running statistics(训练/推理不一致),要么推理也带 batch(在线服务做不到);
  2. batch 大小依赖:分布式训练 per-GPU batch 小,BN 统计噪声大;单样本推理时 BN 直接失效。

LN 的适配性:

LN: 对每个样本、每层的特征维度做归一化(均值/方差在 d_model 维上算)
  1. 与 batch 无关:每个 token 独立归一化,变长、padding、batch=1 全都不是问题;
  2. 训练推理一致:没有跨样本统计,行为确定;
  3. 稳定层输入分布,让残差+深堆叠可训练。

面试加分(演进细节):

  • 原版 Transformer 是 Post-LN(残差后归一化),深了难训(需 warmup 拉着);
  • GPT-2/LLaMA 改 Pre-LN(归一化放子层内,残差主干干净)——深层训练稳定性的关键改进;
  • LLaMA 进一步用 RMSNorm:去掉均值中心化只除均方根,省约 7~32% 归一化计算,效果不掉——大模型标配。

一句话:BN 的假设(batch 维同分布、等长输入)在序列建模上不成立,LN 按样本自身归一化天然契合。