Pre/Post/Peri-LN · QK-Norm
Transformer 架构 · 归一化放置

Pre/Post/Peri-LN 与 QK-Norm:归一化放在哪,决定残差与 logits 怎样增长

同一个 block,LayerNorm 放在残差相加之后(Post-LN)、模块输入之前(Pre-LN),还是模块两端各一次(Peri-LN),会改变前向方差与反向梯度。 QK-Norm 则把归一化推进 attention 内部,直接压住 q·k 的 logits 尺度。 本页按五篇原文核对公式、放置、规模实验与各自的失败条件,并用一个可手算的残差链示意解释三种放置的取舍。

Vaswani 2017 · Xiong 2020 · Henry 2020 · ViT-22B · Peri-LN 2025 Attention Is All You Need ↗ On Layer Normalization ↗ Query-Key Normalization ↗ ViT-22B ↗ Peri-LN ↗
TL;DR · 30 秒抓住核心

Post-LN 是原始 Transformer 的写法:y = Norm(x + Module(x))(Vaswani §3.1)。相加发生在 Norm 里面,前向方差被压住;代价是反向梯度每层都要穿过 LN。 原始配方用 4000 步 warmup;Xiong et al. 把 warmup 的必要性归因到初始化时输出端附近的梯度尺度(§3.3)。

Pre-LN 把 Norm 挪到模块入口:y = x + Module(Norm(x)),并在预测前加 final LN。残差干道变成恒等路径,warmup 可以去掉;但模块输出未经归一化就进入干道,方差会在训练中累积。 Peri-LN 再在模块输出上加一次 Norm,把乘法增长改成加法增长(§3.3, Eq. 4)。

QK-Norm 是另一条轴:它不碰残差干道,只在 softmax 前压住 q·k。Henry et al. 用 ℓ2 normalization + 可学习温度 g;ViT-22B 用 LayerNorm 处理 q、k。 没有 QK normalization 时,ViT-22B 在 8B 模型上看到 attention logits 增长到 50000 以上,softmax 接近 one-hot(Appendix B)。

下面的数字卡分别标出 Post-LN 的 warmup 成本、去掉 warmup 后的 BLEU 损失,以及 Peri-LN 在 3.2B 规模上的平均分。三种残差放置与 QK-Norm 的口径不同,不能把某一组的增益直接搬到另一组。

4000 步
原始 Transformer 的 warmup_steps
Post-LN 用它换稳定(Vaswani §5.3)
8.45 BLEU
Post-LN 去掉 warmup 的 IWSLT14 De-En
有 warmup 时约 34(Xiong §3.2)
58.56 avg
Peri-LN 3.2B 平均基准分
Pre-LN 56.69 / Post-LN 46.45(Table 1)
01

同一个 block,LN 放在残差相加前、后或两端,前向方差与反向梯度会走向不同极端

先分清两件事:残差干道跨层累积什么,attention 内部的 logits 又由什么控制;Post/Pre/Peri 改的是前者,QK-Norm 改的是后者。

一个 Transformer block 由 attention 和 FFN 两个子层组成,每个子层都带一条残差连接。把 LayerNorm 放在 residual add 之前、之后,还是在模块输出上再加一次,是三种不同的计算图;公式只差括号的位置,但括号决定了哪一段被归一化、哪一段保持裸露。

Post-LN 写成 y = Norm(x + Module(x))(Vaswani §3.1;Peri-LN §3.1, Eq. 1)。相加发生在 Norm 里面,所以每个 block 的输出在进入下一层前已经被归一化;跨层残差干道携带的是归一化后的状态,未归一化的和只存在于 block 内部。 容易记反的一点是:Post-LN 的残差干道并不跨层累积未归一化和,真正把未归一化模块输出留在干道上的是 Pre-LN。Post-LN 的代价在反向:主干梯度每层都要穿过 LN。 Xiong et al. 的均值场分析给出,初始化时最后一层 FFN 权重的梯度上界是 O(d√ln d),不随层数 L 下降(§3.3, Theorem 1);实验中 6–14 层 Post-LN 的该梯度范数维持在 1.6 左右(Figure 3)。 这也解释了原始 Transformer 为什么需要 warmup:没有 warmup 时,IWSLT14 De-En 的 BLEU 只有 8.45,有 warmup 时约 34(§3.2)。

