生成问题

图像、视频和三维结构都可以表示成高维实向量。例如,RGB 图像属于 RH×W×3\mathbb{R}^{H\times W\times3},含 TT 帧的视频属于 RT×H×W×3\mathbb{R}^{T\times H\times W\times3}。把张量展平后,可统一写成 zRdz\in\mathbb{R}^d。文本 token 等离散对象没有这种欧几里得结构,需要用离散扩散模型处理,后文会单独讨论。

真实样本被视为来自未知的数据分布 pdatap_{\mathrm{data}}。训练集只给出有限的独立同分布样本

z1,,zNpdata,z_1,\ldots,z_N\sim p_{\mathrm{data}},

而没有给出密度的解析式。生成模型要学会从近似的数据分布中抽取新样本,而非为一个输入给出唯一答案。它既要覆盖训练数据体现出的多种可能,又不能只记住有限样本;若还给定文本、类别等条件 yy,目标便变为从 pdata(zy)p_{\mathrm{data}}(z\mid y) 采样,使同一个条件仍可对应多个合理结果。

直接在百万维空间中运行传统 MCMC 往往效率很低,而直接规定复杂联合密度也要处理归一化和变量间依赖。流模型和扩散模型因此先从容易采样、覆盖整个空间的初始分布 pinitp_{\mathrm{init}} 取一个噪声样本,再用随时间变化的动力系统逐步重排这些概率质量,使终点呈现数据分布。学习任务由“一次写出高维分布”转化为“在每个时刻预测一次局部更新”,神经网络更容易共享这套局部规律。确定性动力系统由常微分方程描述,随机动力系统由随机微分方程描述;两者的共同目标都是把 pinitp_{\mathrm{init}} 推送到 pdatap_{\mathrm{data}},区别在于一条轨迹中是否持续引入新的随机性。

流模型

一条轨迹是映射 X:[0,1]RdX:[0,1]\to\mathbb{R}^dXtX_t 表示时刻 tt 的状态。向量场

u:Rd×[0,1]Rd,(x,t)ut(x)u:\mathbb{R}^d\times[0,1]\to\mathbb{R}^d, \qquad (x,t)\mapsto u_t(x)

为每个位置和时刻指定速度,轨迹满足

dXtdt=ut(Xt),X0=x0.\frac{\mathrm dX_t}{\mathrm dt}=u_t(X_t), \qquad X_0=x_0.

这条方程要求网络只根据当前状态和时间决定下一瞬间的变化,过去的信息已经浓缩在 XtX_t 中。把微分方程写成积分形式

Xt=X0+0tus(Xs)dsX_t=X_0+\int_0^t u_s(X_s)\,\mathrm ds

可以看出,最终变化是沿实际轨迹累积局部速度的结果;由于 usu_s 会随位置改变,通常不能把它当作一个固定向量直接乘以时间。局部速度沿时间积分后形成流映射 ψt(x0)\psi_t(x_0)

ddtψt(x0)=ut ⁣(ψt(x0)),ψ0(x0)=x0,Xt=ψt(X0).\frac{\mathrm d}{\mathrm dt}\psi_t(x_0)=u_t\!\left(\psi_t(x_0)\right), \qquad \psi_0(x_0)=x_0, \qquad X_t=\psi_t(X_0).

向量场回答“当前状态应如何变化”,流映射则是执行这套规则后的整体变换。若 X0pinitX_0\sim p_{\mathrm{init}},那么 Xt=ψt(X0)X_t=\psi_t(X_0) 的分布就是 ψt\psi_t 对初始分布的推送;训练真正要控制的是这一群随机初值的分布,而非某一条孤立轨迹。若向量场对状态足够光滑并满足常见的 Lipschitz 条件,给定起点便有唯一轨迹,两个不同起点也不会在同一时刻合并后再分开,因此流映射通常可逆。ODE 的随机性只来自随机初值,求解过程本身是确定的,这使同一初值的结果可以复现,也允许沿时间反向积分;相应地,生成质量会直接受到向量场误差和数值积分误差的共同影响。

实际模型用神经网络 utθ:Rd×[0,1]Rdu_t^\theta:\mathbb{R}^d\times[0,1]\to\mathbb{R}^d 近似向量场,通常没有解析解。将 [0,1][0,1] 划分为 nn 步,h=1/nh=1/n,并假设一个很短的时间步内速度近似保持为步首值,就得到最简单的 Euler 法

Xt+h=Xt+hutθ(Xt).X_{t+h}=X_t+h\,u_t^\theta(X_t).

