AI 基建
0%
第二部分 · 生成式与多模态架构 · 第 13 章

非自回归与扩散语言模型

作者Changkun Ou
阅读时长约 13 分钟

第 12 章 讨论的是连续状态之间的路径。文本带来了不同的问题:状态是离散类别,输出长度通常也无法预先确定。非自回归生成(NAR) 生成通过同时预测多个位置,试图消除从左到右解码的串行依赖。扩散(diffusion) 则加入固定的前向扰动过程和学习得到的逆向过程。两种思路有所重叠,却不是同义词。单次翻译模型可以是非自回归模型,却不是扩散模型;块扩散模型则可以在块与块之间保持自回归。

这类方法吸引人的地方是更短的依赖链。对于长度为 LL 的输出,自回归(autoregression)LL 个按因果顺序执行的解码步骤;掩码模型则可能用 KK 轮同时修改全部 LL 个位置。这并不意味着计算量会缩小为原来的 L/KL/K。每一轮都可能要为完整序列打分,而且双向状态会随词元变化,无法原样复用常见的因果键值缓存。真正有用的比较不只是「串行还是并行」,还包括依赖深度、模型总工作量、输出长度处理方式,以及统一服务条件下的质量。

2026-08-03T22:54:22.720670 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ 1 0 1 1 0 2 输出长度(词元) 0 50 100 150 200 250 依赖步骤数 自回归 迭代式 NAR
图 13.1. 一种简化解码模型下的依赖深度。自回归每个输出词元需要一个相互依赖的轮次,而八轮迭代解码器的轮数不随长度增长。这里比较的是算法依赖深度,不是实测延迟或总计算量。

把概率分解与执行方案分开

cc 表示源序列或提示词,y=(y1,,yL)y=(y_1,\ldots,y_L) 表示输出。自回归模型把条件概率写成

pθ(yc)=i=1Lpθ(yiy<i,c).p_\theta(y\mid c) =\prod_{i=1}^{L}p_\theta(y_i\mid y_{<i},c).

这里,θ\theta 是模型参数,LL 是输出长度,yiy_i 是第 ii 个词元,y<iy_{<i} 是此前的输出词元。这种分解天然带有停止规则,因为模型可以生成序列结束词元。使用因果 KV 缓存(key-value cache) 时,每次解码只处理一个新的查询位置,同时复用前缀中的键和值。

最初的单次非自回归翻译模型采用另一种分解:

pθ(yc,L,z)=i=1Lpθ(yic,L,z).\begin{gathered} p_\theta(y\mid c,L,z) =\\[-0.4em] \prod_{i=1}^{L}p_\theta(y_i\mid c,L,z). \end{gathered}

其中,zz 是可选的潜在对齐变量或产出数变量。所有输出位置共享编码后的源序列与潜变量,但各位置采样的词元不以其他输出词元为条件。因此,一旦选定 LLzz,所有位置就可以在一次模型评估中同时打分。Gu 等人在多个工作点上报告了显著的延迟下降;其中,与自回归教师差距最小的结果低 2 BLEU,而质量更高的解码会缩小速度优势 (Gu et al. 2018)。BLEU 衡量译文与参考译文之间的 n-gram 重合度。这个差值只属于相应的数据集、分词方式与解码设置,不能作为通用质量单位。

迭代模型引入状态 y(K),,y(0)y^{(K)},\ldots,y^{(0)},并在每一轮内对位置做条件独立分解:

pθ ⁣(y(k1)y(k),c)=i=1Lpθ ⁣(yi(k1)y(k),c).\begin{gathered} p_\theta\!\left(y^{(k-1)}\mid y^{(k)},c\right) =\\[-0.4em] \prod_{i=1}^{L} p_\theta\!\left(y_i^{(k-1)}\mid y^{(k)},c\right). \end{gathered}

这里,kk 是当前精修轮次,y(k)y^{(k)} 是当前完整序列,y(0)y^{(0)} 是最终输出。同一轮中的位置可以并行处理,但第 k1k-1 轮必须等待第 kk 轮。模型可以修改掩码、词元或序列长度,具体取决于算法。

设计 相互依赖的解码轮数 一轮内的工作 长度机制
因果自回归 LL 利用缓存前缀处理一个新位置 停止词元
单次非自回归 11 所有 LL 个位置 预测长度或潜在长度
迭代精修 KK 通常处理许多或全部位置 固定、预测、插入或折叠
块扩散 KL/BK\lceil L/B\rceil 一个最多含 BB 个位置的块 持续追加块,直到满足停止条件