Pre-LN 写成 y = x + Module(Norm(x)),并在预测前加一次 final LN(Xiong Table 1;Peri-LN §3.1, Eq. 2)。LN 只碰模块输入,残差干道是恒等路径;模块输出未经归一化就直接加进干道。 初始化时方差大致随深度线性增长,训练开始后可能转为指数增长(Peri-LN §3.2, Figure 1)。论文的措辞是:一旦参数更新放大了输入,Pre-LN 的 hidden-state variance 会指数累积。 大激活因此可以沿残差路径一路保留到深层;在 3.2B 模型上,Pre-LN 的 top-100 绝对激活在 0.5B token 左右就超过 FP16 上限 65,504(§7.2, Appendix K)。

QK-Norm 是另一条轴。即使残差干道稳定,attention 内部的 q·k 仍可能变大;softmax 只看差值,logits 一大就接近 one-hot。 Henry et al. 给了一个可手算的例子:softmax([760,752,750]) = softmax([12,4,2]) = [0.99962, 0.00034, 0.00005](§3)。 ViT-22B 在 8B 模型上观察到,没有 QK normalization 时 attention logits 会增长到 50000 以上,softmax 变成 one-hot;同一段落还报告,loss 在 2000 步内开始持续上升(Appendix B)。

所以「归一化放哪」不是一个问题,而是两个:残差干道要不要在跨层时被压住,attention logits 要不要在 softmax 前被压住。Post/Pre/Peri 回答第一个,QK-Norm 回答第二个;把两者混为一谈,就会把某一处的收益错记到另一处。

02

Post-LN 用 warmup 换稳定,Pre-LN 用残差直通换掉 warmup,QK-Norm 则从 attention 内部下手

三条路线各自解决了上一节的一个失败模式,但都没有同时处理「残差方差」和「logit 尺度」;Peri-LN 是把第三种植入方式补上分析。

Post-LN · Vaswani 2017

先相加,再归一化

原始 Transformer 的每个子层都是 Norm(x + Sublayer(x))(§3.1)。前向方差被压住,但优化依赖 warmup:原文用 4000 步线性 warmup,Adam 的 β2 设为 0.98(§5.3)。 Xiong et al. 后来把这种依赖归因到输出端附近的梯度尺度(§3.3)。

Pre-LN · Xiong 2020

先归一化,再进模块

把 LN 挪到模块输入,残差路径保持恒等;预测前再加 final LN(Table 1)。论文证明初始化时 Pre-LN 的梯度尺度不随深度放大(Theorem 1),并在 IWSLT14、WMT14、BERT 上验证 warmup 可以去掉(§4)。 代价是模块输出未经归一化就进入残差干道。

QK-Norm · Henry 2020 / ViT-22B

把 q、k 先归一化,再点积

Henry et al. 把 q、k 在 head 维上做 ℓ2 normalization,用 cosine similarity 替代 dot product,再乘一个可学习的 g; g 初始化为 log2(L² − L),L 取训练集序列长度的 97.5 百分位(§3)。 ViT-22B 改用 LayerNorm 处理 q、k,再除以 √d(§2)。两者都只改 attention 内部。

Peri-LN · Kim et al. 2025

模块两端各一次

Gemma、OLMo 等开源模型已经在模块输出上加 LN,但缺少统一分析;Peri-LN 把这种做法命名为「模块周围」的归一化,写成 y = x + Norm(Module(Norm(x)))(§3.3, Eq. 3)。它保留 Pre-LN 的直通残差,同时把模块输出先压住再汇入。

三条残差路线并不是互斥的标签:Post-LN 把 LN 放在主路径上,Pre-LN 把它放在模块分支上,Peri-LN 在模块分支的两端各放一个。QK-Norm 则可以和其中任何一种叠加,因为它不碰残差干道。 下一节的公式只差括号位置,但括号决定了哪一段被归一化。