采样时先取 X0pinitX_0\sim p_{\mathrm{init}},再重复 nn 次 Euler 更新并返回 X1X_1。训练的目标是使终点分布满足 X1pdataX_1\sim p_{\mathrm{data}}。模型预测的是局部速度,完整样本仍由数值积分产生。Euler 法每一步只调用一次网络,代价较低,但忽略了步内速度的变化:在光滑条件下单步误差为 O(h2)O(h^2),经过 1/h1/h 步累积后整体误差为 O(h)O(h)。减小 hh 会提高精度,却也线性增加网络调用次数,因此采样步数本质上是在速度和离散误差之间取舍。

Euler 法只利用步首的速度。Heun 法先用步首速度预测终点,再在预测位置重新计算速度,用两端速度的平均值校正:

Xt+h=Xt+hut(Xt),X'_{t+h}=X_t+h\,u_t(X_t),

Xt+h=Xt+h2[ut(Xt)+ut+h(Xt+h)].X_{t+h}=X_t+\frac h2\left[u_t(X_t)+u_{t+h}(X'_{t+h})\right].

第二次计算能够感知这一步中向量场方向和大小的变化,相当于用梯形近似速度积分。在光滑条件下,其整体误差由 Euler 法的 O(h)O(h) 降到 O(h2)O(h^2)。它每步多一次网络计算,但误差下降更快,因此在相同精度要求下往往可以使用更少的时间步;当网络本身预测不准或向量场变化剧烈时,提高求解器阶数也无法消除模型误差。

布朗运动

扩散模型需要一种能够在任意短时间尺度持续注入、且不同时间段互不相关的随机扰动,布朗运动正好满足这些要求。标准 dd布朗运动 W=(Wt)0t1W=(W_t)_{0\le t\le1}W0=0W_0=0 出发,样本路径连续;任意 0s<t0\le s<t 的增量满足

WtWsN ⁣(0,(ts)Id),W_t-W_s\sim\mathcal N\!\left(0,(t-s)I_d\right),

且不相交区间上的增量相互独立。离散一步可以写成

Wt+h=Wt+hϵt,ϵtN(0,Id).W_{t+h}=W_t+\sqrt h\,\epsilon_t, \qquad \epsilon_t\sim\mathcal N(0,I_d).

系数是 h\sqrt h,因为长度为 hh 的增量应有方差 hIdhI_d。若错误地使用 hϵth\epsilon_t,把一个固定时间区间切得越细,累计方差反而会趋近于零;使用 h\sqrt h 后,nn 个独立增量的方差可以相加为 nhIdnhI_d,总扰动强度与切分方式无关。布朗路径虽然连续,却几乎处处不可微,所以 dWt/dt\mathrm dW_t/\mathrm dt 不能当作普通导数处理,随机项必须以增量或 Itô 积分来定义。

扩散模型

在 ODE 的漂移上加入布朗扰动,得到 Itô SDE

dXt=ut(Xt)dt+σtdWt,X0=x0,\mathrm dX_t=u_t(X_t)\,\mathrm dt+\sigma_t\,\mathrm dW_t, \qquad X_0=x_0,

其中 utu_t 决定条件平均位移,σt0\sigma_t\ge0 决定单位时间新增的方差;在很短的 dt\mathrm dt 内,两部分的尺度分别为 O( ⁣dt)O(\!\mathrm dt)O( ⁣dt)O(\!\sqrt{\mathrm dt})。固定同一个起点后,不同的布朗运动实现会产生不同的样本路径和终点,因此模型能够在演化途中继续分散和探索概率质量,而不必把所有多样性都编码进 X0X_0。这种自由度也带来额外的采样方差,数值求解时还必须正确处理随机增量。令 σt0\sigma_t\equiv0,随机项与这部分代价同时消失,SDE 便退化为 ODE。

SDE 的基本数值方法是 Euler–Maruyama 法

Xt+h=Xt+hut(Xt)+hσtϵt,ϵti.i.d.N(0,Id).X_{t+h}=X_t+h\,u_t(X_t)+\sqrt h\,\sigma_t\epsilon_t, \qquad \epsilon_t\overset{\mathrm{i.i.d.}}{\sim}\mathcal N(0,I_d).

Euler–Maruyama 法分别用 hhh\sqrt h 近似漂移积分与布朗增量,每一步都必须重新采样独立噪声;重复使用同一个 ϵt\epsilon_t 会人为引入跨时间相关性,从而改变目标随机过程。扩散模型通常用网络 utθu_t^\theta 参数化漂移:先从 X0pinitX_0\sim p_{\mathrm{init}} 取样,再重复上述更新,使 t=1t=1 时的分布逼近 pdatap_{\mathrm{data}}。增大步数可以减小离散误差,但不能消除漂移网络的误差,并会增加网络调用。ODE 与 SDE 都在搬运分布;前者让随机初值沿唯一轨迹演化,后者还在整条路径上持续加入随机性,后续的分数函数正是用来协调“扩散开”与“回到目标高密度区域”这两种作用。