分数函数

q(x)q(x) 是在其支撑集内部为正且可微的概率密度。它的分数函数是对数密度关于样本坐标的梯度:

sq(x)=xlogq(x)s_q(x) = \nabla_x \log q(x)

直接使用 xq(x)\nabla_x q(x) 会让梯度大小随密度的整体尺度变化,而取对数后有 xlogq(x)=xq(x)/q(x)\nabla_x\log q(x)=\nabla_xq(x)/q(x),衡量的是当前位置发生微小变化时的相对密度增幅。它指向密度增长最快的方向,模长则反映局部密度变化有多陡。例如 q(x)=N(μ,σ2I)q(x)=\mathcal N(\mu,\sigma^2I) 时,

sq(x)=xμσ2,s_q(x)=-\frac{x-\mu}{\sigma^2},

偏离均值越远,指回中心的作用越强;方差越小,分布越集中,相同偏移对应的校正也越大。

若密度写为 p(x)=p~(x)/Zp(x)=\tilde p(x)/Z,其中 Z=p~(x)dxZ=\int \tilde p(x)dx 是配分函数,则 ZZxx 无关,因此

xlogp(x)=xlogp~(x)\nabla_x\log p(x)=\nabla_x\log\tilde p(x)

高维生成模型难以计算 ZZ,分数却把只负责全局归一化的常数消掉,使模型可以学习“概率质量在局部应往哪里集中”,而不必先求出完整密度。采样过程只需在当前位置反复查询这个方向,就能逐步把被噪声摊开的概率质量重新组织成数据分布。分数只在密度为正且光滑处定义,原始经验分布由有限样本构成,并不满足这一条件;给数据加入高斯噪声会把尖锐的样本点平滑成处处有密度的分布,这也是扩散模型先构造含噪概率路径的重要原因。

流匹配和扩散模型都使用一条从初始分布 pinitp_{init} 到数据分布 pdatap_{data} 的概率路径。对数据点 zRdz\in\mathbb R^d,条件路径 pt(xz)p_t(x\mid z) 满足

p0(z)=pinit,p1(z)=δzp_0(\cdot\mid z)=p_{init},\qquad p_1(\cdot\mid z)=\delta_z

这里的时间方向是“噪声到数据”。将条件路径对数据分布边缘化,得到边缘路径:

pt(x)=pt(xz)pdata(z)dzp_t(x)=\int p_t(x\mid z)p_{data}(z)dz

训练时固定 zz 后,条件分布由人为选定的加噪过程决定,因此条件分数 xlogpt(xz)\nabla_x\log p_t(x\mid z) 可以解析计算;采样真正需要的边缘分数 xlogpt(x)\nabla_x\log p_t(x) 却依赖所有数据样本形成的混合分布。对边缘密度求导并把每一项改写成“密度乘以对数密度梯度”,得到与流匹配相同的后验平均关系:

xlogpt(x)=xpt(xz)pdata(z)dzpt(x)=xlogpt(xz)pt(xz)pdata(z)pt(x)dz=Ezp1t(x)[xlogpt(xz)].\begin{aligned} \nabla_x\log p_t(x) &=\frac{\int \nabla_x p_t(x\mid z)p_{data}(z)dz}{p_t(x)}\\ &=\int \nabla_x\log p_t(x\mid z) \frac{p_t(x\mid z)p_{data}(z)}{p_t(x)}dz\\ &=\mathbb E_{z\sim p_{1\mid t}(\cdot\mid x)}\left[\nabla_x\log p_t(x\mid z)\right]. \end{aligned}

其中 p1t(zx)=pt(xz)pdata(z)/pt(x)p_{1\mid t}(z\mid x)=p_t(x\mid z)p_{data}(z)/p_t(x) 表示观察到含噪状态 xx 后,各个干净样本 zz 与它相容的程度。单个 xx 通常无法唯一确定来源,边缘分数便把各条件分数按这一后验加权;高噪声时后验较分散,模型只能给出多种可能共同支持的方向,低噪声时后验逐渐集中,校正会更具体地指向局部数据结构。这一关系让可计算的条件分数成为未知边缘分数的无偏监督信号。

高斯路径

常用的高斯条件路径写为

pt(xz)=N(x;αtz,βt2Id)p_t(x\mid z)=\mathcal N(x;\alpha_tz,\beta_t^2I_d)