03

三个公式只差括号:Norm 在相加后、相加前,还是模块两端各一次

记住每条公式里 Norm 作用在哪一段:Post 作用于「x + 模块输出」,Pre 只作用于模块输入,Peri 作用于模块输入和模块输出。

Post-LN:yl = Norm( xl + Module(xl) )
Vaswani §3.1;Peri-LN §3.1, Eq. 1。Norm 在相加之后,主路径被归一化。
Pre-LN:yl = xl + Module( Norm(xl) )
Xiong Table 1;Peri-LN §3.1, Eq. 2。Norm 只在模块入口,残差干道是恒等映射;预测前另有 final LN。
Peri-LN:yl = xl + Norm( Module( Norm(xl) ) )
Peri-LN §3.3, Eq. 3。Eq.3 只覆盖每层;论文另含可选的 embedding/final LN。模块输入和输出各一次 Norm;残差干道本身仍不归一化。

三者的差别可以压缩成一句话:Post-LN 归一化「和」,Pre-LN 归一化「输入」,Peri-LN 归一化「输入和输出」。 因此 Post-LN 的跨层状态被压回固定尺度,Pre-LN 的跨层状态是「上一层的和 + 未归一化模块输出」,Peri-LN 的跨层状态是「上一层的和 + 已归一化模块输出」。 这也解释了为什么 Peri-LN 的残差干道仍然可能有大值:它没有把整条干道归一化,只是把每层汇入的增量先压了一次(§3.3)。

QK-Norm:把 logits 的来源先压回 [−1, 1]

Henry et al. 的 QKNorm 只处理 q、k,不处理 v:先沿 head 维做 ℓ2 normalization,再做点积,于是每个元素变成 cosine similarity,取值范围是 [−1, 1]。直接用 cosine 值会让 softmax 的差值太小,所以再乘一个可学习标量 g;g 的初始化是 g0 = log2(L² − L),其中 L 是训练集源/目标序列长度的 97.5 百分位(§3, Eq. 3)。

q̂i = qi / ||qi||,  k̂i = ki / ||ki||
Attention = softmax( g · Q̂K̂T ) V
Henry §3, Eq. 2 与 Eq. 5。它替换的是 softmax(QKT/√d)V,不是替换 LayerNorm。

这个 g 不是可有可无的温度:去掉它之后,IWSLT'15 en→vi 的测试 BLEU 从 33.24 掉到 24.53(完整 QKNorm 33.24 取自 Table 2,消融行取自 Table 6)。 原因是 cosine similarity 被限制在 [−1, 1],不放大时 softmax 几乎均匀,模型难以把注意力集中到该看的位置;g 把范围拉开,但仍然是可学习的,不会像原始点积那样无界。

AttentionViT-22B = softmax( (1/√d) · LN(XWQ) · LN(XWK)T )
ViT-22B §2。这里用 LayerNorm 而不是 ℓ2,保留 1/√d 缩放;与 Henry 的 QKNorm 不是同一条公式。

QK-Norm 的两个实现共享同一个目标:让 q、k 的点积不被向量范数支配,logits 不会无界增长。Henry 的做法是把向量长度信息完全去掉,再学一个全局温度;ViT-22B 的做法是保留 LayerNorm 后的尺度,再用固定的 1/√d。 两者都不改变残差路径,也不替代 Post/Pre/Peri 的选择。把「QK-Norm」当成一个公式会混淆这两条路线;本页在引用时分别标注。

自己动手:切换 Post / Pre / Peri,看残差链怎样累积

下面的玩具模型只跟踪一个标量方差 v:每层模块增益为 k,Post 把 v 压回 1,Pre 把模块输出按 (1+k) 乘进干道,Peri 在模块输出上加一次归一化、每层只加 1。 拖动层数 L 与增益 k,观察末态方差与「幅度雅可比」G。G 是这条标量递推的导数,不是论文的梯度范数;它的作用是让三种放置的取舍可以被手算。