最后一行中,BB 是块大小,KK 是每个块的去噪轮数。这张表计算的是依赖深度,不是 FLOPs 或实际耗时。

为什么独立草稿会混合有效译法

翻译具有多模态性:同一句源文本可以有多种正确译法。假设一种译法写作 “I do not know”,另一种写作 “I don't know”,独立的位置预测可能从两种译法中各取一部分。每个位置的边缘分布都可能合理,联合起来的句子却不合理。重复和遗漏是常见症状,但根本问题是条件独立假设,并不是所有非自回归模型必然失败。

早期系统用两种方式减少这种不确定性。Gu 等人使用产出数潜变量,也就是描述每个源词元会产生多少个目标位置的整数。它既提供对齐,也帮助确定输出长度。他们还让模型学习自回归教师解码得到的输出。序列级知识蒸馏会把一组人工参考译文替换成分布更窄的教师输出 (Kim and Rush 2016)。Zhou 等人在 WMT14 英德翻译上发现,这会降低按对齐估计的词语翻译熵。在他们的实验中,能力较强的非自回归学生通常能从复杂度更高的蒸馏数据中获益 (Zhou et al. 2020)。这是一项经验代理指标和容量趋势,并不是关于真实序列熵的一般定理。

蒸馏曾是经典非自回归翻译的核心做法,却并不是所有并行生成方法在数学上的必要条件。它会改变训练分布,也会转移教师的错误与偏好。如果没有报告教师,学生的速度与质量结果就可能失去关键背景。可复现记录应说明教师模型、教师的解码方法,以及评测使用人工参考还是教师输出。

迭代精修早于扩散语言模型

在扩散语言模型出现之前,已有多种方法在不恢复严格从左到右解码的前提下加入结构:

方法 训练或解码操作 如何处理长度 仍然串行的部分
Mask-Predict 掩掉低置信度位置,再次预测 精修前先预测长度 固定次数的精修轮
Levenshtein Transformer 交替执行删除、占位符插入与词元填充 让序列增长或缩短 编辑迭代
基于 CTC 的解码 发出空白和重复标签,再折叠单调对齐 对所有兼容对齐求和 通常一轮或少数几轮模型评估
Glancing Transformer 训练时展示一部分参考词元 推断时预测长度 单次形式在推断时无需迭代
SUNDAE 在展开的去噪步骤上训练,并反复修复词元序列 通常固定输出画布 去噪迭代

Mask-Predict 通过预先设定若干轮、按置信度精修,比单次解码取得了更好的质量 (Ghazvininejad et al. 2019)。部分自回归的 Levenshtein Transformer 显式执行插入与删除 (Gu et al. 2019)。CTC 系统则对包含空白和重复标签的单调对齐求和 (Libovický and Helcl 2018; Chan et al. 2020)。Glancing 训练会在早期展示较多目标词元,再随训练推进逐渐减少 (Qian et al. 2021);SUNDAE 则让去噪器在多个由自身预测得到的状态上训练 (Savinov et al. 2022)。

这些方法建立了草拟、掩码、插入、删除、折叠与精修等基本操作。Mask-Predict 在算法层面类似吸收态扩散,但它并不是从 D3PM 的逆向链推导出来的,也不会因为使用掩码就自动继承扩散模型的似然下界。比较训练目标时,必须保留这一区别。

在类别状态上定义扩散

D3PM 用有限词表上的马尔可夫链取代高斯扰动 (Austin et al. 2021)。把一个词元表示为独热向量 xt{0,1}Vx_t\in\{0,1\}^{V},其中 VV 是词表大小。令 Qt[0,1]V×VQ_t\in[0,1]^{V\times V} 为列随机转移矩阵,则一步前向过程为

q(xtxt1)=Cat(xt;Qtxt1),Qˉt=QtQt1Q1.\begin{aligned} q(x_t\mid x_{t-1}) &=\operatorname{Cat}(x_t;Q_t x_{t-1}),\\ \bar Q_t&=Q_tQ_{t-1}\cdots Q_1. \end{aligned}

任意时刻的直接边缘分布为

q(xtx0)=Cat(xt;Qˉtx0).q(x_t\mid x_0) =\operatorname{Cat}(x_t;\bar Q_t x_0).

