Skip to content

BatchNorm 与 LayerNorm:Transformer 里为啥常用 LayerNorm

一、背景

训深度网络时,层与层之间的 数值尺度 容易飘,训练变慢甚至不稳定。归一化(Normalization) 把激活拉到 均值方差可控 的区间,再乘可学习的缩放平移参数。CV 里 BatchNorm 几乎标配;NLP 里 Transformer / LLM 几乎全是 LayerNorm(或 RMSNorm)

做应用的同学读模型结构图、改开源代码时,会频繁看到 LayerNormRMSNormPre-LN / Post-LN。搞清 按什么维度归一、为什么 NLP 不用 BN,和 Transformer 文章对照,结构图就 不再是一堆方块

二、核心概念和核心原理(详细解答+通俗解释)

(一)核心概念(先通俗,再详细)

  • 1. BatchNorm(BN)——沿 batch 维统计通俗解释:同一通道上,跨样本 算均值方差,再归一。详细解答:依赖 batch size;batch 太小时统计抖;推理 用滑动平均的 running stats。

  • 2. LayerNorm(LN)——沿特征维统计,单样本内通俗解释:每个样本自己 对自己的特征维做归一,不依赖 batch大小。详细解答:适合 变长序列、小 batch、分布式——NLP 天然友好。

  • 3. RMSNorm通俗解释:去掉均值中心化,只除均方根,计算更省,效果常相当;LLaMA 等常用。详细解答:可视为 LN 的简化变体。

(二)核心原理(通俗拆解,一步一步讲清楚)

  1. 第一步:为什么 Transformer 用 LN 而不是 BN通俗解释:句子长短不一,padding 多;小 batch / 单条推理时 BN 统计不可靠。详细解答:LN 对序列模型更稳;BN 在 CV 里因 空间统计规整 仍强势。

  2. 第二步:Pre-LN vs Post-LN通俗解释:Post-LN:先子层再加残差再 LN(原始论文);Pre-LN:LN 放在子层输入前,训练更稳、更深更好训,现在很多实现采用 Pre-LN。详细解答:具体结构看代码 x + Sublayer(Norm(x)) 还是 Norm(x + Sublayer(x))

  3. 第三步:与残差的配合通俗解释:归一化 控制激活尺度,残差 保梯度通路;两者一起让 几十上百层 可训。详细解答:和 梯度/优化器 文章串联理解 为何能堆深

三、补充进阶知识点(易懂不晦涩,适配新手进阶)

  • 1. DeepNorm 等进一步稳定训练通俗解释:对残差缩放做 系数约束,极深 Transformer 用。简单补充:读大模型论文时偶见,知道方向即可。

  • 2. Inference 时 BN vs LN通俗解释:BN 要切换 eval 用 running stats;LN 训练推理同一公式,更简单。简单补充:部署 LLM 时 LN/RMSNorm 无 batch 依赖 更省心

  • 3. 和之前知识点的关联(重点) Transformer 结构必读;KV Cache量化 不改变 LN 维度逻辑,但 融合算子 会把 LN 写进 kernel。

四、文章知识总结

  1. 背景:归一化稳定训练;CV 爱 BN,NLP/Transformer 爱 LN/RMSNorm。
  2. 核心概念:BN 沿 batch;LN 沿特征、单样本;RMSNorm 更轻。
  3. 核心原理:变长序列 + 小 batch → LN;Pre-LN 训练更稳。
  4. 进阶:DeepNorm;部署时 LN 行为简单。
  5. 核心逻辑看见 Norm 先问:沿哪一维统计?

总结:LayerNorm 是 读懂 Transformer 源码的钥匙之一;和注意力、FFN 拼在一起,才是完整块结构。