—— 当扩散模型学会"记住"过去
扩散语言模型(DLM)一直有个尴尬的身份:理论上很强,实际用起来很慢。
就像一辆概念车——外观炫酷,性能指标惊人,但真要上路,油耗高得吓人。
问题出在哪?
扩散模型的生成方式是"全序列多次去噪"。每一步都要对整个序列(prompt + 已生成部分)做一次完整的 forward pass。生成 100 个 token?可能需要 50 步 × 100 个位置 = 5000 次完整的 attention 计算。
相比之下,自回归模型(如 GPT)虽然也是逐个生成,但它有个杀手锏:KV Cache。一旦生成了第 N 个 token,它的 key 和 value 就被缓存起来,后续生成永远不用再算。
FreeCache 的核心创新:把 KV Cache 的思想"移植"到扩散模型。
FlashDLM 的研究者发现了一个关键现象:
在扩散模型的去噪过程中,已确定 token(或 block)的 KV 投影在后续步骤中非常稳定。换句话说,future tokens 对 earlier positions 的影响会快速衰减。
这就像你在写一篇文章:
FreeCache 把生成序列分成固定大小的 block(比如每块 32 或 64 个 token),采用类似半自回归的分块处理策略。
第一步,对整个序列做一次完整的 forward pass,计算所有位置的 KV。
从第二步开始,采用"增量计算"策略:
步骤 1: [Block1][Block2][Block3][Block4][Block5] ← 全量计算
步骤 2: [Block1][Block2][Block3][Block4][Block5] ← Block1 冻结,其余重算
步骤 3: [Block1][Block2][Block3][Block4][Block5] ← Block1-2 冻结,其余重算
步骤 4: [Block1][Block2][Block3][Block4][Block5] ← Block1-3 冻结,其余重算
...
这就像砌墙:
FreeCache 设定了一个简单的启发式规则:
如果某个 token 在连续 K 个去噪步骤中保持不变(unmasking 过程中一直是确定状态),则认为它"稳定"了,可以冻结其 KV。这个 K 通常取 2-3,在实践中效果很好。
冻结 KV 后,注意力计算需要特殊处理:
FreeCache 天然适合半自回归(semi-autoregressive)生成:
| 模型 | 最高加速比 | 精度损失 |
|---|---|---|
| Dream-7B-Instruct | 4.42× | GSM8K 等基准下降 1-2% |
| LLaDA-8B-Instruct | 6.32× | 几乎无损 |
关键发现:
Guided Diffusion 是另一个训练-free 的优化技术:
| 任务 | 平均加速比 | 最长上下文加速 |
|---|---|---|
| MMLU-PRO / GSM8K / PiQA 等 | 12.14× | - |
| GSM8K 8-shot(生成长度 256) | - | 34.1× |
具体数据:
| 模型 | 类型 | 延迟(GSM8K 8-shot) |
|---|---|---|
| Qwen2.5-7B | 自回归 | ~15s |
| Llama3-8B | 自回归 | ~15s |
| Dream-7B + FreeCache + Guided | 扩散 | ~0.43s |
扩散模型不再是"又强又慢"的代名词。
扩散模型的去噪过程有一个特点:早期步骤变化大,后期步骤变化小。
虽然扩散模型使用双向注意力,但研究者发现:
Future tokens 对 earlier positions 的影响会快速衰减。这意味着,即使理论上每个位置都能看到所有其他位置,实际上"远距离"的影响很小。
FreeCache 把这个经验观察变成了系统性的优化。
FreeCache 最大的优点是:不需要重新训练模型。
更智能的冻结策略:
FreeCache 的出现,让扩散模型首次在效率上追平了自回归模型。
这不仅仅是技术胜利,更是范式之争的转折点。
优势:
优势:
FlashDLM 论文发布后,社区反响热烈:
FreeCache 的意义,不亚于 Transformer 架构对 RNN 的替代。
它证明了:扩散模型不仅可以"更强",还可以"更快"。
当效率不再是瓶颈,扩散模型的独特优势(双向注意力、迭代细化、并行生成)将真正释放。
下一代语言模型,可能不再是"一个一个往外蹦",而是"整体逐步清晰"。
"不再试图让扩散模型模仿自回归的生成方式,而是让扩散模型用自己的方式,达到自回归的效率。"
—— FreeCache 的哲学
还没有人回复