2015年,Sergey Ioffe和Christian Szegedy在论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出了批归一化(Batch Normalization)。这项技术在ImageNet分类任务上将训练步数减少了14倍,迅速成为计算机视觉领域的标配。然而,当Transformer架构在2017年横空出世时,论文作者们却选择了另一种归一化方式——层归一化(Layer Normalization)。这个选择并非偶然,背后隐藏着NLP数据与CV数据的本质差异,以及深度网络训练稳定性的深刻洞见。

两种归一化的数学本质

在深入讨论之前,首先需要理解BatchNorm和LayerNorm的计算方式。假设有一个形状为 $(B, L, d)$ 的张量,其中 $B$ 是批量大小,$L$ 是序列长度,$d$ 是隐藏维度(特征数)。

Batch Normalization 对每个特征维度独立地计算批量统计量:

$$\mu_j = \frac{1}{B \cdot L} \sum_{i=1}^{B} \sum_{t=1}^{L} x_{i,t,j}$$$$\sigma_j^2 = \frac{1}{B \cdot L} \sum_{i=1}^{B} \sum_{t=1}^{L} (x_{i,t,j} - \mu_j)^2$$

归一化后的输出为:

$$\hat{x}_{i,t,j} = \frac{x_{i,t,j} - \mu_j}{\sqrt{\sigma_j^2 + \epsilon}}$$

这里的关键是:均值和方差是在整个批量的所有位置上计算的,对每个特征维度 $j$ 得到一个标量。

Layer Normalization 则完全不同,它对每个样本独立计算统计量:

$$\mu_{i,t} = \frac{1}{d} \sum_{j=1}^{d} x_{i,t,j}$$$$\sigma_{i,t}^2 = \frac{1}{d} \sum_{j=1}^{d} (x_{i,t,j} - \mu_{i,t})^2$$

归一化后的输出为:

$$\hat{x}_{i,t,j} = \frac{x_{i,t,j} - \mu_{i,t}}{\sqrt{\sigma_{i,t}^2 + \epsilon}}$$

关键区别在于:LayerNorm为每个样本的每个位置计算独立的均值和方差,与批量大小和其他样本完全无关。

BatchNorm与LayerNorm计算维度对比

图片来源: Pinecone - Batch and Layer Normalization

图中蓝色部分表示参与计算统计量的元素。左侧BatchNorm沿批量维度计算,右侧LayerNorm沿特征维度计算。对于Transformer处理的序列数据,这个差异会产生深远影响。

NLP数据的批量统计量波动问题

2020年,UC Berkeley的研究团队在ICML上发表了一篇题为《PowerNorm: Rethinking Batch Normalization in Transformers》的论文,系统性地研究了为什么BatchNorm在Transformer中表现不佳。他们的发现令人惊讶:NLP数据的批量统计量在训练过程中呈现出剧烈波动。

研究团队比较了ResNet20在CIFAR-10上和Transformer在IWSLT14机器翻译任务上的批量统计量行为。结果显示,ResNet的批量统计量与运行统计量之间的距离在整个训练过程中几乎为零,而Transformer的批量统计量则表现出极端的波动,存在大量异常值。

这种差异的根源在于NLP数据的特性:

变长序列问题:自然语言句子的长度差异很大。如果使用BatchNorm,不同批量的"归一化常数"(参与计算均值和方差的元素总数)会不同,导致训练不稳定。更棘手的是,padding位置的值通常为零,这些无效位置被纳入统计量计算会引入噪声。

语义分布差异:不同文档、不同领域的文本在特征分布上可能存在系统性差异。一个包含技术论文的批量和一个包含日常对话的批量,其统计特性可能完全不同。相比之下,图像数据(尤其是经过数据增强后)在批量间的分布更加均匀。

位置信息敏感:在Transformer中,不同位置的token承担不同的角色(如句首的主语、句末的标点)。BatchNorm将所有位置的激活混合计算统计量,可能破坏位置相关的语义信息。

研究团队提出了Power Normalization作为改进方案,但更重要的是,这项研究揭示了LayerNorm在NLP场景下的根本优势:它不依赖于批量统计量,每个样本独立归一化,完全规避了上述问题。

训练与推理的一致性

BatchNorm在设计上存在一个尴尬的不对称:训练时使用当前批量的统计量,推理时使用训练过程中累积的移动平均统计量。这种设计在计算机视觉中工作良好,因为图像数据的批量统计量相对稳定,移动平均能够很好地近似真实分布。

但在NLP中,情况完全不同。由于前述的批量统计量波动问题,移动平均统计量可能与实际推理数据的统计特性相差甚远。这意味着模型在训练和推理时的行为存在不一致性——一种难以调试的隐蔽问题。

