这一页把本系列的要点压成面试题和自检题;答案里的数字和结论都能在前两篇找到出处。

待审核草稿。 这一篇还没有经过站主审阅,事实、取舍和措辞都可能修改;引用前请回到文中链接的一手资料核对。

面试常见问题

掩码扩散的前向过程和训练目标是什么?$1/t$ 起什么作用?

前向过程:给定 $t\in[0,1]$,每个位置独立地以概率 $t$ 换成 [M],变成 [M] 以后不再变回(吸收态)。训练目标:抽 $t\sim U(0,1]$ 和对应的 $x_t$,只在被遮的位置算交叉熵(cross-entropy),再乘 $1/t$(LLaDA 式 3)。$t$ 小时平均只有 $tL$ 个位置贡献损失,乘 $1/t$ 后每个 $t$ 的期望份量都是 $L$ 个 token,整个目标成为负对数似然(NLL)的上界。换遮盖调度时,连续时间权重是 $-\alpha_t'/(1-\alpha_t)$,目标本身不变,变的是梯度方差(variance)。模型不需要知道 $t$,空位数已经写在输入里。

它和 BERT 的掩码语言模型(MLM)有什么区别?为什么 BERT 不能直接拿来生成?

网络可以一样,都是双向 Transformer;区别在遮盖比例的分布和加权。BERT 固定遮约 15%,选中位置取平均,没学过从全空开始,也没有似然解释。掩码扩散每条样本抽一个 $t$,从几乎不遮到全遮都练过,乘 $1/t$ 后与最大似然挂钩;MDLM 把它写成 MLM 损失的加权平均。LLaDA 也指出 MaskGIT 省掉 $1/t$,就失去了和最大似然的联系。

“任意顺序”是什么意思?用两个 token 的例子说明目标等于什么。

训练时目标对所有生成顺序取平均;推理时可以按任何顺序填空。两个 token:两个都遮的概率 $t^2$,只遮一个各 $t(1-t)$,乘 $1/t$ 后积分,两项权重都是 $1/2$,目标等于“从左往右”和“从右往左”两种自回归(AR)损失的平均。教学数字下是 $(1.833+2.996)/2=2.414$;模型实际生成这条序列的负对数似然是 $-\ln 0.105=2.254$,所以是上界,两种顺序不一致时就不紧。一般长度下,RADD 定理 2 证明它等价于任意顺序自回归的目标。代价是难的顺序也要学:同样验证损失约需 AR 16 倍计算(Nie 等,2024-10)。

一步落多个 token 为什么会出错?怎样决定一步落几个?

一步里的几个 token 各自从边缘分布选出,彼此没看到。答案一半 full house、一半 high card 时,一步落两个,合法率只有 0.5。Fast-dLLM 按置信度决定:超过阈值(默认 0.9)的都落,没有就落最高的一个;它的定理给出条件:$n$ 个位置的置信度都高于 $1-\epsilon$ 且 $(n+1)\epsilon\le1$ 时,并行取最大与联合取最大一致。固定步数的代价有第三方测量:LLaDA-8B-Instruct 在生成长度 128、块大小 32 的设置下每步固定 4 个时,GSM8K 从 73.6 降到 61.7(73.6 是同一设置下每步 1 个的基线(baseline))。Feng 等的定理 4.4 对词表(vocabulary)大小为 16 的最坏情况 HMM 给出线性步数下界,前提是论文中的因子化反向过程和小学习误差假设。它把生成 HMM 支持集之外的序列计为错误,不是所有推理任务的加速上限。实际仍要比较相同任务准确率下的延迟。

为什么扩散 LM 不能直接用 KV cache?有哪两种补法,各有什么代价?

