为什么 Transformer 使用 LayerNorm 而不是 BatchNorm?
在深度学习的发展历程中,Normalization(标准化)技术几乎贯穿了所有高性能模型的训练过程。从最初的卷积神经网络(CNN)到后来的 Transformer,每一代架构都离不开它。
然而,一个有趣的现象是:CNN 更常用 BatchNorm,而 Transformer 却几乎清一色使用 LayerNorm。
为什么会这样?本文将带你从原理出发,彻底弄懂其中的差异与设计逻辑。

一、Normalization:从概念入手
在正式讨论 BatchNorm 和 LayerNorm 之前,我们先厘清一个长期被混淆的概念–Normalization。
1.1 Normalization ≠ 归一化到 [0,1]
在统计学与机器学习中,“Normalization” 一词通常有两种不同语义:
| 名称 | 英文 | 数学表达式 |
|---|---|---|
| 归一化 | Min-Max Normalization | 将数据映射到 [0,1] 区间,保持比例关系 |
| 标准化 | Standardization | 使数据均值为 0、方差为 1,统一分布尺度 |
"归一化"关注数据范围一致;
"标准化"关注数据分布一致。
1.2 深度学习中的 Normalization 实际上是"标准化"
在深度学习语境中,Normalization 几乎都指代"零均值、单位方差的标准化操作",
也就是对输入特征或激活值进行中心化与尺度调整。
这种操作的目的并不是压缩数值范围,而是为了:
- 降低各层输入分布的漂移(即 Internal Covariate Shift),
- 加速模型收敛,
- 提升梯度稳定性。
因此,无论是 BatchNorm 还是 LayerNorm,它们名字里的 “Norm” 都应该理解为标准化(Standardization),而非单纯的归一化。
二、BatchNorm:通过批次统计稳定训练
Batch Normalization(批标准化) 由 Ioffe & Szegedy (2015) 提出,是深度学习中的一个重要里程碑。
它显著改善了网络训练中的梯度不稳定问题,并成为 CNN 模型的标配模块。
2.1 问题背景:内部协变量偏移(Internal Covariate Shift)
随着神经网络层数增加,每一层的输入分布会随着前层参数的更新而不断变化,这会导致训练过程不稳定、收敛变慢,甚至出现梯度爆炸或消失。
BatchNorm 的目标,就是让每一层的输入分布更加稳定。
2.2 工作原理
BatchNorm 的执行过程可分为三步:
- 计算批次统计量
对 mini-batch 中的每个特征维度,计算均值与方差: - 标准化处理
使用该批次统计量将输入数据标准化: - 线性变换(可学习参数)
引入缩放因子 γ 与偏移因子 β:
这样模型仍可学习最优的分布。
2.3 应用与局限
BatchNorm 通常放在卷积层或全连接层之后、激活函数之前。
它极大地提升了 CNN 训练的稳定性与收敛速度。
然而,BatchNorm 的核心依赖是 “批次统计量”。这意味着:
- 它需要较大的 batch 才能计算稳定的均值与方差;
- 推理阶段还需使用移动平均(running mean/var);
- 当 batch 太小或样本差异太大时,效果会显著下降。
三、LayerNorm:样本级标准化的出现
Layer Normalization(层标准化) 由 Ba, Kiros & Hinton (2016) 提出,最初用于循环神经网络(RNN)以提升序列建模的稳定性,后来成为 Transformer 的核心组件。
3.1 核心思想
与 BatchNormBatchNormBatchNorm 在 “样本之间” 计算统计量不同,LayerNormLayerNormLayerNorm 是在 “样本内部” 进行标准化。
也就是说,它对每个样本的所有特征维度计算均值与方差,而不依赖于 batch。
数学形式如下:
其中 ( HHH ) 是特征维度的长度。
3.2 优点
- 不依赖 batch 统计量 → 可在小 batch 或 batch size=1 的场景稳定工作;
- 对序列任务友好 → 不同样本长度、不同 token 分布都可独立处理;
- 推理阶段一致性高 → 训练与推理完全一致,无需额外均值/方差缓冲。
因此,在自然语言处理(NLP)和自注意力(Self-Attention)结构中,LayerNorm 成为更合理的选择。
四、Transformer 为什么必须用 LayerNorm?
要回答这个问题,关键在于理解一条原则:
Normalization 的前提是:被标准化的对象必须在统计意义上可比。
4.1 BatchNorm 的适用场景:跨样本特征可比
在卷积网络中,同一通道的激活值在不同样本之间具有一致的语义含义(例如"边缘强度"或"纹理模式"),因此可以安全地使用 batch 统计量进行标准化。
这就像比较"不同学生在同一科目(如数学)上的成绩"–可比性强。
4.2 LayerNorm 的适用场景:样本内部特征可比
而在 Transformer 中,不同位置(token)代表了完全不同的语义单元,跨样本统计均值或方差并不具有可比性。
例如,一个句子的第 3 个 token 和另一个句子的第 3 个 token 含义可能完全不同。
此时再使用 BatchNorm 只会引入无意义的噪声。
LayerNorm 则不同–它对每个样本内部所有特征独立标准化,这就像"评估一个学生在所有科目上的综合表现",更贴合 Transformer 的特征结构。
4.3 实际工程上的考虑
- Transformer 常采用动态 batch size 或变长序列;
- 推理阶段往往是逐 token 自回归生成;
- 这些都使 BatchNorm 难以保持统计一致性。
因此,LayerNorm 成为 Transformer 中既合理又稳定的选择。
五、总结对比
| 对比维度 | BatchNorm | LayerNorm |
|---|---|---|
| 标准化维度 | 跨样本(batch) | 样本内部(feature) |
| 是否依赖 batch size | ✅ 是 | ❌ 否 |
| 适用模型类型 | CNN、图像任务 | RNN、Transformer、语言模型 |
| 推理阶段一致性 | 依赖移动平均 | 训练与推理完全一致 |
| 对小 batch 敏感性 | 高 | 低 |
| 可比性假设 | 样本间特征可比 | 样本内特征可比 |
一句话总结:
CNN 中,同一通道在不同样本间是可比的 → 用 BatchNorm。
Transformer 中,每个 token 特征语义不同 → 用 LayerNorm。
六、参考文献
[1] Ioffe, S., & Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.
[2] Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). Layer Normalization.
[3] Do Standardization and Normalization Transform Data into Normal Distribution?
[4] Build Better Deep Learning Models with Batch and Layer Normalization - Pinecone.io
七、后记:实战中的经验与警示
- 不要混淆"Normalization"与"归一化到 [0,1]",在神经网络中它几乎总指"标准化";
- BatchNorm 不适合小 batch 或动态序列任务,使用会导致训练波动或推理偏差;
- LayerNorm 在 Transformer 中几乎是默认标配,但在 CNN 结构中可能导致训练变慢;
- 实践中还可尝试 RMSNorm、GroupNorm、ScaleNorm 等改进方案,它们在小模型或多模态任务中表现更优。
八、快问快答
Q:
为什么 Transformer 使用 LayerNorm 而不是 BatchNorm?
A:
“标准化和归一化都是数据预处理的常用方法,但它们的目的和应用场景不同。归一化主要是把数据缩放到一个固定区间,比如 [0,1],常用于特征量纲差异较大、且对距离敏感的算法,如 KNN 或神经网络。而标准化是让数据符合零均值、单位方差的分布,即去均值再除以标准差,更适合假设数据服从正态分布的模型,比如线性回归或 PCA。简单来说,归一化关心’范围’,标准化关心’分布’。”