这里,qq 是固定的前向过程,tt 是扰动步骤,Cat(x;π)\operatorname{Cat}(x;\pi) 表示概率向量为 π\pi 的类别分布,Qˉt\bar Q_t 是累计转移矩阵。对于序列,前向过程通常独立扰动每个词元位置,逆向模型却会读取整个受扰序列。

吸收过程会加入一个特殊掩码状态 mm。在连续时间中,单个位置的边缘分布可以写成

q(ztx)=Cat(zt;πt(x)),πt(x)=αtx+(1αt)m,t[0,1].\begin{gathered} q(z_t\mid x)=\operatorname{Cat}(z_t;\pi_t(x)),\\ \pi_t(x)=\alpha_t x+(1-\alpha_t)m,\\ t\in[0,1]. \end{gathered}

这里,xx 是干净的独热词元,ztz_t 是受扰状态,mm 是掩码词元的独热向量,πt(x)\pi_t(x) 是上式给出的类别概率向量。αt\alpha_t 是随时间递减的保留概率,理想端点为 α0=1\alpha_0=1α1=0\alpha_1=0。词元在前向过程中一旦被掩码,就会一直保持掩码。因此,网络看到的序列只由干净词表项和已知掩码符号组成,不会看到以后还要取整的任意高斯向量。

连续嵌入扩散是另一条路线。Diffusion-LM 扰动词嵌入,并利用连续状态上的梯度实现可控生成 (Li et al. 2022)。Plaid 则把基于似然的连续语言模型扩展到更大规模 (Gulrajani and Hashimoto 2023)。这类模型必须把连续输出重新连接到离散词元;吸收态扩散则始终停留在类别状态上。两条路线的结果不能合并成同一个质量结论。

推导掩码扩散的训练损失

对于吸收过程,一种基于替换的逆向参数化会原样复制未掩码词元,只在掩码位置预测干净词元分布。在这种参数化下,连续时间的负证据下界可化为 (Sahoo et al. 2024; Shi et al. 2024)

