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

扩散与流匹配

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

第二部分从下一个词元不再是自然生成顺序的地方开始。图像、音频与视频模型大多不是从左到右逐项生成;它们从噪声出发,再逐步去掉噪声。扩散(diffusion),也就是训练时加噪、生成时去噪的配方,及其 流匹配(flow matching) 推广,是几乎所有非文本媒体背后的生成原理,如今又正回到文本。这里的核心变化是:生成不再是一条词元链,而是一条从无序走向结构的路径;同一个网络也可以被读作去噪器、分数或速度。EDM 与流匹配,都是为了让这条路径条件更好、步数更少,而前沿目标则是把很长的去噪链,有时是一千次网络评估,缩短到极少步,甚至一步。

2026-06-21T23:29:39.625918 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/ 0 1 2 3 4 5 生成时间 0.0 0.2 0.4 0.6 0.8 1.0 噪声水平 扩散去噪 流路径
图 12.1. 从噪声到数据的生成路径示意图。扩散采样器通过多步去噪移除噪声,而流匹配视角学习一条直接的输运路径。理想化曲线,非实测。

为什么不用自回归

自回归生成在构造上就是顺序的:一个词元接一个词元,从左到右,形成一条长度等于输出长度的串行链。对文本,那个顺序是自然的。对一幅图像,则不是:像素没有一个标准的顺序,强加一个,反倒浪费了结构。扩散走另一条路。它用一个固定、已知的过程把数据逐步推向噪声,再学习逆转这个过程,在每一步并行地对整个信号去噪。没有从左到右,输出尺寸一开始就定好,而模型能一次注意到整个被部分去噪的信号。成本不再主要由输出序列长度决定,而转到采样步数上;本章后面的大部分内容都围绕如何减少这些步数。

前向与逆向过程

前向过程在 TT 步里逐渐给一个数据点加上高斯噪声,直到所剩无几,这是一条没有参数的固定马尔可夫链(每一步只依赖于前一步)。高斯的复合给出它的闭式边缘分布(也就是把中间各步求和消去后,xtx_t 自身的分布),于是任一噪声水平都能一步抵达,

q(xtx0)=N ⁣(xt;αˉtx0,  (1αˉt)I),xt=αˉtx0+1αˉtϵ,q(x_t \mid x_0) = \mathcal{N}\!\left(x_t;\, \sqrt{\bar{\alpha}_t}\,x_0,\; (1-\bar{\alpha}_t)\,\mathbf{I}\right), \qquad x_t = \sqrt{\bar{\alpha}_t}\,x_0 + \sqrt{1-\bar{\alpha}_t}\,\boldsymbol{\epsilon},

其中 αˉt\bar{\alpha}_t 是保留下来的信号比例。生成则把这条链倒着跑,学着一次撤销一步加噪。去噪扩散概率模型(DDPM)这个早期去噪扩散目标的意外之处在于,这个逆过程的变分界,一旦丢掉那些与时间相关的权重,就可以简化成一次普通的回归:预测在某个随机选取的步上加进去的噪声 ϵ\boldsymbol{\epsilon} (Ho et al. 2020),

Lsimple=Et,x0,ϵϵϵθ ⁣(αˉtx0+1αˉtϵ,  t)2.\mathcal{L}_{\text{simple}} = \mathbb{E}_{\,t,\,\mathbf{x}_0,\,\boldsymbol{\epsilon}} \left\lVert \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta\!\left( \sqrt{\bar{\alpha}_t}\,\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\,\boldsymbol{\epsilon},\; t \right) \right\rVert^2.