其中 αt\alpha_t 缩放数据信号,βt\beta_t 缩放独立高斯噪声,二者的比值 αt/βt\alpha_t/\beta_t 决定信噪比。端点条件 α0=0,β0=1\alpha_0=0,\beta_0=1α1=1,β1=0\alpha_1=1,\beta_1=0 让路径从纯噪声逐渐过渡到数据;日程变化过快会让某些时间段的目标剧烈变化,过慢则把大量训练预算放在相似的噪声水平上。在内部时间 0<t<10<t<1,假设 αt>0\alpha_t>0βt>0\beta_t>0;端点由分布的极限定义,不能直接代入下方含分母的公式。重参数化采样为

zpdata,ϵN(0,Id),xt=αtz+βtϵpt(z)z\sim p_{data},\qquad \epsilon\sim\mathcal N(0,I_d),\qquad x_t=\alpha_tz+\beta_t\epsilon\sim p_t(\cdot\mid z)

重参数化把“从随 z,tz,t 变化的高斯分布采样”化成了对标准噪声的仿射变换,使任意时间的训练样本都能一步构造。对 xx 求梯度可得可计算的条件分数:

xlogpt(xz)=xαtzβt2=ϵβt\nabla_x\log p_t(x\mid z)=-\frac{x-\alpha_tz}{\beta_t^2}=-\frac{\epsilon}{\beta_t}

式中的 xαtzx-\alpha_tz 正是当前状态相对条件均值的残差,负号使方向指回均值,1/βt21/\beta_t^2 则按不确定性调节校正强度。将采样式代入后残差为 βtϵ\beta_t\epsilon,所以标签等于 ϵ/βt-\epsilon/\beta_t;当 βt0\beta_t\to0 时,即使实际残差同步变小,分数模长仍会增大。这发生在低噪声、接近数据端的位置,也是直接预测分数容易出现数值尺度失衡的原因。

高斯路径下,条件目标向量场为

uttarget(xz)=(α˙tβ˙tβtαt)z+β˙tβtxu_t^{target}(x\mid z)=\left(\dot\alpha_t-\frac{\dot\beta_t}{\beta_t}\alpha_t\right)z+\frac{\dot\beta_t}{\beta_t}x

向量场要求粒子的分布按日程改变,分数则描述同一时刻的密度几何。把上式反解为 z=(x+βt2xlogpt(xz))/αtz=(x+\beta_t^2\nabla_x\log p_t(x\mid z))/\alpha_t 并代回条件向量场,令

at=βt2α˙tαtβ˙tβt,bt=α˙tαta_t=\beta_t^2\frac{\dot\alpha_t}{\alpha_t}-\dot\beta_t\beta_t,\qquad b_t=\frac{\dot\alpha_t}{\alpha_t}

则在 0<t<10<t<1

uttarget(xz)=atxlogpt(xz)+btxu_t^{target}(x\mid z)=a_t\nabla_x\log p_t(x\mid z)+b_tx

其中 btxb_tx 负责所有位置共有的整体缩放,atxlogpta_t\nabla_x\log p_t 根据当前密度形状补上非均匀的重排;若只保留前者,简单的线性缩放无法把高斯变成多峰数据分布。对 zz 取后验平均后,系数与 zz 无关,条件分数又恰好平均为边缘分数,因此得到

uttarget(x)=atxlogpt(x)+btxu_t^{target}(x)=a_t\nabla_x\log p_t(x)+b_tx

因此,满足上述条件的高斯路径中,边缘向量场与边缘分数函数只是同一概率路径的两种局部描述:前者直接给出样本速度,后者给出密度几何,并通过由噪声日程确定的 at,bta_t,b_t 转换。这个关系让同一个网络输出可以服务于 ODE 或 SDE 采样,但当 αt\alpha_tβt\beta_t 接近零时,转换系数可能病态,实际实现通常选择数值更稳定的参数化。

去噪器使用另一种等价参数化,定义为干净数据的后验均值:

Dt(x)=Ezp1t(x)[z]D_t(x)=\mathbb E_{z\sim p_{1\mid t}(\cdot\mid x)}[z]

含噪状态可能对应多个干净样本,平方误差下无法可靠恢复其中某个未知来源,后验均值却是均方误差最小的单值估计。它直接给出分数与向量场:

xlogpt(x)=αtDt(x)xβt2\nabla_x\log p_t(x)=\frac{\alpha_tD_t(x)-x}{\beta_t^2}

uttarget(x)=(α˙tβ˙tβtαt)Dt(x)+β˙tβtxu_t^{target}(x)=\left(\dot\alpha_t-\frac{\dot\beta_t}{\beta_t}\alpha_t\right)D_t(x)+\frac{\dot\beta_t}{\beta_t}x

第一式也表明,αtDt(x)x\alpha_tD_t(x)-x 是网络认为应从当前状态中修正掉的部分,再除以噪声方差便得到局部密度梯度。高噪声时 Dt(x)D_t(x) 倾向于给出较粗的全局结构,低噪声时它主要修正细小残差。实际网络可以预测分数 sts_t、噪声 ϵt\epsilon_t 或去噪结果 DtD_t,它们在高斯路径内部满足

ϵt(x)=βtst(x),Dt(x)=x+βt2st(x)αt,\epsilon_t(x)=-\beta_ts_t(x), \qquad D_t(x)=\frac{x+\beta_t^2s_t(x)}{\alpha_t},

因而表达能力相同,但训练标签和网络输出的尺度不同。噪声预测把标准目标保持在 O(1)O(1) 尺度,去噪预测的语义更直接;靠近端点时除以很小的 αt\alpha_tβt\beta_t 会放大误差,仍需依靠合适的噪声日程、预条件和数值处理。

SDE 采样

uttargetu_t^{target} 驱动的 ODE 已经沿边缘路径 ptp_t 演化。若直接加入布朗噪声,概率质量会额外向外摊开,原有边缘分布便被破坏;要在保留同一 ptp_t 的同时获得随机轨迹,漂移必须增加一项恰好抵消这种密度扩散的校正。对任意连续、随时间变化且与状态无关的标量扩散系数 σt0\sigma_t\ge0,可构造

X0pinit,dXt=[uttarget(Xt)+σt22xlogpt(Xt)]dt+σtdWtX_0\sim p_{init},\qquad dX_t=\left[u_t^{target}(X_t)+\frac{\sigma_t^2}{2}\nabla_x\log p_t(X_t)\right]dt+\sigma_t dW_t

这就是 SDE Extension Trick。σtdWt\sigma_t\mathrm dW_t 使单条轨迹随机扩散,方差增长速度由 σt2\sigma_t^2 决定;额外的分数项以同样的 σt2/2\sigma_t^2/2 为系数,把概率质量推回高密度方向。本文沿“噪声到数据”的正时间方向采样,所以补偿项取正号;若采用常见的“数据到噪声”正向过程并推导反向 SDE,公式的时间方向与符号写法会相应改变。加入校正后,单条路径及相同初值对应的终点会改变,但理想情况下每个时刻的一点边缘分布仍是同一个 ptp_t

这一结论可由 Fokker-Planck 方程验证。对于

dXt=μt(Xt)dt+σtdWtdX_t=\mu_t(X_t)dt+\sigma_tdW_t

其密度满足

tpt(x)=(pt(x)μt(x))+σt22Δpt(x)\partial_tp_t(x)=-\nabla\cdot\bigl(p_t(x)\mu_t(x)\bigr)+\frac{\sigma_t^2}{2}\Delta p_t(x)

μt(x)=uttarget(x)+σt22xlogpt(x)\mu_t(x)=u_t^{target}(x)+\frac{\sigma_t^2}{2}\nabla_x\log p_t(x)

代入,并使用 ptxlogpt=xptp_t\nabla_x\log p_t=\nabla_xp_t,可得

tpt=(ptuttarget)σt22Δpt+σt22Δpt=(ptuttarget).\begin{aligned} \partial_t p_t &=-\nabla\cdot(p_tu_t^{target})-\frac{\sigma_t^2}{2}\Delta p_t+\frac{\sigma_t^2}{2}\Delta p_t\\ &=-\nabla\cdot(p_tu_t^{target}). \end{aligned}