LayerNorm完全避免了这个问题。无论训练还是推理,它使用完全相同的计算方式:对每个样本独立计算统计量。这种一致性不仅简化了实现,还消除了一个潜在的误差来源。

更重要的是,LayerNorm与批量大小完全解耦。在训练超大模型时,由于内存限制,往往需要使用很小的批量大小(如1或2)。BatchNorm在小批量场景下表现极差,因为样本统计量无法可靠估计真实分布。LayerNorm则完全不受此限制,批量大小为1时同样能正常工作。

分布式训练的便利性

现代大模型训练几乎都采用分布式策略,将模型参数或数据切分到多个计算设备上。BatchNorm在这里遇到了另一个障碍:每个设备只看到部分批量数据,无法计算全局统计量。

解决方案有两种:一是同步计算全局统计量(需要跨设备通信),二是使用同步批归一化(SyncBatchNorm)。无论哪种方案,都会引入额外的通信开销和实现复杂度。

LayerNorm天然适合分布式训练。由于统计量在每个样本内部计算,不需要跨样本、跨设备的任何通信。在数据并行场景下,每个设备独立计算其上样本的LayerNorm,梯度聚合时也不涉及归一化层的相关同步。这个特性在大规模训练中尤为重要——通信开销往往是分布式训练的主要瓶颈之一。

Pre-LN与Post-LN:归一化位置的关键抉择

选择了LayerNorm之后,下一个问题就是:应该把它放在哪里?原始Transformer论文采用Post-LN设计,即先执行子层(注意力或前馈网络),再与残差连接相加,最后归一化。而后来广泛采用的Pre-LN设计则将归一化移到子层之前。

2020年,北京大学和微软研究院的研究团队在论文《On Layer Normalization in the Transformer Architecture》中,从理论上分析了两种设计的梯度行为差异。他们的发现解释了为什么现代大模型普遍采用Pre-LN。

Post-LN的梯度问题

在Post-LN设计中,第 $l$ 层的输出可以表示为:

$$x^{l+1} = \text{LayerNorm}(x^l + \text{Sublayer}(x^l))$$

研究团队使用平均场理论分析发现,在初始化时,靠近输出层的参数梯度期望值很大。具体而言,对于最后一层的前馈网络参数,梯度范数的期望值为 $O(d\sqrt{\ln d})$,与层数 $L$ 无关。

这意味着什么?使用大学习率直接训练会导致靠近输出的层参数更新过猛,破坏网络的初始状态,引发训练不稳定。这就是为什么原始Transformer需要学习率预热(warm-up)阶段:先使用极小的学习率训练几千步,让网络"适应"初始梯度分布,再逐步提升到目标学习率。

Pre-LN的梯度稳定性

Pre-LN的设计将归一化放在子层之前:

$$x^{l+1} = x^l + \text{Sublayer}(\text{LayerNorm}(x^l))$$

理论分析显示,这种设计下最后一层的梯度范数期望值为 $O\left(\frac{d}{\sqrt{\ln d \cdot L}}\right)$,随着层数 $L$ 增加而减小。更关键的是,所有层的梯度范数在初始化时都保持在一个合理的范围内,不存在靠近输出层梯度爆炸的问题。

核心机制在于"梯度高速公路":在Pre-LN中,残差连接提供了一条直接、未经变换的梯度路径。反向传播时,梯度可以通过恒等映射 $x^{l+1} \to x^l$ 无衰减地流向前一层,完全绕过子层和LayerNorm。这条路径确保了即使子层存在梯度消失或爆炸问题,至少有一条"安全通道"保持梯度流动。

实验结果令人信服:在IWSLT14德英翻译任务上,Post-LN Transformer不使用预热只能达到8.45的BLEU分数,而使用预热可以达到34分以上。相比之下,Pre-LN Transformer无需预热即可达到相当的性能,且收敛速度更快——在第9个检查点就达到了Post-LN在第15个检查点的性能。

现代大模型的归一化选择

如今主流的大语言模型已经形成了两种归一化风格的流派:

GPT派系:GPT-2、GPT-3及其后续版本采用Pre-LN LayerNorm。OpenAI在GPT-2论文中明确指出:“Layer normalization…was moved to the input of each sub-block, similar to a pre-activation residual network…and an additional layer normalization was added after the final self-attention block。“这一设计使得GPT系列能够成功训练数十甚至近百层的深度网络。

LLaMA派系:LLaMA系列采用了一种称为RMSNorm的变体。RMSNorm于2019年由Zhang和Sennrich提出,核心思想是移除LayerNorm中的均值中心化操作:

$$\text{RMSNorm}(x) = \gamma \odot \frac{x}{\sqrt{\frac{1}{d}\sum_{j=1}^{d} x_j^2 + \epsilon}}$$

作者假设LayerNorm的"重中心化不变性”(re-centering invariance)并非稳定训练的关键,只有"重缩放不变性”(re-scaling invariance)才是本质。实验表明,RMSNorm在各种任务上与LayerNorm性能相当,但计算更高效——原论文报告了7%~64%的训练加速。

LLaMA的设计者解释了选择RMSNorm的原因:“LayerNorm stabilizes training but introduces additional overhead, which becomes substantial for deeper networks.” 在数百亿参数、数十层的模型规模下,即使是每个子层的微小开销也会累积成可观的计算成本。

两种风格各有千秋。LayerNorm的零均值特性有利于量化精度和数值稳定性;RMSNorm的计算简洁性在大模型训练中更具吸引力。有趣的是,2025年的一项研究发现,随着优化的实现,LayerNorm与RMSNorm的性能差距已接近消失,但RMSNorm因其历史上的效率优势继续被广泛采用。

归一化层与训练稳定性的深层联系

归一化技术在深度学习中的核心作用是稳定训练。但要真正理解它为什么有效,需要从优化动力学角度思考。

2018年,MIT的研究团队在论文《How Does Batch Normalization Help Optimization?》中提出了一个颠覆性的观点:BatchNorm的有效性可能并非来自其原作者声称的"减少内部协变量偏移",而是因为它让损失曲面更加平滑。具体而言,BatchNorm使损失函数的Lipschitz常数更小,梯度的预测性更强,从而允许使用更大的学习率。

类似的分析同样适用于LayerNorm。在Transformer中,LayerNorm确保了每个子层的输出具有稳定的统计特性(零均值、单位方差),无论输入如何变化。这种稳定性意味着后续层不需要不断适应输入分布的变化,优化问题变得更加well-behaved。

Pre-LN的设计进一步增强了这种稳定性。通过在子层之前归一化,输入到注意力机制和前馈网络的数据始终保持良好的尺度,避免了深层网络中常见的激活值爆炸或消失问题。同时,残差连接提供的梯度高速公路确保了反向传播的有效性。

实践建议

基于上述分析,归一化层的选择和配置可以遵循以下原则:

架构设计:对于需要训练深度的模型(超过12层),Pre-LN是更安全的选择。它消除了复杂的学习率预热需求,简化了超参数调优。对于较浅的模型(如BERT的12/24层),Post-LN仍然可行,但需要仔细配置预热策略。

归一化类型:如果计算效率是首要考虑,RMSNorm是一个值得尝试的选择。如果量化兼容性更重要,或者希望确保激活值中心化,LayerNorm更为合适。两种方法在最终性能上差异不大,选择往往取决于架构传承和工程便利性。

分布式训练:无论选择哪种归一化方式,LayerNorm类方法(包括RMSNorm)都比BatchNorm更适合分布式训练。它们不需要跨设备同步统计量,简化了实现并减少了通信开销。

推理优化:值得注意的是,一些研究发现,训练完成后可以移除LayerNorm层而不显著影响性能。这表明归一化层的主要作用在于稳定训练过程,而非在最终模型中提供必要的计算。但这种做法需要额外的微调步骤,在实际应用中需要权衡收益和成本。


Transformer选择LayerNorm而非BatchNorm,是NLP数据特性与深度网络训练动力学的双重选择。序列数据的变长特性、批量统计量的不稳定性、训练推理的一致性需求、分布式训练的便利性,这些因素共同指向了LayerNorm作为更优解。而Pre-LN设计的兴起,则进一步解决了深层Transformer的训练稳定性问题,为现代大语言模型的成功奠定了基础。理解这些选择背后的原理,不仅有助于更好地使用现有模型,也为设计新的架构提供了指导。

参考文献

  1. Ioffe, S., & Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift. ICML.
  2. Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). Layer Normalization. arXiv:1607.06450.
  3. Xiong, R., et al. (2020). On Layer Normalization in the Transformer Architecture. ICML.
  4. Shen, S., et al. (2020). PowerNorm: Rethinking Batch Normalization in Transformers. ICML.
  5. Zhang, B., & Sennrich, R. (2019). Root Mean Square Layer Normalization. NeurIPS.
  6. Santurkar, S., et al. (2018). How Does Batch Normalization Help Optimization? NeurIPS.
  7. Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS.
  8. Radford, A., et al. (2019). Language Models are Unsupervised Multitask Learners. OpenAI.
  9. Touvron, H., et al. (2023). LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971.