这个训练回路里有两个设计选择,比看上去更要紧。第一个是噪声调度。原始的线性 βt\beta_t 在高分辨率下毁掉信息太快,而一个在链的后段保住更多信号的余弦调度,αˉt=cos2 ⁣(t/T+s1+sπ2)\bar{\alpha}_t = \cos^2\!\big(\frac{t/T + s}{1+s}\cdot \frac{\pi}{2}\big) 带一个小偏移 ss,其中 αˉt\bar{\alpha}_t 是时刻 tt 仍保留下来的信号比例,TT 是总步数,ss 让曲线两端不那么尖。这条调度连同学习逆向方差、而非把它们固定,一起改进了似然与样本质量 (Nichol and Dhariwal 2021)。第二个是网络预测什么。同一个目标能写成三种方式,而它们在整条调度上并不数值相等:预测 ϵ\boldsymbol{\epsilon} 在高噪声处退化,那里目标几乎不带信号;预测 x0x_0 在低噪声处退化;而 v-预测 v=αˉtϵ1αˉtx0v = \sqrt{\bar{\alpha}_t}\,\boldsymbol{\epsilon} - \sqrt{1-\bar{\alpha}_t}\,x_0 在整个范围里都保持平衡。这里 vv 把噪声端点和数据端点混成一个速度式目标,避免只在某一端好学,这正是一旦蒸馏让每一步横跨很宽的信噪比区间,它就成了首选参数化的缘故 (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)的模型,在许多噪声水平上学习分数,即对数密度的梯度 xlogp(x)\nabla_x \log p(x),再用 Langevin 动力学采样,即反复沿分数方向微调样本、每步再加一点随机噪声,直到它稳定到目标分布上 (Song and Ermon 2019)。它与上面那个去噪器有精确联系:由 Tweedie 公式,最优的噪声预测器至多差一个标度就是那个分数,xtlogqt(xt)=ϵθ(xt,t)/1αˉt\nabla_{x_t} \log q_t(x_t) = -\boldsymbol{\epsilon}_\theta(x_t, t) / \sqrt{1-\bar{\alpha}_t},而那条「用去噪、而非用难解的边缘分布来训练一个分数模型」的定理,比扩散本身还要老 (Vincent 2011)。Song 等人随后表明这两条脉络是同一个对象:前向过程是一个把数据载往噪声的随机微分方程(SDE),生成是那个逆时 SDE,其漂移里恰好含着那个分数 (Anderson 1982),而 DDPM(一个方差保持的 SDE)与分数匹配(一个方差爆炸的)都是它的离散化 (Song et al. 2021)。同一项工作还导出了一个等价的确定性概率流 常微分方程(ODE)

dxdt=f(x,t)12g(t)2xlogpt(x),\frac{dx}{dt} = f(x, t) - \tfrac{1}{2}\,g(t)^2\,\nabla_x \log p_t(x),

其中 f(x,t)f(x,t) 是前向 SDE 的漂移,g(t)g(t) 是噪声强度,xlogpt(x)\nabla_x \log p_t(x) 是时刻 tt 的分数。这个式子的读法是:把随机过程里扩散造成的分布变化,改写成一个确定性的速度场;沿着这条速度场走,样本的边缘分布仍与那个 SDE 相同。这个 ODE 是通向快速采样器的桥,也通向本章末尾的流匹配。

它从何而来

这整套构造是从非平衡热力学推导出来的、而非作为一个松散的比喻借来;现代配方随后几乎不再保留最初的物理语言。第 3 章 跟踪这项借用,以及工程把源头留在身后的那个点。

把配方理顺:EDM

有几年,这个设计空间由调度、参数化与标度交织在一起,不同论文各自选择一套组合。EDM 把它理清了:把每个扩散模型都写成一个在连续噪声水平 σ\sigma 上的去噪器 Dθ(x;σ)D_\theta(x; \sigma),其中 σ\sigma 是噪声强度,DθD_\theta 是在该强度下把样本拉回干净数据的网络,再把三个一直被纠缠在一起的选择分开 (Karras et al. 2022)。预处理用一组系数重新标定原始网络,让它的输入与输出在每个噪声水平上都保持单位方差,Dθ(x;σ)=cskip(σ)x+cout(σ)Fθ(cin(σ)x;cnoise(σ))D_\theta(x;\sigma) = c_{\text{skip}}(\sigma)\,x + c_{\text{out}}(\sigma)\,F_\theta(c_{\text{in}}(\sigma)\,x;\, c_{\text{noise}}(\sigma))。这里各个 c(σ)c(\sigma) 系数的作用,是把输入、输出、噪声标签和跳连按噪声水平重新标定,让损失权重在整个 σ\sigma 上都均匀,免去了一类调参。噪声水平在训练时从一个对数正态里抽,在采样时铺在一条调度 σi=(σmax1/ρ+iN1(σmin1/ρσmax1/ρ))ρ\sigma_i = (\sigma_{\max}^{1/\rho} + \frac{i}{N-1}(\sigma_{\min}^{1/\rho} - \sigma_{\max}^{1/\rho}))^{\rho} 上、ρ=7\rho = 7;这个式子只是把 NN 个采样点按幂次排在 σmax\sigma_{\max}σmin\sigma_{\min} 之间,ρ\rho 决定点更偏向高噪声端还是低噪声端。概率流 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)则去掉那个分类器:让同一个模型连同有条件与无条件一起训练,采样时再在二者之间外插,