右侧正是目标 ODE 的连续性方程:布朗运动产生的 +(σt2/2)Δpt+(\sigma_t^2/2)\Delta p_t 与分数漂移产生的负拉普拉斯项逐点抵消,因此两种动力学具有相同的边缘概率路径。σt=0\sigma_t=0 时回到确定性 ODE,增大 σt\sigma_t 则让轨迹具有更强的随机探索和纠错能力;边缘等价只在真实向量场、真实分数和连续时间下严格成立,实际网络近似误差与离散误差可能被更强噪声放大,所以 σt\sigma_t 仍需与步长一起选择。

用步长 h=1/nh=1/n 进行 Euler-Maruyama 采样时,令 tk=kht_k=kh,并在每一步独立采样 ξkN(0,Id)\xi_k\sim\mathcal N(0,I_d)

Xtk+1=Xtk+h[utkθ(Xtk)+σtk22stkθ(Xtk)]+σtkhξkX_{t_{k+1}}=X_{t_k}+h\left[u_{t_k}^\theta(X_{t_k})+\frac{\sigma_{t_k}^2}{2}s_{t_k}^\theta(X_{t_k})\right]+\sigma_{t_k}\sqrt h\,\xi_k

X0pinitX_0\sim p_{init} 开始迭代至 t=1t=1,返回 X1X_1。式中漂移位移随 hh 缩小,随机位移随 h\sqrt h 缩小,这正好保证把时间步切细后单位时间的累计方差不变;每一步还要使用独立的 ξk\xi_k,否则会改变布朗运动的时间相关性。若网络预测的是噪声 ϵtθ\epsilon_t^\theta,则在内部时间以 stθ(x)=ϵtθ(x)/βts_t^\theta(x)=-\epsilon_t^\theta(x)/\beta_t 代入即可。减小步长通常能改善离散精度,却会增加网络调用次数,而随机采样还会使同一初始点的结果产生方差。

当概率路径恒为 pt=pp_t=puttarget=0u_t^{target}=0 时,不再需要把分布从一个端点搬到另一个端点,只需让噪声扩散与分数回拉保持平衡,上式便退化为过阻尼朗之万动力学:

dXt=σt22xlogp(Xt)dt+σtdWtdX_t=\frac{\sigma_t^2}{2}\nabla_x\log p(X_t)dt+\sigma_tdW_t

X0pX_0\sim p,向外扩散和向内回拉在分布层面精确抵消,所以 pp 是该过程的平稳分布;这不意味着每条轨迹静止,样本仍会持续运动,只是总体分布不变。从其他初始分布出发,是否收敛到 pp 还取决于遍历性、步长和运行时间等条件,有限步离散化通常只会得到带偏近似。

分数匹配

采样需要在任意噪声水平和状态查询边缘分数 xlogpt(x)\nabla_x\log p_t(x),但它包含未知的数据分布,训练集也无法为一个含噪 xx 直接给出这个混合密度的梯度。分数网络写为

stθ:Rd×[0,1]Rds_t^\theta:\mathbb R^d\times[0,1]\rightarrow\mathbb R^d

理想的边缘分数匹配损失是

LSM(θ)=EtUnif[0,1],xpt[stθ(x)xlogpt(x)2]\mathcal L_{SM}(\theta)=\mathbb E_{t\sim\mathrm{Unif}[0,1],\,x\sim p_t}\left[\left\|s_t^\theta(x)-\nabla_x\log p_t(x)\right\|^2\right]

这个目标准确表达了需求,却不可直接计算。条件去噪分数匹配改用已知的条件分数:

LCSM(θ)=EtUnif[0,1],zpdataxpt(z)[stθ(x)xlogpt(xz)2]\mathcal L_{CSM}(\theta)=\mathbb E_{\substack{t\sim\mathrm{Unif}[0,1],\,z\sim p_{data}\\x\sim p_t(\cdot\mid z)}}\left[\left\|s_t^\theta(x)-\nabla_x\log p_t(x\mid z)\right\|^2\right]

对固定 (x,t)(x,t) 而言,随机的条件分数以边缘分数为条件均值,因此它可以看成带有不可约噪声的监督标签。由前文的后验平均关系,展开两个平方损失的交叉项可得

LCSM(θ)=LSM(θ)+C\mathcal L_{CSM}(\theta)=\mathcal L_{SM}(\theta)+C

其中 C=Exlogpt(xz)xlogpt(x)20C=\mathbb E\|\nabla_x\log p_t(x\mid z)-\nabla_x\log p_t(x)\|^2\ge0θ\theta 无关,表示仅观察 xx 时无法确定干净来源所产生的标签方差。因此二者梯度相同,最小化可计算的条件损失即可学习边缘分数;CC 不影响总体最优解,但会影响有限批量梯度的方差与训练速度。

