序列模型与Transformer

层归一化的放置(layer norm placement)

/ LAY-er norm PLAYS-ment /

层归一化,是一个小小的「打理家务」的步骤,它在下一步计算之前,把流经每个词元的数值重新缩放到一个一致、安分的范围——不太大,也不太小。没有它,向上穿过一摞深层的数值会失控地膨胀或缩小,训练就散架了。所谓「放置」,指的是一个看似微不足道、却结果举足轻重的设计抉择:你把这个归一化步骤放在每一层的哪个位置。

主要有两种选择。在后归一化(post-norm,即最初的设计)里,归一化排在注意力或前馈块之后、且在其残差连接之后——层先干活,把输入加回来,再归一化。在前归一化(pre-norm)里,归一化排在最前,在块之前,于是残差通路从下到上一路干净、未经归一化。这看似只是琐碎的重排,却改变了训练时梯度的流动方式,而一旦你堆起许多层,这一改变便变得决定性。

实践上的结论是:前归一化在深处远更易训练。后归一化模型常需要精巧的预热计划与小心的调参,否则干脆发散;而前归一化模型即便很深也训练稳定,这正是当今大多数大型 Transformer 采用它的原因。诚实的细微处在于:这份稳定并非免费——后归一化在你能驯服它时,有时能达到略好的最终质量。这是一桩货真价实的权衡,而这么个看着不起眼的放置决定,竟能成就或毁掉一次造价上亿的训练,谦卑地提醒着我们:这门领域有多大一部分是经验性的工程,而非干净的理论。

两个模型,除一处外完全相同:一个在每个子块之前归一化(前归一化),另一个在之后(后归一化)。在 12 层时两者都训得好。到 48 层时,后归一化模型需要小心的学习率预热才不至于爆炸,而前归一化模型开箱即可平稳训练。

把一个步骤挪动这么一点点,就决定了一个深层模型到底能不能训得起来。

前归一化与后归一化是一桩真权衡,而非免费升级。前归一化能稳定地训练深层模型,是当今的常见选择;调好的后归一化有时能达到略高的最终质量。无论选哪种,归一化本身都不是可选项——没有它的深层 Transformer 根本训不起来。

又称
pre-normpost-normPre-LNPost-LN层归一化層歸一化LayerNorm