输入 v0
1.0000
第 2 层
2.2500
第 4 层
5.0625
幅度雅可比 G
5.0625
当前放置:Pre-LN
Pre-LN 把模块输出按 (1+k) 乘进干道;k = 0.5 时每层 ×1.5。前向末态 5.0625;幅度雅可比 G = 5.0625(玩具模型,不是论文的梯度范数)。
v: 1.0000 → 1.5000 → 2.2500 → 3.3750 → 5.0625

这里的 v 是标量方差示意,不是 hidden state 的真实维度;参数由页面自定,默认值 L = 4、k = 0.5 对应下面手算的组 A;数值由页面参数计算,非原文数字。

手算对账:两组参数,Post / Pre / Peri 各算一遍点开看每一步

组 A:L = 4,k = 0.5

  1. Post-LN:v1 = v2 = v3 = v4 = 1;G = 0。
  2. Pre-LN:v1 = 1 × 1.5 = 1.5;v2 = 1.5 × 1.5 = 2.25;v3 = 2.25 × 1.5 = 3.375;v4 = 3.375 × 1.5 = 5.0625;G = 1.54 = 5.0625。
  3. Peri-LN:v1 = 1 + 1 = 2;v2 = 2 + 1 = 3;v3 = 3 + 1 = 4;v4 = 4 + 1 = 5;G = 1。

组 B:L = 3,k = 1.0

  1. Post-LN:v1 = v2 = v3 = 1;G = 0。
  2. Pre-LN:v1 = 1 × 2 = 2;v2 = 2 × 2 = 4;v3 = 4 × 2 = 8;G = 23 = 8。
  3. Peri-LN:v1 = 1 + 1 = 2;v2 = 2 + 1 = 3;v3 = 3 + 1 = 4;G = 1。

JS 只做乘加与幂,显示固定 4 位小数;上面两组参数在页面上切换后逐位一致。这个递推是页面自定的简化示意,依据是 Peri-LN §3.2/§3.3 对 Post「常数方差」、Pre「乘法累积」、Peri「加法累积」的描述; 它不复现 Xiong 的梯度定理,也不含 attention 的 QK logits。

这个交互覆盖了什么、没覆盖什么分支对照

覆盖:三种放置对残差干道的标量方差递推——Post 归一化相加结果、Pre 不归一化模块输出、Peri 归一化模块输出;层数 L 与模块增益 k 对末态方差和幅度雅可比的影响。

未覆盖:真实的 LayerNorm/RMSNorm Jacobian;attention 与 FFN 两个子层的区别;Post-LN 的 warmup 与优化器;Pre-LN 训练中方差从线性转为指数的完整动力学;QK-Norm 的 logits 与 softmax;embedding/final LN;多头与 head 维。

因此它是简化示意,不是原文公式的数值还原。论文的梯度结论见 §3.3 的 Theorem 1、§3.4 的 Figure 3;本交互的 G 只是标量递推的导数。

04

Post-LN 的输出端梯度不随深度下降,Pre-LN 按 1/√L 缩小;Peri-LN 用输出归一化把方差增长改成加法

这一节把「为什么需要 warmup」「为什么 Pre-LN 也会不稳定」「Peri-LN 多花一次归一化买到什么」拆成可核对的量与条件。

Post-LN:|| ∂L/∂W2,L ||F ≤ O( d√ln d )
Pre-LN:|| ∂L/∂W2,L ||F ≤ O( d√(ln d / L) )
Xiong §3.3, Theorem 1。两条都是初始化时最后一层 FFN 权重的 Frobenius 范数上界;Post 的界与 L 无关,Pre 的界随 L 增大而缩小。

这两个上界解释了一个反直觉现象:Post-LN 在初始化时的输出端梯度更大,却需要更小的学习率;Pre-LN 的输出端梯度更小,却能承受更大的学习率。推断 原因是梯度的绝对尺度不是全部因素,梯度在层间的分布与方差累积同样影响稳定性(依据:Xiong §3.3 Theorem 1;§3.4 Figure 3)。 Xiong 的实验把这件事量化到具体模型:在 6–14 层的 Post-LN 中,最后一层 FFN 的梯度范数维持在 1.6 左右;Pre-LN 的同一量随深度增加而下降(§3.4, Figure 3)。

