BatchNorm 与 LayerNorm:Transformer 里为啥常用 LayerNorm
一、背景
训深度网络时,层与层之间的 数值尺度 容易飘,训练变慢甚至不稳定。归一化(Normalization) 把激活拉到 均值方差可控 的区间,再乘可学习的缩放平移参数。CV 里 BatchNorm 几乎标配;NLP 里 Transformer / LLM 几乎全是 LayerNorm(或 RMSNorm)。
做应用的同学读模型结构图、改开源代码时,会频繁看到 LayerNorm、RMSNorm、Pre-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 的简化变体。
(二)核心原理(通俗拆解,一步一步讲清楚)
第一步:为什么 Transformer 用 LN 而不是 BN通俗解释:句子长短不一,padding 多;小 batch / 单条推理时 BN 统计不可靠。详细解答:LN 对序列模型更稳;BN 在 CV 里因 空间统计规整 仍强势。
第二步:Pre-LN vs Post-LN通俗解释:Post-LN:先子层再加残差再 LN(原始论文);Pre-LN:LN 放在子层输入前,训练更稳、更深更好训,现在很多实现采用 Pre-LN。详细解答:具体结构看代码
x + Sublayer(Norm(x))还是Norm(x + Sublayer(x))。第三步:与残差的配合通俗解释:归一化 控制激活尺度,残差 保梯度通路;两者一起让 几十上百层 可训。详细解答:和 梯度/优化器 文章串联理解 为何能堆深。
三、补充进阶知识点(易懂不晦涩,适配新手进阶)
1. DeepNorm 等进一步稳定训练通俗解释:对残差缩放做 系数约束,极深 Transformer 用。简单补充:读大模型论文时偶见,知道方向即可。
2. Inference 时 BN vs LN通俗解释:BN 要切换 eval 用 running stats;LN 训练推理同一公式,更简单。简单补充:部署 LLM 时 LN/RMSNorm 无 batch 依赖 更省心。
3. 和之前知识点的关联(重点) Transformer 结构必读;KV Cache、量化 不改变 LN 维度逻辑,但 融合算子 会把 LN 写进 kernel。
四、文章知识总结
- 背景:归一化稳定训练;CV 爱 BN,NLP/Transformer 爱 LN/RMSNorm。
- 核心概念:BN 沿 batch;LN 沿特征、单样本;RMSNorm 更轻。
- 核心原理:变长序列 + 小 batch → LN;Pre-LN 训练更稳。
- 进阶:DeepNorm;部署时 LN 行为简单。
- 核心逻辑:看见 Norm 先问:沿哪一维统计?
总结:LayerNorm 是 读懂 Transformer 源码的钥匙之一;和注意力、FFN 拼在一起,才是完整块结构。