θ(x,zt)=i:zt(i)=m×[logpθ ⁣(x(i)zt,t)],LMDLM=01αt1αt×Ex,zt ⁣[θ(x,zt)]dt.\begin{gathered} \ell_\theta(x,z_t) =\sum_{i:\,z_t^{(i)}=m}\\[-0.3em] \quad\times\left[-\log p_\theta\!\left(x^{(i)}\mid z_t,t\right)\right],\\ \mathcal L_{\mathrm{MDLM}} =\int_0^1 \frac{-\alpha_t'}{1-\alpha_t} \\[-0.3em] \quad\times\mathbb E_{x,z_t}\!\left[\ell_\theta(x,z_t)\right]dt. \end{gathered}

这里,x=(x(1),,x(L))x=(x^{(1)},\ldots,x^{(L)}) 是干净序列,ztz_t 是以保留概率 αt\alpha_t 独立掩码各位置后得到的序列,αt=dαt/dt\alpha_t'=d\alpha_t/dtii 只遍历当前等于掩码 mm 的位置,θ\ell_\theta 则把这些位置上的负对数概率相加,其中 pθ(x(i)zt,t)p_\theta(x^{(i)}\mid z_t,t) 是模型对第 ii 个位置干净词元的预测概率。由于 αt\alpha_t 递减,权重 αt/(1αt)-\alpha_t'/(1-\alpha_t) 非负。实际训练会采样时间与掩码模式,而不是精确计算这个积分。干净端点处看似存在的奇点要按极限理解:观察到掩码位置的概率会在该处趋于零,具体实现也会采用数值稳定的有限采样。

内层项就是掩码词元交叉熵。因此,扩散目标可以看作一组按扰动程度加权的掩码语言模型损失。它并不等同于普通 BERT 训练:BERT 使用特定掩码配方,并没有按这里的逆向过程、词元保留规则、时间权重或似然下界定义。现有掩码语言模型并不会自动变成完整的生成器,除非训练与采样契约补上这些组成部分。

生成从一张含有 LL 个掩码的输出画布开始。每个逆向步骤中,模型根据整个当前状态预测干净词元,采样器再按调度确定其中一部分位置,吸收态逆向参数化会把已经确定的词元原样带到下一步。与按置信度工作的 Mask-Predict 变体不同,这种祖先采样器不必重新掩掉已经确定的词元。最后一步必须消除所有剩余掩码。长度 LL 仍要预先选择、另行预测,或交给分块扩展处理。

区分具体分数的输出缓存与 KV 缓存

SEDD 用带噪边缘概率之比描述连续时间的离散扩散。对于只在一个词元位置上不同的相邻序列 xxyy,其具体分数为

st(x)y=pt(y)pt(x).s_t(x)_y=\frac{p_t(y)}{p_t(x)}.

这里,ptp_t 是时刻 tt 的带噪序列分布,st(x)ys_t(x)_y 是从 xx 转移到 yy 所需的比率。神经网络只近似稀疏词元转移图所需的这些比率,不必表示规模随序列指数增长的完整转移矩阵。在论文实验中,SEDD 的分数熵目标比更早的扩散语言模型取得了更低的困惑度,并能与 GPT-2 规模的自回归基线竞争 (Lou et al. 2024)。论文报告的网络评估次数与质量权衡只适用于所测试的采样器;一次完整序列的扩散评估与一次使用缓存的自回归词元步骤成本并不相等。

RADD 针对吸收态扩散进一步化简分数。它把所需概率比拆成干净数据的条件分布和已知的时间标量 (Ou et al. 2025)。若 xtiyx_t^{i\leftarrow y} 表示把 xtx_t 中第 ii 个掩码位置替换为干净词元 yy,那么总体关系为

pt ⁣(xtiy)pt(xt)=αt1αt×p0 ⁣(Xi=yXU=xt,U).\begin{gathered} \frac{p_t\!\left(x_t^{i\leftarrow y}\right)}{p_t(x_t)} =\frac{\alpha_t}{1-\alpha_t}\\[-0.2em] \quad\times p_0\!\left(X_i=y\mid X_U=x_{t,U}\right). \end{gathered}

这里,UU 是未掩码位置的集合,XU=xt,UX_U=x_{t,U} 表示干净随机序列 XXxtx_t 中可见词元一致,p0p_0 是干净数据分布,αt/(1αt)\alpha_t/(1-\alpha_t) 是已知的调度因子。右侧需要学习的条件分布不必接收 tt,但解析标量仍随时间变化。如果某次逆向转移没有改变受扰序列,该去噪器的模型输出可以在下一个时间点复用。这是状态不变时的模型输出缓存,与因果 KV 缓存不同;后者会在追加新词元时复用前缀的键和值。

RADD 还把吸收态扩散连接到任意顺序的自回归分解。概率模型可以按多种顺序确定变量,而不局限于固定的从左到右顺序。表示上的等价并不意味着执行方案等价:双向去噪器仍可能反复为整张画布打分。

分块同时恢复变长生成与前缀缓存

完整序列的掩码扩散通常从固定画布开始。每次显露词元后,完整双向注意力都会改变画布上的隐藏状态,因此标准的因果前缀 KV 缓存不能直接跨轮保留。块扩散会改变概率分解方式:块与块之间按自回归方式生成,当前块内的位置则并行去噪 (Arriola et al. 2025)。已完成的块形成稳定前缀,因此可以缓存其 KV 状态,生成也可以持续追加任意数量的块。

ar 自回归 每步一个词元 缓存因果前缀 bd 块扩散 块间保持因果 块内并行去噪 ar->bd 增大块大小 md 完整掩码扩散 固定画布 多轮并行精修 bd->md 一个完整块
图 13.2. 依赖结构:自回归按词元串行,块扩散在块之间串行,完整掩码扩散则反复精修固定画布。

下面的可运行示例只把依赖核算具体化。它假设每次掩码评估都会预测当前块中的所有位置,忽略提示词预填充,也不假定单个位置预测在硬件上具有固定成本。

from math import ceil

length = 128
rounds = 8
block_size = 16

autoregressive = {
    "dependent_evaluations": length,
    "position_predictions": length,
}
full_masked = {
    "dependent_evaluations": rounds,
    "position_predictions": length * rounds,
}
block_diffusion = {
    "dependent_evaluations": ceil(length / block_size) * rounds,
    "position_predictions": length * rounds,
}

for name, cost in [
    ("自回归", autoregressive),
    ("完整掩码", full_masked),
    ("块扩散", block_diffusion),
]:
    print(
        f"{name}:依赖评估={cost['dependent_evaluations']},"
        f"位置预测={cost['position_predictions']}"
    )

在这些假设下,完整掩码扩散的依赖链最短,却要预测相当于缓存自回归八倍的词元位置。块扩散的依赖深度位于两者之间,而示例中的块内位置预测总数与完整掩码扩散相同。真实延迟还取决于注意力形状、内核、批大小、内存流量,以及每次评估能够利用多少并行硬件。

限定规模化结果的证据范围

大型扩散语言模型证明,这类目标可以超越早期 GPT-2 规模开展训练或适配。它们并没有形成一项只改变概率分解方式的受控比较。

系统 其构造证明了什么 单靠该结果不能证明什么
LLaDA 8B 可以从头预训练掩码扩散模型,并进行指令微调 在数据与计算匹配时,与外部训练的 8B 自回归模型持平
Dream 7B 可以用自回归权重初始化扩散模型 仅靠扩散预训练也能得到同样结果
LLaDA-MoE 可以用约 20T 词元训练总参数 7B、激活参数 1.4B 的稀疏扩散模型 与匹配的稀疏自回归训练成本或质量相同
LLaDA 2.0 转换后的自回归 MoE 权重可以产生总参数最多 100B 的扩散模型 从头训练了一个 100B 扩散模型

LLaDA 论文报告了与其自建自回归基线及若干外部模型相比的较强结果,其中包括一个从头训练的 8B 模型 (Nie et al. 2025)。Dream 则从 Qwen2.5 的自回归权重初始化 (Ye et al. 2025)。LLaDA-MoE 报告总参数 7B、激活参数 1.4B,并使用约 20T 训练词元 (Zhu et al. 2025)。LLaDA 2.0 通过分阶段的块扩散与完整序列扩散训练转换预训练自回归模型,其稀疏版本达到 100B 总参数 (Bie et al. 2025)。这些是关于训练路线、激活计算量和模型总容量的不同结论。

Mercury 与 Seed Diffusion 也报告了较高的代码生成吞吐量 (Inception Labs et al. 2025; Song et al. 2025)。这些结果说明,经过工程优化的扩散系统可以取得有用的速度与质量折中;但它们采用不同的模型、分词器、加速器、输出长度、批大小和质量测试,因此并不是可以迁移到整个模型类别上的速度倍数。

评测部署后的生成器,而不是方法标签

可复现比较必须固定任务,并报告完整的解码契约:

维度 需要报告的内容
质量 在相同分词方式下报告似然下界或困惑度、任务指标,以及必要时的人类评测
依赖结构 输出长度、去噪轮数、块大小与网络函数评估次数
工作量 每次评估打分的位置数量、注意力模式、激活参数,以及跳过或缓存的状态
延迟 首次可见输出时间、完成时间,以及声明批大小下的单请求延迟
吞吐量 每秒请求数与词元数,并说明分词器和后处理策略
硬件 加速器型号与数量、数值精度、编译器、内核和内存限制
输出策略 长度固定还是预测、停止规则、掩码调度、置信度规则与采样随机性

分词器不同时,困惑度不能直接比较,因为一个「词元」所代表的文本量不同。每秒词元数也有同样的问题。字符或字节吞吐量可以作为补充,但质量与延迟仍必须在同一组请求上测量。对于交互式应用,一个很快完成却没有稳定前缀的系统,与首词元时间较低的流式自回归系统仍会带来不同体验。

方法选择取决于工作负载:

工作负载 合理的起点 首要风险
开放式流式对话 自回归或分块生成 端到端延迟与停止行为
定长内容填补或受约束编辑 掩码扩散或迭代精修 掩码调度与全局一致性
有严格延迟目标的翻译 单次或迭代非自回归 模式混合、长度与教师依赖
批量代码补全 在同一套测试工具中比较自回归、块扩散与完整扩散 按分词差异校正的吞吐量与正确性
任意顺序补全 掩码模型或任意顺序模型 非常规确定顺序下的校准
争议所在

在控制质量、硬件、输出长度和服务软件之后,扩散语言模型能否胜过自回归仍无定论。并行更新位置与双向上下文,确实适合固定画布编辑和任意顺序补全。自回归则保留了简单的停止规则、稳定的流式前缀和成熟的因果缓存。规模演示足以否定「这类模型无法做大」的笼统质疑,但参数量与作者自行报告的吞吐量都不能证明前沿质量或成本匹配下的持平。现有证据只说明可选设计更多,并不能确定谁会成为继任者。

下层约束

服务底层决定并行词元预测能否转化为延迟优势。完整掩码的一轮计算可以并行处理多个位置,却往往要重新计算整张双向画布。自回归在单个请求内几乎没有并行性,却能复用因果前缀。块扩散在两者之间取舍。决定性指标是网络评估次数、重新计算的位置数量、缓存字节数、内存带宽、批大小和内核。「八轮」只是算法描述,并不是服务结果。

延伸阅读

评论

登录后评论