ϵ~θ(xt,c)=(1+w)ϵθ(xt,c)wϵθ(xt),\tilde{\boldsymbol{\epsilon}}_\theta(x_t, c) = (1 + w)\,\boldsymbol{\epsilon}_\theta(x_t, c) - w\,\boldsymbol{\epsilon}_\theta(x_t),

其中 xtx_t 是当前带噪样本,cc 是文本条件,ϵθ(xt,c)\boldsymbol{\epsilon}_\theta(x_t,c) 是带条件的噪声预测,ϵθ(xt)\boldsymbol{\epsilon}_\theta(x_t) 是丢掉条件后的无条件预测。权重 ww 是控制参数:w=0w=0 时回到无引导模型,ww 越大,采样越被推向符合条件的一侧,也就用多样性换取提示词保真度 (Ho and Salimans 2022)。渐进式蒸馏随后反复把步数减半:训练一个学生,让它的一步去匹配一个确定性教师的两步,这正是 v-预测发挥作用的地方 (Salimans and Ho 2022)。骨干随后也回到本书其余部分的主线:扩散 Transformer(DiT) 用一个在潜空间分块上操作的 Transformer 取代 U-Net(扩散模型最初采用的那种卷积网络结构),并发现样本质量随算力上升而改善,把扩散放上了与其他一切相同的扩展曲线 (Peebles and Xie 2023)。

流匹配:学一个速度,而非一个去噪器

流匹配用更直接的形式重述了这个问题。把生成想成一个 ODE dx/dt=vt(x)dx/dt = v_t(x),其中 vt(x)v_t(x) 是时刻 tt 在位置 xx 上该往哪里走的速度场;它把一个噪声分布运成数据分布。连续性方程 tpt+(ptvt)=0\partial_t p_t + \nabla \cdot (p_t v_t) = 0 则说明这个速度场怎样改变密度 ptp_t:质量被运送、从不被创造。难处在于那个边缘速度是对所有数据点的一个难解的平均。解决办法是条件流匹配目标:让网络去回归那个把噪声运往单个固定数据点 x1x_1 的条件场,

LCFM=Et,x1,xtvθ(xt,t)ut(xtx1)2,\mathcal{L}_{\text{CFM}} = \mathbb{E}_{t,\,x_1,\,x_t} \left\lVert v_\theta(x_t, t) - u_t(x_t \mid x_1) \right\rVert^2,

其中 tt 选中路径上的时刻,x1x_1 是数据点,xtx_t 是通往它的中间样本,vθv_\theta 是网络预测的速度,ut(x1)u_t(\cdot\mid x_1) 是这条条件路径的解析速度。这个损失的读法是:在每个带噪位置上,网络应该指出把样本推向数据的方向。Lipman 等人证明它与对那个难解的边缘场做回归有相同的梯度,因为那个边缘目标本身就是逐样本目标的条件期望 (Lipman et al. 2023)。训练于是变得无需仿真:抽一个数据点,在通往它的路径上抽一个点,对一个闭式的速度做回归,从不积分那个 ODE。扩散路径作为条件路径的一种选择自然落了出来;笔直、匀速的最优传输路径,则是更高效的另一种。

直线路径是这里的关键选择。修正流(rectified flow) 学习线性插值 xt=(1t)x0+tx1x_t = (1-t)\,x_0 + t\,x_1 的速度,其目标是常量 x1x0x_1 - x_0,并加一个「整流」步,把噪声重新耦合到模型自己生成的数据上再重训,把轨迹进一步拉直;一条直线轨迹被一个 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 的一千次,走向一次。

lineage ddpm DDPM 2020 去噪器 sde Score SDE 2021 统一 + 概率流 ODE ddpm->sde ncsn NCSN 2019 分数 ncsn->sde edm EDM 2022 配方 sde->edm ddim DDIM / DPM-Solver 少步 ODE sde->ddim fm 流匹配 2023 学一个速度 sde->fm cm Consistency 2023 一步 ddim->cm rf Rectified Flow 2023 直线路径 fm->rf rf->cm
图 12.2. 本章诸思想的演化线索。去噪路线(DDPM)与分数路线(NCSN)被 SDE 框架及其概率流 ODE 统一;那个 ODE 是通向快速采样器、通向 EDM 配方、以及通向流匹配的桥,而流匹配的直线路径与 consistency 后续方法把采样步数推向一。取材自 Song 等(2021)与 Lipman 等(2023)。

回到语言的路径

扩散如今正回到文本。其离散的对应物把高斯噪声换成分类扰动: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 章 为词元所画的约束是同一条,只是在这里换成了去噪步。

延伸阅读

评论

登录后评论