扩散与流匹配
第二部分从下一个词元不再是自然生成顺序的地方开始。图像、音频与视频模型大多不是从左到右逐项生成;它们从噪声出发,再逐步去掉噪声。扩散(diffusion),也就是训练时加噪、生成时去噪的配方,及其 流匹配(flow matching) 推广,是几乎所有非文本媒体背后的生成原理,如今又正回到文本。这里的核心变化是:生成不再是一条词元链,而是一条从无序走向结构的路径;同一个网络也可以被读作去噪器、分数或速度。EDM 与流匹配,都是为了让这条路径条件更好、步数更少,而前沿目标则是把很长的去噪链,有时是一千次网络评估,缩短到极少步,甚至一步。
为什么不用自回归
自回归生成在构造上就是顺序的:一个词元接一个词元,从左到右,形成一条长度等于输出长度的串行链。对文本,那个顺序是自然的。对一幅图像,则不是:像素没有一个标准的顺序,强加一个,反倒浪费了结构。扩散走另一条路。它用一个固定、已知的过程把数据逐步推向噪声,再学习逆转这个过程,在每一步并行地对整个信号去噪。没有从左到右,输出尺寸一开始就定好,而模型能一次注意到整个被部分去噪的信号。成本不再主要由输出序列长度决定,而转到采样步数上;本章后面的大部分内容都围绕如何减少这些步数。
前向与逆向过程
前向过程在 步里逐渐给一个数据点加上高斯噪声,直到所剩无几,这是一条没有参数的固定马尔可夫链(每一步只依赖于前一步)。高斯的复合给出它的闭式边缘分布(也就是把中间各步求和消去后, 自身的分布),于是任一噪声水平都能一步抵达,
其中 是保留下来的信号比例。生成则把这条链倒着跑,学着一次撤销一步加噪。去噪扩散概率模型(DDPM)这个早期去噪扩散目标的意外之处在于,这个逆过程的变分界,一旦丢掉那些与时间相关的权重,就可以简化成一次普通的回归:预测在某个随机选取的步上加进去的噪声 (Ho et al. 2020),
这个训练回路里有两个设计选择,比看上去更要紧。第一个是噪声调度。原始的线性 在高分辨率下毁掉信息太快,而一个在链的后段保住更多信号的余弦调度, 带一个小偏移 ,其中 是时刻 仍保留下来的信号比例, 是总步数, 让曲线两端不那么尖。这条调度连同学习逆向方差、而非把它们固定,一起改进了似然与样本质量 (Nichol and Dhariwal 2021)。第二个是网络预测什么。同一个目标能写成三种方式,而它们在整条调度上并不数值相等:预测 在高噪声处退化,那里目标几乎不带信号;预测 在低噪声处退化;而 v-预测 在整个范围里都保持平衡。这里 把噪声端点和数据端点混成一个速度式目标,避免只在某一端好学,这正是一旦蒸馏让每一步横跨很宽的信噪比区间,它就成了首选参数化的缘故 (Salimans and Ho 2022)。下面这个玩具例子把这个回路具体化:对一维高斯数据,最优的噪声预测器是解析的,于是我们能从噪声采样,看着分布回来。
import numpy as np
rng = np.random.default_rng(0)
mu, v0 = 3.0, 1.0 # 数据 ~ N(mu, v0)
T = 1000
beta = np.linspace(1e-4, 0.02, T) # 噪声调度
alpha = 1 - beta
abar = np.cumprod(alpha) # 幸存信号比例
def eps_star(x, t): # 最优 epsilon 预测器(解析式)
var = abar[t] * v0 + (1 - abar[t])
return np.sqrt(1 - abar[t]) * (x - np.sqrt(abar[t]) * mu) / var
x = rng.normal(size=5000) # 从纯噪声开始
for t in range(T - 1, -1, -1):
mean = (x - beta[t] / np.sqrt(1 - abar[t]) * eps_star(x, t)) / np.sqrt(alpha[t])
x = mean + (np.sqrt(beta[t]) * rng.normal(size=x.shape) if t > 0 else 0.0)
print(f"数据 N(mu={mu}, var={v0}); 样本:均值={x.mean():.2f}, 方差={x.var():.2f}")
一个框架:分数与 SDE
本节从随机过程的数学出发抵达同一个模型:去噪器在每个噪声水平上化作一支箭头,指向数据稠密的方向,而生成则成为一个把样本从噪声带回数据的微分方程。这是全章数学味最重的一段,略读亦不影响后文。第二条脉络从一个不同的方向抵达了同一处。基于分数(score)的模型,在许多噪声水平上学习分数,即对数密度的梯度 ,再用 Langevin 动力学采样,即反复沿分数方向微调样本、每步再加一点随机噪声,直到它稳定到目标分布上 (Song and Ermon 2019)。它与上面那个去噪器有精确联系:由 Tweedie 公式,最优的噪声预测器至多差一个标度就是那个分数,,而那条「用去噪、而非用难解的边缘分布来训练一个分数模型」的定理,比扩散本身还要老 (Vincent 2011)。Song 等人随后表明这两条脉络是同一个对象:前向过程是一个把数据载往噪声的随机微分方程(SDE),生成是那个逆时 SDE,其漂移里恰好含着那个分数 (Anderson 1982),而 DDPM(一个方差保持的 SDE)与分数匹配(一个方差爆炸的)都是它的离散化 (Song et al. 2021)。同一项工作还导出了一个等价的确定性概率流 常微分方程(ODE),
其中 是前向 SDE 的漂移, 是噪声强度, 是时刻 的分数。这个式子的读法是:把随机过程里扩散造成的分布变化,改写成一个确定性的速度场;沿着这条速度场走,样本的边缘分布仍与那个 SDE 相同。这个 ODE 是通向快速采样器的桥,也通向本章末尾的流匹配。
这整套构造是从非平衡热力学推导出来的、而非作为一个松散的比喻借来;现代配方随后几乎不再保留最初的物理语言。第 3 章 跟踪这项借用,以及工程把源头留在身后的那个点。
把配方理顺:EDM
有几年,这个设计空间由调度、参数化与标度交织在一起,不同论文各自选择一套组合。EDM 把它理清了:把每个扩散模型都写成一个在连续噪声水平 上的去噪器 ,其中 是噪声强度, 是在该强度下把样本拉回干净数据的网络,再把三个一直被纠缠在一起的选择分开 (Karras et al. 2022)。预处理用一组系数重新标定原始网络,让它的输入与输出在每个噪声水平上都保持单位方差,。这里各个 系数的作用,是把输入、输出、噪声标签和跳连按噪声水平重新标定,让损失权重在整个 上都均匀,免去了一类调参。噪声水平在训练时从一个对数正态里抽,在采样时铺在一条调度 上、;这个式子只是把 个采样点按幂次排在 与 之间, 决定点更偏向高噪声端还是低噪声端。概率流 ODE 用一个二阶的 Heun 步、而非 Euler 来积分,约三十五次评估就达到很强的质量。它留下的教训正是这场解缠:调度、预处理与采样器是正交的轴,把它们分开命名,后续工作就能复用同一组选择,而不必反复重新推导。
让它变便宜、可操控
还有三步把一个缓慢的研究原型推进到可部署状态。第一步是减少步数:DDIM 是一个非马尔可夫的采样器,复用训练好的模型,却在其确定性设定下直接积分那个概率流 ODE,以快上 10 到 50 倍达到可比的质量 (Song et al. 2021),而专门的高阶求解器走得更远:在对数信噪比坐标里解析地处理那个 ODE 的线性部分,把好样本压到大约十到二十次网络评估 (Lu et al. 2022)。可负担性随后才被压下来。自编码器是把一幅图像压成一个小向量、再从中重建回来的网络;潜空间扩散就在这个预训练自编码器压缩出的潜空间里、而非在像素上跑整个过程,大幅降低算力需求,并通过交叉注意力注入文本或版式,这正是 Stable Diffusion 背后的配方 (Rombach et al. 2022)。可操控性有两种形态。分类器引导用一个单独训练的、加了噪声的分类器的梯度来操控样本 (Dhariwal and Nichol 2021),而无分类器引导(CFG)则去掉那个分类器:让同一个模型连同有条件与无条件一起训练,采样时再在二者之间外插,
其中 是当前带噪样本, 是文本条件, 是带条件的噪声预测, 是丢掉条件后的无条件预测。权重 是控制参数: 时回到无引导模型, 越大,采样越被推向符合条件的一侧,也就用多样性换取提示词保真度 (Ho and Salimans 2022)。渐进式蒸馏随后反复把步数减半:训练一个学生,让它的一步去匹配一个确定性教师的两步,这正是 v-预测发挥作用的地方 (Salimans and Ho 2022)。骨干随后也回到本书其余部分的主线:扩散 Transformer(DiT) 用一个在潜空间分块上操作的 Transformer 取代 U-Net(扩散模型最初采用的那种卷积网络结构),并发现样本质量随算力上升而改善,把扩散放上了与其他一切相同的扩展曲线 (Peebles and Xie 2023)。
流匹配:学一个速度,而非一个去噪器
流匹配用更直接的形式重述了这个问题。把生成想成一个 ODE ,其中 是时刻 在位置 上该往哪里走的速度场;它把一个噪声分布运成数据分布。连续性方程 则说明这个速度场怎样改变密度 :质量被运送、从不被创造。难处在于那个边缘速度是对所有数据点的一个难解的平均。解决办法是条件流匹配目标:让网络去回归那个把噪声运往单个固定数据点 的条件场,
其中 选中路径上的时刻, 是数据点, 是通往它的中间样本, 是网络预测的速度, 是这条条件路径的解析速度。这个损失的读法是:在每个带噪位置上,网络应该指出把样本推向数据的方向。Lipman 等人证明它与对那个难解的边缘场做回归有相同的梯度,因为那个边缘目标本身就是逐样本目标的条件期望 (Lipman et al. 2023)。训练于是变得无需仿真:抽一个数据点,在通往它的路径上抽一个点,对一个闭式的速度做回归,从不积分那个 ODE。扩散路径作为条件路径的一种选择自然落了出来;笔直、匀速的最优传输路径,则是更高效的另一种。
直线路径是这里的关键选择。修正流(rectified flow) 学习线性插值 的速度,其目标是常量 ,并加一个「整流」步,把噪声重新耦合到模型自己生成的数据上再重训,把轨迹进一步拉直;一条直线轨迹被一个 Euler 步精确积分,这正是通向一步采样的路 (Liu et al. 2023)。随机插值给出了一个统一框架:噪声与数据之间一个固定的插值,能同时给出一个确定性传输与一个含噪的扩散、二者任选,于是流匹配、Rectified Flow 与扩散,是同一个构造的不同重述 (Albergo and Vanden-Eijnden 2023; Albergo et al. 2023)。
最后一步是把整条路径缩短。Consistency Models 训练一个带自洽性的网络,使概率流 ODE 轨迹上每一点都映到同一个起点,于是一次前向传播就从噪声跳到数据;它可以从一个扩散教师蒸馏,也可以独立训练 (Song et al. 2023)。同一个一步目标也由别的路达到:在潜空间里蒸馏 (Luo et al. 2023),匹配一个多步教师的输出分布、而非它逐轨迹的点 (Yin et al. 2024),或加一个对抗损失以达到少步的照片级真实 (Sauer et al. 2024)。后继一脉干脆去掉扩散教师:shortcut 模型、归纳矩匹配(inductive moment matching)与 MeanFlow 都从头训练少步与一步生成器,其中 MeanFlow 利用区间平均速度与流匹配所学瞬时速度之间的一个恒等式 (Geng et al. 2025)。贯穿本节的变化,是生成一个样本需要的串行网络评估次数不断下降:从 DDPM 的一千次,走向一次。
回到语言的路径
扩散如今正回到文本。其离散的对应物把高斯噪声换成分类扰动:D3PM 在一个转移矩阵上扩散,其中吸收态的转移核会以渐增的概率把每个词元送往 [MASK],正是让一个掩码语言模型成为扩散模型的桥 (Austin et al. 2021)。SEDD 把分数的想法搬了过去,学习数据分布的比率、而非一个高斯分数,在 GPT-2 规模上达到自回归的质量 (Lou et al. 2024)。LLaDA 把掩码去噪的目标扩大,从头训练一个语言模型,靠一个逆过程、而非从左到右地去预测被掩码的词元,并报告它在上下文学习上与自回归的 LLaMA3-8B 旗鼓相当 (Nie et al. 2025);商业的扩散语言模型此后也已出现,用部分质量换取并行解码速度。第 13 章 会继续展开这条线索;在这里,只要看到去噪原理已经回到文本这个出发点,就足够了。
非自回归的扩散语言模型能否在规模上追平自回归 LLM,尚无定论。LLaDA 在 8B 上展示了竞争力,但比的是作者自己的受控基线、而非外部前沿模型,而最强的那个「超越」结果范围很窄,是一项 GPT-4o 表现不佳的反转任务 (Nie et al. 2025)。支持扩散文本的理由在于并行解码与双向上下文;反对的理由是,自回归仍然占据每一个前沿模型,且有着更成熟的扩展与服务故事。到 2026 年,这类系统已达到数百亿参数,规模本身不再是缺口;用于语言的扩散,应被看作一条有前景、但在前沿质量上尚未证实的路线。
采样器步数会反过来影响训练目标的服务成本。一个一千步的 DDPM,在规模上服务起来太慢,于是这个领域专门为少步采样而训练,即 Rectified Flow 的直线路径与 consistency 蒸馏,而非把采样当作事后才想的事。每次生成都要付的、每幅图像的推断预算,决定了哪一个生成目标值得去训练,这与 第 5 章 为词元所画的约束是同一条,只是在这里换成了去噪步。
评论
登录后评论