warmup 的代价:4000 步,去掉后 BLEU 8.45 vs 约 34

原始 Transformer 用 4000 步 warmup(Vaswani §5.3)。Xiong et al. 在 IWSLT14 De-En 上做了去掉 warmup 的对照:Post-LN 若直接从较大的学习率开始,BLEU 只能到 8.45;使用 warmup 的模型约 34(§3.2)。 warmup 的长度本身也是敏感超参数:把 Twarmup 设为 500,在 lrmax = 5e-4 与 1e-3 两种设置下,BLEU 分别只有 31.16 与 2.77(§3.2)。 这组数字说明 Post-LN 的 warmup 不是「加上就稳」的装饰,而是会改变最终质量的优化配置。

Pre-LN 的对照则显示 warmup 可以去掉:论文报告 Pre-LN 在 IWSLT14 De-En 上达到约 34 BLEU、validation loss 约 4,与 Post-LN 可比;并且收敛更快——Pre-LN 的第 9 个 checkpoint 就接近 Post-LN 的第 15 个 checkpoint(§4.2)。 这些结论有条件:它们是 IWSLT14 De-En 的特定模型配置,不能直接外推到所有 Pre-LN 训练。

Peri-LN:多一次归一化,把乘法增长改成加法

Peri-LN 的关键不是「再多一个 LN」,而是把模块输出先归一化再汇入残差。论文把这一项写成 Norm(Module(Norm(xl))),并假设它的方差近似常数 β0,于是有:

Var(xl+1) ≈ Var(xl) + β0
Peri-LN §3.3, Eq. 4。前提是归一化后的模块输出方差近似常数;结果是线性或次指数增长,而不是 Pre-LN 的乘法累积。

论文进一步给出最后一层 MLP 权重的梯度界(Proposition 3.1,非正式陈述):Pre-LN 的梯度范数正比于 ||h||(Eq. 6);Peri-LN 的界是 4γ√D·||h|| / ||a||(Eq. 8),多了一个由模块输出范数 ||a|| 提供的阻尼因子。也就是说,即使 ||h|| 很大,Peri-LN 的梯度也不会按同样比例放大。 这是局部上界,不是全局收敛证明;论文把形式化陈述与证明放在 Appendix C(§3.4)。

结构上,Post-LN 和 Pre-LN 每个子层各有一次归一化(Pre-LN 另加 final LN);Peri-LN 每个子层两次。论文没有报告这部分带来的吞吐、显存或 FLOPs 变化;Peri-LN §5.3 做了固定 γ=1 与可学习 γ 的对照(可学习 γ 略好);Peri-LN §5.4 讨论 hidden-state redundancy 与模块输出归一化的关系;Peri-LN Appendix L 的 Figure 39(d) 报告固定 γ 后深层主路径贡献下降。 因此「多一次归一化」的代价目前只能从结构上确认,不能给出一个原文没有的开销数字。

QK-Norm:50000 的 logits 与 1e-3 的学习率

ViT-22B 的 QK normalization 是为训练稳定性加的:在 8B 模型上,没有它时 attention logits 会增长到 50000 以上,softmax 接近 one-hot;同一段落还报告,loss 在 2000 步内开始上升(Appendix B)。 加上 q、k 的 LayerNorm 后,模型可以用 1e-3 的学习率稳定训练;而原始 ViT 的做法是随规模把学习率从 1e-3 降到 4e-4(Appendix B)。 这是一个「用归一化换学习率预算」的例子,但它不是单项改动:ViT-22B 同时用了 parallel layers 和去掉 bias 的 LayerNorm(§2)。因此不能把全部收益归给 QK-Norm。推断(依据:ViT-22B §2 的三项改动;Appendix B 的对照只做到 ViT-L。)

Peri-LN 原文里需要并置的一处口径图注与正文

Figure 1 的图注写:we observe the growth in hidden-state variance for both Pre-LN and Post-LN architectures(1.5B 模型,训练到 6.3B token)。 §3.2 正文写:Post-LN maintains a roughly constant variance。两处并置:图注把 Post-LN 也纳入了「方差增长」的描述,正文则说 Post-LN 的方差大致恒定。 页面不替原文判断哪一处是笔误,也不把两句话合并成一句。

