只预测下一个 token,是不是太短视?
这是一堂岔路课,兑现一个伏笔。C0 第 5 课说,2026 年所有主流开源 LLM 的预训练目标仍是「下一个 token 的交叉熵」,改动都在目标之外——其中之一是「多预测几个 token 的辅助目标」。
本课一问:只预测下一个 token,是不是太短视?
这一课先不碰:投机解码为什么不改变输出分布(C13 证明);草稿模型本身怎么训(EAGLE-3、DSpark 的细节)。
从已有出发
贯穿例句「小明把苹果给了小王」的 5 个 token 进入模型,lm_head 在每个位置给出「下一个 token」的概率,训练时和真实的下一个 token 算交叉熵(C0 第 5 课)。所以这句话在第 1 个位置学「把」、第 2 个位置学「苹果」……最后一个位置没有目标。
先自己设计:只预测下一个
- ① 朴素方案
- ② 它在哪失败
- ③ 改进方案
训练信号只看一步之外;生成时一步一个 token,没有任何办法跳着走。Gloeckle 等人 2024 的说法是:只学下一个 token,模型容易被「局部的强相关」带着走,少了对后面几步的规划。
改进:从并行的几个头,到保持因果链的串行模块
这件事的出处要写对:多 token 预测不是 DeepSeek 首创。
- Stern、Shazeer、Uszkoreit 2018:分块并行解码——并行预测后面几步,再退回到被打分模型确认的最长前缀 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条目标是加速生成,底座是自注意力的序列到序列模型。 出处Stern et al. 2018(需联网) ↗需联网 。
- ProphetNet 2020:预训练目标改成「未来 n-gram 预测」,每个位置同时预测后面 n 个 token。
- Gloeckle 等人 2024(Meta):共享主干上接 n 个独立的输出头。13B 模型在 HumanEval 上多解出 12%、MBPP 多 17%;用这些头做自投机解码,推理最快 3 倍。但他们的图 3 也显示,小模型上多 token 预测反而比基线差,好处随规模变大才出现 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条代码任务上的结论;作者自报。 出处Gloeckle et al. 2024 摘要与图 3(需联网) ↗需联网 。
- DeepSeek-V3:不用独立的并行头,而是串行的模块,每一深度都保留完整的因果链:
极小真数字:当草稿用,每步能出几个 token
试三件事:① α = 0.85、D = 1:每步期望 1.85 个 token;拖到 0.90 是 1.90——DeepSeek-V3 实测 1.8 倍 TPS,差出来的是草稿和验证本身的开销;② 把 D 拖到 3:上限是 4,可期望涨得越来越慢,因为后面的草稿要前面都被接受才算数;③ 看锚点那张表:424,699,392 个参数由 config 逐项算出,与 safetensors 实测分项逐位相同,约占全模型的 1.5%。
2026 的分歧:MTP 留在预训练里,还是挪出去?
- 留在里面:锚点 Qwen3.8 有 1 层 MTP,model card 说它「用多步方式训练」;GLM 系、DeepSeek-V4 都在预训练里带 1 层。
- 训完再改:Kimi K3 预训练带 1 层 MTP,之后把它微调成 EAGLE-3 式的草稿器,直接优化接受率(R3 记录)。
- 干脆挪出去:DeepSeek-V4.1 报告原文:「骨干预训练时去掉 MTP 模块,用 DSpark 做投机解码,DSpark 在骨干预训练之后单独训练」 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条官方没有公开「去掉 MTP 后骨干质量」的消融。 出处DeepSeek-V4.1 报告 §2(需联网) ↗需联网 。
这是一个真实的分歧点:MTP 的两个用处——让训练信号更密、给推理当草稿——被 V4.1 拆开了,前者放弃,后者交给专门的草稿模型。哪条路更好,目前没有同条件对照。
常见误解一:「MTP 改了预训练的目标。」 主损失仍然是下一个 token 的交叉熵;MTP 是乘了 λ 的辅助项,推理时可以整个丢掉。
常见误解二:「用 MTP 当草稿会让输出变差。」 投机解码用目标模型验证草稿,输出分布与不用草稿时完全一样(C13 给出证明);草稿猜得差只会让它变慢,不会让它变错。
常见误解三:「MTP 一定提升模型质量。」 Gloeckle 等人的小模型反而更差;V4.1 去掉它也没有公开质量对照。它的收益与规模、任务有关。
① 更多参数,不要更多算力(MoE)
- 解决了结构最简单:所有参数对每个 token 都生效。卡在锚点 Qwen3.8-27B 每 token 前向约 51.2 GFLOPs;同家族 2.4T 规模若是 dense,约 4.84 TFLOPs(94 倍)。
- 解决了每个 token 只算 top-k 个专家:Qwen3.8-2.4T-A95B 每 token 约 186.5 GFLOPs,是同参数 dense 的 26 分之一。卡在路由会自我强化地偏心:8 个专家全挤到 1 个时,Switch 负载损失从 0.01 升到 0.08;所有专家的权重仍要常驻显存。
- 解决了把「均衡」写进 loss,路由器被梯度推向均匀。卡在α 难调:太小拉不平,太大干扰主 loss(Switch 在 10⁻¹ 到 10⁻⁵ 之间扫;Wang 2024 的出发点)。
- 解决了偏置只改「选谁」,不进门控、不产生干扰梯度;DeepSeek-V3 前 14.3T token 用 γ = 0.001,最后 500B 设为 0。卡在固定步长在近千个专家时太慢或来回震荡(Kimi K3 报告)→ Quantile Balancing;而且统计范围(整批 vs 单条序列)比「有没有 loss」更要紧。
- 解决了同参数同计算,16 选 2 的 120 种组合变成 64 选 8 的 4,426,165,368 种;共享专家装公共知识。卡在显存账不减:Qwen3.8-2.4T 路由专家占主干参数 97.98%,BF16 权重 4.89 TB。
- 解决了Qwen3.8-2.4T 512 选 10 + 1 共享;K3 896 选 16 + LatentMoE + Quantile Balancing;V4.1 图文两套偏置。卡在共享专家 0、1、2 个都有人用(Qwen3 一个不设),稀疏度从 32 到 64 都有(GLM-5.3 与 V3 为 32、GLM-5.3-Flash 36、K2 48、Qwen3.8 51、K3 56、V4.1-Flash 64)——都是实验选择。
② 长文本:KV 与计算不再随长度等比例涨
- 解决了每个 token 都能精确回看任意一个前文 token。卡在KV ∝ 长度:锚点若 64 层全是全注意力,262,144 token 时 64 GiB。
- 解决了去掉 softmax,求和提前累加成一个固定大小的状态,与长度无关。卡在只加不减:同一个键写两次,读回的是两个值之和;状态最多装 d 对互不干扰的键值(C0 岔路)。
- 解决了写前先擦(delta)、每步衰减(门):锚点 48 层状态共 144 MiB(FP32)、与长度无关;KV 降到四分之一(262,144 时 16 GiB 对 64 GiB)。卡在剩下四分之一的全注意力层仍按长度涨;容量有限,3:1 是实验选出来的。
- 解决了每通道一个衰减;g_min = −5 让 16 token 块内累积不低于 −80,e⁸⁰ ≈ 5.5 × 10³⁴ 在 BF16 范围内(上限约 3.4 × 10³⁸),慢路径删除。卡在MiniMax M1 用线性混合、M2 又退回全注意力:大规模下多跳推理缺陷、训练受访存限制、低精度与缓存难题(官方博客)。
- 解决了lightning indexer 每个 query 只挑 top-2048 条做核心注意力。卡在省计算不省内存:KV 一条不少,每 token 48,068 B;indexer 本身仍要扫全部前文。
- 解决了V3.2 每 token 48,068 B → V4-Flash 3,514 B → V4.1-Flash 890 B(1M 时 0.87 GiB)。卡在是近似:V4.1 自陈 Bounded Replay「数学上不等价」、选择误差可能在未测过的边界情况退化。
③ 训练 4K,使用 128K
- 解决了训练与使用同一个长度,不需要任何折算。卡在注意力项随长度涨:Qwen3-32B(64 层全注意力)在 131,072 时注意力项是 6N 的 215%;早期长序列还带来梯度方差极端值(Li 2021)。
- 解决了DeepSeek-V3 的 14.8T token 全在 4K,之后两段各 1,000 步扩到 32K、128K,只占全部训练 token 的 0.84%;Llama 3 405B 六段、约 800B token。卡在长序列阶段的数据要专门配(长度上采样、领域均衡、合成跨全文任务)。
- 解决了K3:8K → 64K → 256K → 1M(NoPE 也照走课程);V4.1 注意力从头就是压缩稀疏的,直接从 64K 起训。卡在各家配方大多只公开阶段、不公开每段 token 数,无法横向比较成本。
- 解决了每个位置多学一个更远的目标;推理时当草稿,接受率 α 时每步期望产出 1 + α 个 token。卡在DeepSeek-V3 第 2 个 token 接受率 85%–90%,实测 1.8 倍 TPS;V4.1 预训练干脆去掉 MTP,没有公开消融。
证据三问
| 问 | 本课的回答 |
|---|---|
| ① 它解决什么问题? | 每个位置只有一个训练目标(信号稀);推理一步只出一个 token |
| ② 数学上为什么可能有效? | 当草稿时的期望产出 1 + α + … + αD 是算术 证据等级 · 数学可证明 在写明的前提下可以严格推导出来,不依赖实验。只要前提成立,换数据、换规模仍然成立。 本条假设各位置独立以同一概率被接受;真实接受率随位置下降。 出处待补 ;「更密的信号、更好的规划」是理论动机 证据等级 · 有理论动机 有数学或机制上的理由说明它可能有效,但没有证明它一定更好。最后是否采用,仍然要看实验。 本条作者的解释,没有被单独证明。 出处Gloeckle et al. 2024(需联网) ↗需联网 |
| ③ 实验上为什么最后选了它? | Gloeckle 13B 代码任务提升、DeepSeek-V3 1.8 倍 TPS;但小模型更差、V4.1 挪出预训练 证据等级 · 实验验证 由对比实验得出的经验结论,只在出处写明的模型、数据和规模下成立。换了条件可能不再成立,引用时要带上实验设置。 本条作者自报。 出处DeepSeek-V3 §5.4.3(本地 PDF) ↗ |
一句话
MTP 让每个位置多学一个更远的目标,训练信号更密,推理时还能当草稿;它是可以拆掉的辅助项,2026 年有人把它挪到了预训练之后。
回到主线
实验课:4 个专家在我们自己的模型上抢活吗? → 实验课;之后进入 C12 后训练。
你可能会问
- 「锚点的 MTP 层为什么是一层全注意力,而不是 GDN?」 从 safetensors 的张量名看,MTP 模块里是一层完整的全注意力 + FFN(R2 §1.3.1);官方没有解释。Qwen3.8-Flash-Next 的 MTP 里注意力也换成了它的稀疏 QSA(config:mtp_layer_types)。
- 「MTP 和投机解码是一回事吗?」 不是。MTP 是训练目标;投机解码是推理算法,草稿可以来自 MTP 模块、一个小模型,或专门训练的草稿器(EAGLE-3、DSpark)。