自回归里位置 $i$ 的 K、V 只依赖不会再变的 $x_{\le i}$;双向注意力下,从第 2 层起每个位置都读了每步都在变的空位,连提示词(prompt)的 K、V 也会变,LLaDA 每步都要整段重算。补法一是近似缓存(Fast-dLLM):相邻步的 KV 很相似,块内复用、块后刷新,要另外验证准确率。补法二是分块扩散:块间从左到右、块内扩散,已完成块的 KV 精确可缓存,块越小越接近自回归,困惑度(perplexity)更好,但并行度也更低。

并行解码为什么不会自动更快?用 roofline 估一次低并发和高并发。

用第二篇的教学模型(只算线性层,数字取自 roofline 一篇:7B、BF16、H100 SXM5 峰值),一次前向的下限是 $\max(4.18\,\text{ms},\ n\times0.01415\,\text{ms})$,约 295 个位置以下是读权重说了算。单条请求、提示词 512、生成 256:AR 约 1,076 ms;整段扩散不缓存,每步算 768 个位置,每步落 1 个要 2,782 ms,比 AR 还慢;分块 $G=32$ 加缓存、每步落 4 个约 275 ms,快 3.9 倍。并发上去后,扩散每落 1 个 token 要算 $G/\tau=8$ 个位置,封顶 8,834 tok/s,AR 封顶 70,671 tok/s,约 37 条并发时 AR 追平。所以低并发加速约为 $\tau$,算力饱和时吞吐比约为 $\tau/G$。第三方测量和 Google 对 DiffusionGemma 的说明都指向同一方向。

读到“某扩散模型 1000+ tokens/s、比自回归快 N 倍”,你会问什么?

四件事:多少并发;基线是不是同一张卡、同一个引擎;这个速度下质量是多少、用的什么阈值;计时里算没算 prefill、每块的提交前向和固定开销。例子:Gemini Diffusion 的 1479 tokens/s 不计 0.84 s 开销;Mercury 报告的对照速度是 Artificial Analysis 在各家云服务商上测得的中位数;LLaDA2.0 论文的扩散模型和基线用的是不同引擎(dInfer 对 SGLang),SGLang 博客把两边放在同一引擎上时,倍数从约 2.1 降到约 1.9;Mercury 2.5 没写 GPU 型号。质量也要同时看:DiffusionGemma 模型卡上多数基准低于同规格 Gemma 4。截至 2026 年 10 月,这些数字都来自厂商或方法作者。

DFlash 和原生扩散 LM 有什么区别?

DFlash 只用分块扩散写草稿:小模型读目标模型的特征,一次前向写一块,最后由自回归的目标模型验证,只保留连续接受的前缀,所以输出分布等于目标模型的分布,质量风险不在扩散一侧。原生扩散 LM 自己决定最终 token,要承担并行落 token 不一致和同族质量更低的风险。两者的速度账同构:都是一次前向算一整块,接受(或落下)得越多越划算,高并发时收益都会缩小。

自检

如果真的理解了,你应该能解释:
  1. 把 $1/t$ 去掉,两个 token 的目标变成什么?为什么它不再有似然解释?
  2. LLaDA 在 GSM8K 上的分数是每步落几个 token 测的?这对“又好又快”的说法意味着什么?
  3. 扑克的例子里,为什么一步落两个只有一半是合法牌型?Fast-dLLM 的阈值规则会怎么处理它?
  4. 整段扩散不缓存时,为什么每步只落 1 个 token 反而比 AR 慢?换成分块加缓存后,账哪里变了?
  5. 在算力饱和的区间,扩散和 AR 的吞吐比为什么约等于 $\tau/G$?给出一组 $\tau$ 和 $G$,算一次交叉点。

参考论文

本页术语 6
交叉熵 cross-entropy
分类任务的标准损失,−log 正确类的概率
方差 variance
估计量的波动幅度;重要性加权最容易在这里爆炸
基线 baseline
用来比较新方法的参考方法或配置
词表 vocabulary
模型能输出的所有 token 的集合
提示词 prompt
提供给模型的任务说明、上下文和示例
困惑度 perplexity
exp(交叉熵),语言模型的常用指标