05

四条路径只改一段:Post 改相加后,Pre 改相加前,Peri 改两端,QK-Norm 改 attention 内部

把每个 block 的计算图摊开,看清哪一段被归一化、哪一段仍然裸露;这张图也解释了为什么 QK-Norm 可以和三种残差放置任意组合。

Post-LN LN 在 residual add 之后 x y Module + Norm 残差 主路径:相加后归一化;梯度每层穿过 Norm Pre-LN LN 在模块输入 x y Norm Module + 残差 主路径:恒等直通;模块输出不归一化 Peri-LN LN 在模块两端 x y Norm Module Norm + 残差 主路径:恒等直通;模块输出先归一化 QK-Norm 只改 attention 内部 X XW^Q Norm Q̂ XW^K Norm K̂ Q̂K̂T · g softmax → ×V QK-Norm 在 softmax 前压住 logits;残差干道不变 Henry:ℓ₂ + 可学习 g;ViT-22B:LayerNorm + 1/√d
图 1 · 四种归一化放置。按 Vaswani §3.1、Xiong Table 1、Peri-LN §3.3 Eq. 3、Henry §3 与 ViT-22B §2 重绘;QK-Norm 画在 attention 内部,不改变残差路径。

表 1 · 四种机制各自归一化什么(页面整理;出处见各行)

机制归一化对象残差干道主要目标出处
Post-LN 相加后的和 x + Module(x) 每层被归一化 压住前向方差 Vaswani §3.1;Peri-LN §3.1
Pre-LN 模块输入 Norm(x) 不归一化,恒等直通 保持梯度通路 Xiong Table 1;Peri-LN §3.1
Peri-LN 模块输入与模块输出 不归一化;输出侧先压一次 控制方差增长 Peri-LN §3.3
QK-Norm q、k(head 维) 不适用(不碰残差) 控制 attention logits Henry §3;ViT-22B §2

这张表把「归一化对象」和「残差干道」分开看:三种残差放置的分工不同——Post-LN 把 LN 放在主路径上;Pre-LN 与 Peri-LN 的主路径都不归一化,差别只在汇入残差前有没有把模块输出压一次;QK-Norm 则完全在 attention 内部,和残差路径正交。 因此在实现里,QK-Norm 可以和 Post-LN、Pre-LN、Peri-LN 任意组合;它不是第四种「残差放置」,而是 attention 子层内部的一个额外步骤。

06

规模上 Peri-LN 的平均分更高,QK-Norm 把爆掉的 attention logits 拉回可训练范围

三组实验的口径不同:Xiong 是 IWSLT14 的 warmup 对照,Peri-LN 是 400M–3.2B 的 30B-token 预训练,QK-Norm 是 5 个低资源语言对的翻译;数字不能跨组直接比较。

warmup:Post-LN 去掉后 8.45,Pre-LN 的第 9 个 checkpoint 接近 Post-LN 的第 15 个

Xiong et al. 的 IWSLT14 De-En 实验里,Post-LN 去掉 warmup 后 BLEU 只有 8.45;有 warmup 时约 34。 warmup 长度从 4000 缩到 500 时,lrmax = 5e-4 的模型还能到 31.16,lrmax = 1e-3 的模型只有 2.77(§3.2)。 Pre-LN 去掉 warmup 后仍能达到约 34 BLEU,并且第 9 个 checkpoint 就接近 Post-LN 的第 15 个 checkpoint(§4.2)。这些是 IWSLT14 De-En 的单一任务结果,不是跨任务的统一结论。

Peri-LN:3.2B 平均分 58.56,比 Pre-LN 高 1.87 分

