Transformer 叠得很深时,训练初期的一次更新就可能把网络推得太远。DeepNorm 从残差连接和权重初始化两处同时下手。它在做 LayerNorm 前,先给残差主路乘上一个按模型深度计算的常数,又在初始化时缩小前馈层以及注意力的 Value 和输出投影权重。
我查了 DeepNet 原始论文的稳定性分析和多组翻译实验。作者用 Post-LN 做起点。普通 Post-LN 在注意力或前馈层与残差相加后做归一化,效果常常不错,层数增加后却容易发散。Pre-LN 把归一化放到子层之前,训练更稳,论文对照中的最终分数又常比能收敛的 Post-LN 低 0.5 到 1.0 BLEU。
问题出在更新幅度
论文在 IWSLT-14 德英翻译上观察 18 层编码器和 18 层解码器。普通 Post-LN 在开头的模型更新幅度突然增大,随后更新几乎停住。更好的初始化能让它收敛,可深层梯度反而更大。这组对照让作者把根因指向过大的模型更新,而非只看梯度是否爆炸。
DeepNorm 的系数随编码器、解码器和层数变化,不是固定的经验数字。作者给出了不同架构的推导式,使模型更新的理论上界不随子层数线性累加。分析以 SGD 为基础,实验则用 Adam 验证它仍然有效。
在 WMT-17 英德翻译中,许多 Post-LN 方法到 50 层编码器加 50 层解码器就发散。DeepNorm 训到 100 加 100 层,测试集得到 28.9 BLEU。同表的普通 Pre-LN 能训到这个深度,分数为 27.4。这组结果说明 DeepNorm 当时同时解决了收敛和质量问题。
这个对照也包含无 LayerNorm 的方法。R-Fixup 和 T-Fixup 能把编码器、解码器都训到 50 层,到 100 层依然发散。ReZero 在混合精度下到 18 加 18 层就失败。DeepNorm 的改动很少,却不只是把 LayerNorm 移动位置。残差乘数、初始权重乘数和它们适用的矩阵必须成套使用。
千层是结构实验,不是通用配方
论文在 OPUS-100 上训练了 500 层编码器加 500 层解码器,共有 2500 个注意力和前馈子层,模型约 38 亿参数。这个模型只训了 4 轮,平均 BLEU 为 32.1,48 层基线为 27.7,高了 4.4 分。200 层版本用 8.63 亿参数得到 31.1,距千层版本只差 1 分,层数增加的收益已在收窄。更大的多语言对照覆盖 87 种语言、7482 个翻译方向,200 层、32 亿参数的 DeepNet 比 48 层、120 亿参数的 M2M-100 高约 5 BLEU。
作者在结论里也把范围写得很清楚,当时主要用机器翻译验证,语言模型预训练、视觉和其他任务还是后续方向。工程上采用 DeepNorm,应按自己的编码器或解码器结构计算系数,同时重测混合精度稳定性、收敛速度和目标任务分数。千层证明了方法的上限,没有替每个模型证明层数越多越好。
层数增加还会增加顺序计算、激活显存和通信。论文证明可以稳定训练,没有证明千层是同算力预算下最快的部署选择。深度收益和系统成本要分别量。