Deferred Commitment Decoding for Diffusion Language Models
核心思想
块扩散语言模型(Block DLM)将序列分成固定大小的块逐块解码,实现 KV-cache 复用。但这引入了一个被忽视的问题——边界诱导上下文截断(BICT):
块边界附近的 token 被强制提交,即使附近的未来上下文能大幅降低其不确定性。
DCD(Deferred Commitment Decoding) 的核心思想:不确定的 token 延迟提交,等到滑动窗口扩展带来足够的上下文信息后再决定。
结果:无需训练,平均 +1.73% 准确率,最高 +16.5%(NBDiff 在 IFEval 上)。
背景知识
块扩散解码的工作方式
| 步骤 | 说明 |
|---|---|
| 1 | 将生成序列分成大小为 $B$ 的块 |
| 2 | 对当前块内的 [MASK] token 做扩散去噪 |
| 3 | 块内所有 token 提交(不可撤回) |
| 4 | 用已提交的块作为 KV-cache 上下文,处理下一个块 |
BICT 问题图示
块 k: [token1 ... token_B] | 块 k+1: [token_{B+1} ...]
↑ 边界
这些 token 被强制提交
但其最优上下文窗口
可能延伸到块 k+1 内部
结果:边界附近 token 的预测确定性显著低于块中部 → 低质量提交 → 累积误差。
与其他解码策略的对比
| 策略 | 思路 | 问题 |
|---|---|---|
| 固定块 | 严格按块大小提交 | BICT |
| AdaBlock | 语义感知的变长块 | 块内仍有 BICT |
| Prophet(提前提交) | 尽早提交高确定性 token | 与 DLM 原则矛盾 |
| DCD | 低确定性 token 延迟提交 | 无训练,保持效率 |
方法详解
1. 确定性感知滑动窗口
DCD 用动态滑动窗口 $[L(t), R(t))$ 替代固定块边界:
左边界(锚定到最左未解决 token):
\[L(t) = \arg\min\{i \geq l : x_i(t) = \langle\text{MASK}\rangle\}\]右边界(受约束地扩展):
\[R(t) = \arg\max\{i \leq r : i \leq L(t) + s_{\max} \text{ AND } \sum \mathbb{I}[x_k = \langle\text{MASK}\rangle] \leq s_{\text{init}}\}\]- $s_{\max}$:最大窗口大小(默认 128)
- $s_{\text{init}}$:窗口内最大掩码 token 数(默认 16)
2. 不确定性驱动的 token 提交
只有足够确定的 token 才被提交:
\[S(t) = M(t) \cap [L(t), R(t)) \cap \{i : C(i) \geq \min(\tau, \max_j C(j))\}\]- $C(i)$:确定性度量(最大 logit 概率或负熵)
- $\tau$:确定性阈值(默认 0.9)
- 低确定性 token 保持 [MASK],等待更多上下文
3. 动态块扩展(DBE)
对半因果 DLM(如 NBDiff),当检测到 BICT 条件时:
- 最小解码确定性 < $\tau_{\text{low}}$
- 窗口未达最大
- 掩码 token 数未超限
→ 增量扩展块边界:$e_{\text{step}} = 4$,最大 $e_{\max} = 16$
4. 算法复杂度
每步开销 $O(s_{\max})$(线性于最大窗口大小),典型 $s_{\max} = 128$ → 开销可忽略。
实验结果
主要结果
| 模型 | 平均准确率提升 | 时间变化 | 最大提升 |
|---|---|---|---|
| LLaDA-8B-Instruct | +1.16% | 0.0% | — |
| Dream-v0-Instruct-7B | +2.63% | -2.2% | — |
| Dream-v0-Base-7B | +0.77% | -9.2% | — |
| NBDiff | +5.22% | — | +16.5%(IFEval) |
| 整体平均 | +1.73% | -4.4% | — |
准确率提升的同时,时间还减少 4.4%。
具体基准
| 模型 | 基准 | 基线 | DCD |
|---|---|---|---|
| LLaDA-8B | MATH500 | 40.2% | 41.0% |
| LLaDA-8B | GSM8K | 78.3% | 79.1% |
| NBDiff | MATH500 | 80.1% | 84.4% |
| NBDiff | GSM8K | 87.4% | 91.3% |
| NBDiff | IFEval | 41.9% | 58.4% |
低确定性事件减少
DCD 大幅减少置信度 <0.3 的解码步骤:
- Dream-v0-Base(HumanEval):1393 → 353 步(-75%)
- LLaDA-8B(MATH500):366 → 284 步
消融实验(LLaDA-8B, MATH500)
| 参数 | 最优值 | 说明 |
|---|---|---|
| $s_{\max}$ | 128-256 | 过小限制扩展,过大稀释相关性 |
| $s_{\text{init}}$ | 16 | 过小上下文不足,过大过早提交 |
| $\tau$ | 0.9 | <0.9 激进提交降准确率,=1.0 过慢 |
三个参数均呈单峰准确率曲线 → 超参数选择鲁棒。
vs 其他方法
| 方法 | LLaDA HumanEval pass@1 |
|---|---|
| dKV-Cache-Greedy | 20.4% |
| Prophet(提前提交) | 低于 DCD |
| CCD | DCD 平均高 1.90% |
| DCD | 43.3% |
DCD 证明延迟提交 » 提前提交。
个人思考
- BICT 问题的形式化是关键贡献:之前都知道块扩散有边界问题,但没人清晰地定义和量化 → DCD 提供了理论框架。
- “不确定就等等” 的直觉非常自然:与人类写作类似——不确定的词先空着,写完后面再回来填。
- 无需训练是最大的实用优势:直接在任何块扩散模型上即插即用 → 零额外训练成本。
- NBDiff 上 +16.5%(IFEval) 的巨大提升说明指令跟随任务对边界效应特别敏感——指令的关键词往往出现在意想不到的位置。
- Dream-v0-Base 时间减少 9.2% 是反直觉的:延迟提交不是应该更慢吗?原因是减少了低确定性的无效解码步骤 → 少做错误决策反而更快。