Peri-LN 的主实验是 400M / 1.5B / 3.2B 的预训练,每个规模训练 30B token、跑 5 个种子;模型规模不含 embedding 参数,Loss 是 C4 evaluation loss(Table 1 表注)。 在 3.2B 上,Peri-LN 的平均分 58.56,Pre-LN 56.69,Post-LN 46.45;Peri-LN 比 Pre-LN 高 1.87 分(58.56 − 56.69),比 Post-LN 高 12.11 分(58.56 − 46.45)。 C4 evaluation loss 为 3.11,Pre-LN 3.20,Post-LN 4.43;Peri-LN 比 Pre-LN 低 0.09(3.20 − 3.11)。SFT Avg. 为 59.02,Pre-LN 57.08,Post-LN 49.33;Peri-LN 比 Pre-LN 高 1.94 分(59.02 − 57.08)。

另外两个规模也同向:1.5B 上 Peri-LN 平均分 56.55,Pre-LN 53.71,差 2.84 分(56.55 − 53.71);400M 上 51.57 对 49.69,差 1.88 分(51.57 − 49.69)。 这些是 5 个种子的均值;Table 1 同时给了标准差,论文没有在表注里报告显著性检验。

Table 1 · Peri-LN 与 Post/Pre-LN 在 400M / 1.5B / 3.2B、30B token、5 个种子下的平均基准分;每个模型规模不含 embedding 参数。数据转自 Table 1;Loss 为 C4 evaluation loss,SFT Avg. 为 LIMA 指令微调后的平均分,发散 checkpoint 不计入。

SizeArch.ARC-EasyHellaSwagPIQASIQAWinograndeAvg.LossSFT Avg.
400MPost-LN35.70 ±1.0928.91 ±0.1662.26 ±0.7334.48 ±1.0450.88 ±0.7542.457.4646.44
400MPre-LN54.87 ±1.6334.17 ±1.6668.79 ±1.3439.73 ±0.5950.88 ±2.3549.693.4349.96
400MPeri-LN57.51 ±0.8137.46 ±0.3469.48 ±0.3940.64 ±0.5152.74 ±0.6751.573.3451.96
1.5BPost-LN42.92 ±0.9331.69 ±0.4166.72 ±0.4035.84 ±0.6150.30 ±1.8745.495.3848.95
1.5BPre-LN61.51 ±1.2239.88 ±1.5371.41 ±0.8841.23 ±0.9754.51 ±2.0753.713.2953.89
1.5BPeri-LN66.17 ±0.2143.94 ±0.3473.63 ±0.2442.34 ±0.8356.64 ±0.4456.553.1856.94
3.2BPost-LN45.30 ±3.2333.59 ±0.4466.45 ±2.8635.82 ±1.0951.10 ±1.6046.454.4349.33
3.2BPre-LN65.24 ±2.3244.23 ±2.3273.86 ±1.1942.68 ±0.0757.42 ±2.5156.693.2057.08
3.2BPeri-LN68.73 ±0.5746.99 ±0.2174.31 ±0.4143.00 ±0.7359.76 ±0.7858.563.1159.02

QK-Norm:5 个语言对平均高 0.928 BLEU,去掉 g 后掉 8.71

Henry et al. 的翻译实验覆盖 5 个低资源语言对:TED Talks 的 ar→en、en→he、gl→en、sk→en,以及 IWSLT'15 的 en→vi;基线是 Nguyen & Salazar 2019,QKNorm 行同时使用 LayerNorm、PreNorm 与 FixNorm(Table 2 表注)。 5 个语言对的测试 BLEU 差值分别为 0.45、0.66、0.68、2.20、0.65,平均 0.928(Table 2)。 差值不是均匀的:最小的 en→vi 只有 0.45,最大的 gl→en 有 2.20。

Table 2 · 5 个低资源语言对的测试 BLEU(Moses 脚本);Δ 为 QKNorm − 基线,页面计算。Table 3 用 SacreBLEU,数值略有差异(en→vi 为 33.18,Table 2 为 33.24);Table 3 未逐行转录,仅引用 en→vi 单元格。本页用 Table 2 计算 0.928。

语言对Nguyen & Salazar 2019QKNorm + LayerNormΔ
en→vi32.7933.240.45
ar→en36.0936.750.66
en→he28.2828.960.68
gl→en22.0124.212.20
sk→en32.5833.230.65

