趋近智
层归一化(LN)是每个Transformer块中的基本组成部分,与自注意力子层和前馈子层周围的残差连接一同应用。它的主要作用是通过对每个位置的激活值在特征维度上独立进行归一化,来稳定训练过程中隐藏状态的动态变化。这有助于保持激活尺度的一致性,平滑损失曲面,并通常改善梯度流动,使得训练具有更多层级的网络成为可能。
然而,层归一化步骤相对于残差连接的 放置位置 显著影响训练动态和稳定性。两种主要策略是后归一化(Post-LN),用于原始论文“Attention Is All You Need”中,以及预归一化(Pre-LN),因其增强的稳定性而受到欢迎。接下来分别介绍这两种方法。
在原始Transformer架构中,层归一化应用于子层(如多头注意力或前馈网络)的输出通过残差连接加回到输入 之后。
后归一化块中子层的计算流程如下所示:
后归一化Transformer块中的数据流向。归一化在残差相加之后进行。
特点:
为解决后归一化的稳定性问题,预归一化方法被提出。在这里,层归一化应用于输入,在它进入子层模块 之前,但 在 残差分支内部。残差连接随后将原始的、未经修改的输入 x 添加到子层的输出中。
预归一化块中子层的计算流程是:
预归一化Transformer块中的数据流向。归一化在子层计算之前进行。
特点:
| 特点 | 后归一化 (Post-LN) | 预归一化 (Pre-LN) |
|---|---|---|
| 放置位置 | LayerNorm(x + SubLayer(x)) |
x + SubLayer(LayerNorm(x)) |
| 稳定性 | 稳定性较差,尤其在深层模型中 | 稳定性更好,有助于训练更深的模型 |
| 预热 | 通常需要仔细的学习率预热 | 对学习率预热不那么敏感,常无需预热也能训练 |
| 梯度流动 | 梯度在相加后通过归一化层 | 梯度通过残差路径绕过归一化层 |
| 原始论文 | 是 | 否 (后续改进) |
| 现代应用 | 在非常大的模型中较少见 | 被广泛采用,尤其对于大型模型 |
| 最佳表现 | 经过大量调整有时能达到略好的最佳结果 | 通常更容易调整以获得良好、稳定的结果 |
训练损失曲线。预归一化通常显示稳定收敛。无预热的后归一化可能会发散,而经过适当预热的后归一化可以良好收敛,有时能达到比预归一化略低的最终损失,但需要仔细调整。
尽管原始Transformer使用了后归一化,但预归一化变体在实际应用中具有显著优势,包括训练稳定性提高以及对学习率调度等超参数选择的敏感性降低。通过在输入通过复杂的自注意力和前馈层 之前 进行归一化,预归一化确保了更平滑的优化过程,这在将Transformer扩展到数十甚至数百层时尤为重要。基于这些原因,预归一化常是当代Transformer架构中的首选。但对两种配置的了解,能够帮助我们更好地理解这些强大模型的设计选择和训练过程。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造