对高斯路径,将 xt=αtz+βtϵx_t=\alpha_tz+\beta_t\epsilon 和条件分数 ϵ/βt-\epsilon/\beta_t 代入,可得

LCSM(θ)=Et,z,ϵ[stθ(xt)+ϵβt2]=Et,z,ϵ[1βt2ϵtθ(xt)ϵ2],\begin{aligned} \mathcal L_{CSM}(\theta) &=\mathbb E_{t,z,\epsilon}\left[\left\|s_t^\theta(x_t)+\frac{\epsilon}{\beta_t}\right\|^2\right]\\ &=\mathbb E_{t,z,\epsilon}\left[\frac{1}{\beta_t^2}\left\|\epsilon_t^\theta(x_t)-\epsilon\right\|^2\right], \end{aligned}

其中 ϵtθ(x)=βtstθ(x)\epsilon_t^\theta(x)=-\beta_ts_t^\theta(x) 是噪声预测网络。把目标从 ϵ/βt-\epsilon/\beta_t 改写为标准高斯噪声 ϵ\epsilon,可避免低噪声端的标签本身发散,但严格等价的损失仍带有 1/βt21/\beta_t^2 权重。该权重会强烈强调 βt\beta_t 较小的低噪声样本,因为此时同样大小的噪声预测误差会被转换成更大的分数误差。常见的 DDPM 简化损失将其改为常数权重:

LDDPM(θ)=EtUnif[0,1],zpdataϵN(0,Id)[ϵtθ(αtz+βtϵ)ϵ2]\mathcal L_{DDPM}(\theta)=\mathbb E_{\substack{t\sim\mathrm{Unif}[0,1],\,z\sim p_{data}\\\epsilon\sim\mathcal N(0,I_d)}}\left[\left\|\epsilon_t^\theta(\alpha_tz+\beta_t\epsilon)-\epsilon\right\|^2\right]

去掉权重后,不同时间的噪声标签都处在近似统一的数值尺度,优化通常更稳定,也不会让少量低噪声样本主导梯度;代价是各噪声水平的相对重要性被重新定义。在网络容量无限且能对每个 (x,t)(x,t) 独立达到条件均值时,两者的逐点最优预测相同;在有限容量、共享参数和有限训练预算下,它们会把能力分配到不同时间段,因而不应视为严格相同的目标。这里仍采用“噪声到数据”的课程时间方向,经典 DDPM 文献常把加噪过程记作正向时间;两种记法可以通过时间反转和日程重参数化对应,阅读公式时必须先确认端点约定。

每个小批量的训练步骤如下:

  1. 从数据集采样 zz,再采样 tUnif[0,1]t\sim\mathrm{Unif}[0,1]ϵN(0,Id)\epsilon\sim\mathcal N(0,I_d);实际实现通常避开使 βt\beta_t 过小的端点,以免分数标签和转换系数过大。
  2. 用闭式加噪公式构造 xt=αtz+βtϵx_t=\alpha_tz+\beta_t\epsilon,一次计算即可得到任意时间的正确边缘样本,无需从端点逐步模拟到 tt
  3. 若训练分数网络,使用目标 ϵ/βt-\epsilon/\beta_t 计算条件分数匹配损失;若训练噪声网络,计算带权 DSM 损失或上式的 DDPM 简化损失。虽然标签中的 ϵ\epsilon 是本次人为加入的具体噪声,网络只看到 xt,tx_t,t,在反复训练后输出的是所有相容噪声的条件均值。
  4. 对损失反向传播并更新参数。各样本可独立选择时间和噪声,因此训练能够并行;生成时则必须根据预测的分数或向量场连续执行多步更新,训练的一步监督并没有消除采样的积分成本。

训练完成后,噪声预测、分数预测或去噪器预测都可转换为采样所需的分数或向量场,再通过 ODE 或 SDE 数值积分生成样本。选择 ODE 会在给定初值后产生确定轨迹,选择具有补偿漂移的 SDE 会在保持理想边缘路径的同时继续注入随机性;参数化、噪声日程与求解器共同决定数值稳定性和所需网络调用次数。