消融里最关键的一项是 g:去掉可学习缩放后,en→vi 的 BLEU 从 33.24 掉到 24.53,差 8.71;去掉 LayerNorm 后是 31.56,差 1.68;把 V 也做 ℓ2 normalization 后是 32.34,差 0.90(33.24 取自 Table 2,消融行取自 Table 6)。 推断(由 Table 6 各行差值反推;原文只写 biggest drop comes from omitting g。):QKNorm 的收益主要来自「归一化 q、k + 可学习缩放」这一组合,而不是「对所有投影都做归一化」。

Table 6 · QKNorm 组件消融(IWSLT'15 en→vi,消融行取自 Table 6;完整 QKNorm 33.24 取自 Table 2 的 Moses 基线);Δ 为跨表计算。这里假定 Table 6 与 Table 2 同为 Moses 脚本口径;若口径不同,Δ 需重算。

实验Test BLEUΔ
完整 QKNorm(取自 Table 2)33.240.00
Without g24.538.71
Without LayerNorm31.561.68
Without FixNorm32.630.61
Without FixNorm or PreNorm32.201.04
ℓ2-normalizing V along with Q and K32.340.90

论文还扫了两个维度:Table 4 把 head 数从 2 到 32 变化,测试 BLEU 在 2–32 之间保持稳定(32.30–33.24);Table 5 把 g 初始化用的百分位从 75 扫到 99,97.5 百分位对应 33.24,75 百分位对应 32.58。 Table 4/5 未逐行转录,正文只引用这两个结论对应的单元格。

ViT-22B:先压 logits,再谈学习率

ViT-22B 的 QK normalization 不是消融里的一个装饰,而是让 8B 模型不 diverged 的必要条件:没有它时 attention logits 超过 50000,softmax 接近 one-hot,loss 在 2000 步内开始上升(Appendix B)。 加上 q、k 的 LayerNorm 后,1e-3 的学习率保持稳定;原始 ViT 的做法是随规模把学习率降到 4e-4(Appendix B)。 但 ViT-22B 同时改了 parallel layers 和 bias 移除(§2),而 QK-Norm 的对照实验只做到 ViT-L(Appendix B),所以 22B 模型上的结果不能全部算到 QK-Norm 头上。推断(依据:ViT-22B §2 的三项改动;Appendix B 的对照只做到 ViT-L。)

一个反直觉的对照来自 Peri-LN:§4.4 与 Figure 5 报告,训练稳定时 final-layer gradient norm 的排序是 Post-LN >> Pre-LN >> Peri-LN;而 Table 1 的平均分排序是 Peri-LN > Pre-LN > Post-LN。两个排序方向相反。 论文没有把 final-layer gradient norm 当作排名指标;§5.2 用逐层梯度分布的均匀性解释稳定性,Figure 7 显示 Peri-LN 在初始化和训练结束时都更均匀。 推断(依据:§4.4 只给排序;§5.2 才讨论逐层均匀性,两处量的口径不同。)

Xiong 原文里一处需要并置的 BERT 速度表述不替原文改数

§4.2 的 BERT 段落写: the Post-LN model achieves 1.69 validation loss at 500k updates while the Pre-LN model achieves similar validation loss at 700k updates, which suggests there is a 40% speed-up rate. 同一句里 Pre-LN 需要更多 updates 才达到相近 loss,与「speed-up」的方向相反;页面并列保留原文,不替作者改数,也不据此重算速度。

07

两种修法各自只覆盖一段:残差方差与 attention logits 不能互相替代

把每个结论的适用规模、未报告项和失败条件写清楚;超出这些条件,页面不做外推。

一句话判据

先定位失败模式,再选归一化

如果失败表现为残差干道的大激活、FP16 溢出或 loss spike,优先看 Pre-LN 的方差累积与 Peri-LN 的输出归一化;如果失败表现为 attention 权重接近 one-hot、logits 随训练增大,优先看 QK-Norm。 Post-LN 的 warmup 敏感是第三类问题,改的是优化配置,不是把 LN 挪到别处就能等价解决。