Diffusion Language Models 的优势与局限性 – sean goedecke
sean goedecke
Diffusion Language Models 的优势与局限性
Google 最近发布了 Gemini Diffusion,其速度之快让所有人印象深刻。据说他们甚至不得不放慢演示速度,以便人们能够看清发生了什么。 Diffusion 模型有什么特别之处,使其文本生成速度如此之快? 未来,所有的文本模型都应该采用 Diffusion 模型吗?
我之前写过一篇关于 Diffusion 模型的简单解释 here。 如果你对 Diffusion 模型的不同之处没有任何直观的了解,我建议从那里开始。 这篇文章将更详细地介绍这些差异如何影响模型输出的性能和质量。
为什么 Diffusion 模型速度快
Diffusion 模型和传统的自回归模型(如 4o、Claude 以及所有当前的基于 Transformer 的模型)之间的最大区别在于,Diffusion 模型在每一步都生成完整的输出。 对于像“abcd”这样的输出,自回归架构将逐个 token 生成:“a”、“ab”、“abc”,最后是“abcd”。 而 Diffusion 模型将生成整个内容,并在每一步中变得更加准确:“xycz”、“aycd”,然后是“abcd”。 这对速度有两个有趣的影响:
- 与普通的自回归模型不同,Diffusion 模型可以并行生成最终 token 序列的正确部分(例如,开始和结束)
- 与自回归模型不同,Diffusion 模型可以被训练成进行更少的迭代(以换取产生质量较低的输出)
你可以在放慢速度的 Gemini Diffusion 演示中看到第一点。 第一帧中的生成至少是部分准确的(即,它一次性生成了一堆“正确”的 token)。 第二点很容易想象:只需在演示进行到一半时停止,然后想象这就是你得到的输出。 如果你对最终输出中存在一些错误感到满意,那么速度会快两倍。
固定长度 vs 任意长度的响应
Diffusion 模型和自回归模型之间的另一个主要区别是,Diffusion 模型总是生成固定长度的输出(例如,256 个 token)1。 从技术上讲,自回归模型也会生成固定长度的输出(一个 token),但实际上,它们被设计为生成长度不同的 token 序列。 这对速度和质量都有影响。
由于我在上一节中提出的原因,在生成其输出集中的 token 数量(或更高)时,Diffusion 模型 始终 比自回归模型更快。 如果 Diffusion 模型需要生成 512 个 token,它可以分两块完成(24 次迭代),而不是需要 512 次迭代。 但是,如果你只需要生成少量的 token,自回归模型可能会更快。 如果 Diffusion 模型总是进行 12 次迭代,那么为了生成一个六个 token 的响应,它将比自回归模型做多一倍的工作。
在长上下文上的性能
因为它们以块为单位生成输出,Diffusion 模型在摄取长上下文窗口时速度较慢。 原因非常技术性。 考虑一下 attention 在自回归语言模型中是如何工作的。 每个 token 都会根据序列中的所有先前 token 进行“检查”,以确定哪些先前 token 最相关。 例如,如果模型即将生成一个名称,则该名称在序列中的先前用法都将具有较高的 attention 分数,因为它们被用于确定现在要生成的名称。
之所以这不是简单的二次方关系,是因为存在“key-value cache”:因为自回归模型逐个 token 生成,所以不需要再次检查先前生成的 token 的 attention 分数。
Diffusion 模型不能像自回归模型那样轻松地从 key-value cache 中获益,因为当前正在生成的 token 块在每次去噪迭代中都可能发生变化,因此无法缓存。 因此,Diffusion 模型必须针对正在生成的 token 块中的每个 token,每次去噪迭代 都重新计算2针对整个上下文窗口的 attention。 这加起来比等效的自回归模型花费的 FLOP 多得多。
Diffusion 模型可以推理吗?
自回归模型最近的一个显著发展是引入了“推理模型”:一种自回归模型,经过训练可以在生成面向用户的答案之前,生成一个思维链的内部独白。 很容易理解为什么自回归模型可以做到这一点:它们会思考它们生成的每个 token,因此在任何时候它们都可以“改变主意”并采取新的立场,通常通过输出一个像“But”或“Wait”或“Hold on”这样的 token。
那么 Diffusion 模型呢? 我认为目前还不清楚。 也许我们会看到建立在 Diffusion 基础上的强大的推理模型。 但如果我们没有看到,那将是因为“改变主意”的推理范式不能很好地映射到逐块生成。 为什么 Diffusion 模型会生成一个 token 块,其中间包含“Wait, I was wrong”? 这难道不会在去噪迭代中被“编辑掉”吗?
Diffusion 模型有可能以完全不同的方式改变主意。 当 Diffusion 模型对输出进行多次迭代并更新 token 时,它是否像推理模型那样改变主意? 有多少推理工作可以嵌入到去噪迭代中? 至少有一些 current research 正在探索这个方向。
对 Diffusion 模型进行推理的潜力持广泛怀疑态度的一个原因是,它们每个 token 所做的工作远少于自回归模型。 这只是模型花费“思考”的空间更少。 然而,这不一定是 Diffusion 的一个内在特征。 现在 Diffusion 模型是为了速度而构建的,但我们可以想象一个 Diffusion 模型被构建为对每个生成的 token 块进行数十万次迭代。 像这样的模型很可能可以进行相当多的推理。
是的,文本 Diffusion 模型有时会使用 Transformers
最后一个技术点:像我 here 中所做的那样,谈论“Diffusion 模型”与“Transformer 模型”并不完全正确。 当 Diffusion 模型对整个输入进行迭代时,它会使用一个内部模型来预测输入的哪些部分是噪声并且应该被移除。 该内部模型通常是一个 Transformer 模型,如 Mercury Coder 中所示。 与“normal”自回归 Transformer 模型不同,Diffusion 模型内部的 Transformer 不预测 token logits,而是预测输入中噪声的位置。
然而,从 AI 开发人员(而不是在 AI 实验室训练模型的人)的角度来看,这有点像学术上的区别。 Diffusion 模型的行为特征是相同的,无论底层噪声预测模型是否是 Transformer,因为整体 Diffusion 架构已经足够不同,足以主导行为上的差异。
总结
- Diffusion 模型速度快,因为它们可以“并行”输出多个 token,而不是逐个 token 进行
- 如果你想要更高的速度,但以质量为代价,它们可以很容易地被调整为更少的编辑(即去噪)迭代
- 然而,如果你只需要两到三个 token,自回归模型可能会更快,因为 Diffusion 模型无论如何都需要进行所有的去噪迭代
- Diffusion 模型(至少是使用 Transformer 的模型)在上下文中有大量 token 时速度会较慢,因为并行输出许多 token 需要大量无法缓存的 attention 工作
- 目前还不清楚在 Diffusion 之上构建推理模型有多容易。 我敢打赌,在 AI 实验室中正在进行一些非常有趣的私人研究。 直观地说,它们不会像自回归模型那样很好地进行思维链推理,但可能还有其他方法可用于在此处花费测试时间计算
- Diffusion 模型可以并且确实使用 Transformer,但这并不会使它们像自回归模型一样运行
- 当然,具有 256 个 token 输出大小的 Diffusion 模型可以输出更少的 token(例如,通过生成一些真实 token 并用空白 token 填充输出窗口的其余部分)。 它也可以通过进行多次迭代来生成更多的 token,每次迭代生成 256 个 token。 ↩
- 在这里,我假设 Diffusion 模型使用 Transformer 作为去噪模型。 有关详细信息,请参阅本文后面的部分。 ↩
如果你喜欢这篇文章,请考虑订阅 以获取关于我的新文章的电子邮件更新。 May 22, 2025 │ Tags: ai, diffusion