怎么按住 logit?
本课一问:上一课找到的病根是「logit 被一步步养大」。能不能不降学习率,直接把 logit 按住?按哪里、怎么按?
这一课先不碰:logit 大了以后在 BF16 里的舍入(C9 细算,本课只点到);FFN 激活的截断(SiTU-GLU、swiglu_limit,C15)。
从已有出发
模型里有两处 softmax,也就有两处 logit 会失控:注意力里的 q·k/√d(C3),和输出层的 logits(每个候选词一个分数)。C3 第 3 课用「小明 / 苹果 / 小王」这一行分数 8 / 7 / 9 算过 softmax,也在 Dig 里留了一句:除以 √d 不是一劳永逸。C5 第 7 课留下的数字是:Kimi K2 用原版 Muon,中等规模 run 的最大注意力 logit 很快超过 1,000。
先自己设计:只靠 ÷√d 和梯度裁剪
朴素的想法:注意力已经除以 √d 了,梯度也裁剪了,还要什么?先看 logit 被放大之后 softmax 会怎样——把 C3 那一行分数乘 k 倍:
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
四种做法各管一段:soft-cap 在这一步直接压,QK-Clip 在更新之后回头缩权重,QK-Norm 从源头上不让 logit 超过上界;输出层那一处由 z-loss 管(下面单讲)。
为什么 ÷√d 按不住
÷√d 的推导(C3 第 3 课)假设 q、k 的各维独立、方差为 1——那是初始化那一刻。训练中两件事会同时发生:WQ、WK 变大,q、k 变长;该互相关注的 q、k 越来越对齐。一旦对齐,d 项同号相加,点积按 d 增长,而不是 √d——μP 的论文专门指出过这一点 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条原文:训练中 q 与 k 相关,q·k 按大数定律随 d 增长,而初始化时两者不相关、按中心极限定理随 √d 增长;所以 μP 用 1/d 而不是 1/√d(第 5 课)。 出处Tensor Programs V 脚注 8 ↗需联网 。
试三件事:① ρ 拖到 1、a 保持 1:每头 256 维时 logit 约为 16(理论值 a²·ρ·√d = 16,实测随这一对随机向量略有出入),不是 1;② 再把 a 拖到 4:红线按 a² 涨到两百多,绿线一动不动;③ 把 d 切到 32(我们项目的每头维数):同样完全对齐时理论值只有 5.66,QK-Norm 后恰好是 5.66——维数越大,对齐之后的 logit 越大,QK-Norm 的上界也越高。
改进一:输出端的 z-loss——把 log Z 拉回 0
输出层的 logits 有一个交叉熵完全看不见的方向:所有 logit 一起加一个常数。softmax 不变,loss 不变,梯度在这个方向上恰好为 0(交叉熵对 V 个 logit 的梯度之和是 Σ(pi − yi) = 1 − 1 = 0),于是 log Z = log Σ ezi 可以一直漂,没有任何力量把它拉回来。
z-loss 管的是 Wortsman 说的第二类不稳定——输出 logit 与 log 概率发散 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条他们在小模型上复现了这类发散,并用 PaLM 的 z-loss(系数 1e-4)缓解;为什么漂移会导致发散,文中与低精度下的数值问题联系在一起。 出处Wortsman et al. 2023 §3.1.2 ↗需联网 。上面组件最后一列提醒了另一件事:logit 漂到几十、上百后,BF16 相邻两个可表示数的间隔变成 0.25、0.5 乃至更大——两个本该分得清的 logit 被存成同一个数,C9 精度会回到这里。
改进二:注意力端——四种按法
QK-Norm:从源头钉住 q、k 的长度
把 q、k 在打分之前各自做一次 RMSNorm(带可学习的逐维增益),再点积:
| 维度 | 含义 | 真实规模 | 小规模 |
|---|---|---|---|
| T | 序列长度(例句 5 个 token) | 5 | 5 |
| dh | 每头维数(head_dim) | 256 | 4 |
归属要写对:QK-Norm 首提于 Henry 等人 2020 年的低资源翻译论文(ℓ₂ 归一化加可学习尺度) 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条5 个低资源翻译方向上平均提升 0.928 BLEU;动机是让 softmax 不那么容易任意饱和。 出处Henry et al. 2020(Findings of EMNLP) ↗需联网 ;把它用到大规模的是 ViT-22B——在 8B 参数附近,注意力 logit 失控,权重塌成几乎 one-hot、熵接近 0,对 q、k 做 LayerNorm 之后才稳 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条Qwen3 技术报告引用的就是这一篇。OLMo 2 报告写「QK-norm 首先由 Dehghani 等提出」,这是它的误记。 出处ViT-22B(Dehghani et al. 2023)§2 ↗需联网 。今天 Qwen3 / Qwen3.8、OLMo 2、Gemma 3、GLM-4.5 都用它。
soft-cap:在这一步直接压
Gemma 2 把注意力 logit 过一个 50·tanh(z/50)(最终层用 30),logit 永远不超过 50 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条原文引 Bello et al. 2016;soft_cap 取值 50.0(自注意力)与 30.0(最终层)。 出处Gemma 2 §2 ↗需联网 。代价在上面「改进方案」的表里:被压扁的那几个 logit,tanh 的导数接近 0,梯度传不回去。下一代 Gemma 3 就把 soft-cap 换成了 QK-Norm 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条原文:受 Dehghani、Wortsman、Chameleon 启发,we replace the soft-capping of Gemma 2 with QK-norm。 出处Gemma 3 §2 ↗需联网 。
QK-Clip:超标之后回头缩权重
🔍 K2 用的是 MLA:QK-Clip 对不同分量怎么分?
MLA(C3 第 10 课)的 q、k 各有两部分:每个头自己的「内容」分量 qC、kC,和带 RoPE 的分量 qR、kR——其中 kR 是所有头共享的。K2 的做法:qC、kC 各乘 √γh;qR 乘 γh;共享的 kR 不动,免得一个头超标把所有头都缩了。
DeepSeek-V4 又走了一步:它的注意力结构允许在打分之前直接对 query 的每个头和唯一的压缩 KV 头做 RMSNorm,报告明说「因此在 Muon 优化器里不使用 QK-Clip」 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条§2.3.3 描述 QKV 归一化,§2.4 的 Avoiding Exploding Attention Logits 一段说明因此不用 QK-Clip。旧 M8 课把后一句的位置写成了 §2.3.3。 出处DeepSeek-V4 技术报告 §2.3.3 与 §2.4(本地 PDF 第 12、14 页) ↗ ——K2 的 MuonClip 被一个归一化换掉了。
我们自己的模型上:QK-Norm 开 / 关
读图三点:不开 QK-Norm 时,学习率 3e-2 的最大注意力 logit 终值是 6784,开了之后是 16.4;开 QK-Norm 那一组开局的最大 logit 就是 4.34,在上界 5.66 以内,后来超过 5.66 是因为可学习增益长大了;同一学习率下,开 QK-Norm 的最终 val 都不比关着差(3e-2 时 5.045 对 5.832),基线学习率下的差距在噪声以内。
2026 年各家怎么选
| 模型 | 注意力 logit | 输出 logit | 出处 |
|---|---|---|---|
| Qwen3 / Qwen3.8 | QK-Norm(q_norm、k_norm) | — | Qwen3 技术报告 §2;Qwen3.8 权重分项(R2) |
| OLMo 2 | QK-Norm(RMSNorm) | z-loss 10⁻⁴ | OLMo 2 §3.3.2–3.3.3 |
| PaLM | — | z-loss 10⁻⁴ | PaLM §5 |
| Gemma 2 → Gemma 3 | soft-cap 50 → QK-Norm | Gemma 2 最终层 soft-cap 30 | Gemma 2 §2;Gemma 3 §2 |
| Kimi K2 / K3 | QK-Clip(τ = 100) | — | K2 §2.1;K3 沿用 K2 的权重裁剪(R3 §3.6) |
| DeepSeek-V4 | QKV RMSNorm,不用 QK-Clip | — | V4 §2.3.3、§2.4(本地 PDF) |
| Qwen3.8-Flash-Next | 自报没有用 qk-clip | — | Flash-Next 技术报告(R2 §1.5.2,自报) |
共识是「一定要按住」,分歧在按法:从源头归一化(QK-Norm、QKV RMSNorm)成了多数,事后约束(QK-Clip)在 Muon 系里仍有人用。同一思路还在往 FFN 的激活上延伸(SiTU-GLU 软封顶、swiglu_limit 截断),C15 展开。
常见误解一:「÷√d 已经把 logit 的尺度定死了。」它只在初始化、q 与 k 独立时把方差拉回 1;训练中 q、k 变长、对齐,logit 照样长到上千(我们项目里就长到了几千)。C3 第 3 课那个 Dig 的伏笔在这里兑现。
常见误解二:「开了 QK-Norm,logit 就永远有界,不用再管。」上界是 max|gq|·max|gk|·√d,增益是可学习的;我们项目里开 QK-Norm 的最大 logit 就从 4 左右长到了十几。它把失控的速度压下来了,仪表仍然要看。
常见误解三:「z-loss 改变了模型的预测。」softmax 对整体平移不变,z-loss 只把 log Z 拉回 0,系数又只有 10⁻⁴;它补的是交叉熵在「整体平移」方向上缺的那股回复力。
常见误解四:「QK-Clip 是一种梯度裁剪。」它不碰梯度,也不改这一步的前向和反向;它在更新之后缩那个头的 Wq、Wk,约束的是权重的增长。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 不降学习率,直接限制两处 softmax 的输入尺度:注意力 logit 与输出层的 log Z |
| ② 数学上为什么可能有效? | softmax 饱和时雅可比趋于 0(梯度传不回)、QK-Norm 的上界(柯西-施瓦茨)、交叉熵在整体平移方向上梯度为 0,都可证 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条直接求导与不等式。 出处待补 ;「按住尺度就能减少 spike」是理论动机 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条第 3 课的悬崖宽度 ∝ 1/M 给了动机;是否消除 spike 要靠实验。 出处待补 |
| ③ 实验上为什么最后选了它? | ViT-22B 在 8B 规模靠 QK-Norm 训稳;Wortsman 的小模型上 qk-layernorm 与 z-loss 把学习率敏感度大幅降低;Gemma 3 用 QK-Norm 替换 soft-cap;K2 用 QK-Clip 训完 15.5T;我们项目里 QK-Norm 把 logit 从几千压到十几 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条「哪一种最好」各家结论不同,2026 年仍在分歧中;各家的「全程无 spike」都是自报。 出处待补 |
一句话
先停在这里:记住「对齐之后点积按 d 长」「QK-Norm 上界 = 增益 × √d」「z-loss 补的是平移方向」。
再深一层:读 K2 §2.1 与 Wortsman §3.1,展开上面 MLA 的 Dig。
下一个缺口
稳定手段都齐了:小模型上调好的学习率,放大到宽 20 倍的模型还能用吗? → 第 5 课:小模型上调好的学习率,大模型能用吗?
回扣:C6 第 4 课给了一条路——拟合超参缩放律;那一课说另一条路「换参数化,让学习率不随宽度变」(μP)在 C8 第 5 课兑现。μP 的论文里还有一句和本课直接相关:标准参数化下,一步更新之后注意力 logit 会随宽度变大。
你可能会问
- 「QK-Norm 会不会让模型表达不了『特别确定』的注意力?」上界随增益可学,模型需要时可以把增益学大;它限制的是「不知不觉地长」,不是「不许长」。
- 「为什么输出层不也用 QK-Norm 那种归一化?」输出 logit 本来就是最终 RMSNorm 的输出乘 lm_head,长度由 lm_head 的范数决定;z-loss 管的是它们整体的水平(log Z),两件事不同。Gemma 2 在最终层用过 soft-cap 30。
- 这一课还没有收到真实提问;你的提问会记到
05-问答记录/C8-L4.md。