@HaoyiZhu: I wrote up some notes on when ODE and SDE sampling are equivalent, and what changes in practice. https://haoyizhu.site/…

X AI KOLs Timeline 新闻

摘要

Notes on the equivalence between ODE and SDE sampling in diffusion models, discussing conditions and practical changes.

I wrote up some notes on when ODE and SDE sampling are equivalent, and what changes in practice. https://haoyizhu.site/blog/sde-vs-ode/…
查看原文
查看缓存全文

缓存时间: 2026/09/15 09:47

I wrote up some notes on when ODE and SDE sampling are equivalent, and what changes in practice. https://haoyizhu.site/blog/sde-vs-ode/…


Diffusion 学习笔记:ODE 与 SDE 何时等价? · Haoyi Zhu

Source: https://www.haoyizhu.site/blog/sde-vs-ode/ 笔者最近在学习 diffusion / flow matching 时,对 ODE 和 SDE 采样之间的关系有了一些新的理解,在这里记录一下。

一个有意思的观察是,在理想条件下,同一个模型既能用 ODE 采样,也能用 SDE 采样,两者可以有相同的边缘分布。只看预训练代码里的预测目标,往往还无法判断最后会用哪一种采样器。

比如,FM 训练的是速度场,最直接的用法就是求解 ODE。那么,加入随机噪声后,为什么还能得到相同的分布?这种等价又依赖哪些条件?

训练目标

先看Flow Matching中最常见的线性插值。全文约定 t=0 是数据端,t=1 是噪声端;文本等条件先固定,省略在记号里。将数据 X\_0 与独立的标准高斯噪声 \\varepsilon 线性插值,得到

\\begin\{aligned\} X\_t&=\(1\-t\)X\_0\+t\\varepsilon,\\qquad \\varepsilon\\sim\\mathcal N\(0,I\),\\quad \\varepsilon\\perp X\_0,\\\\ v\_t\(x\)&=\\mathbb E\[\\varepsilon\-X\_0\\mid X\_t=x\]\. \\end\{aligned\} \\tag\{1\}

训练时,用 MSE 回归 \\varepsilon\-X\_0,最优预测就是上式的条件平均速度。它定义了 ODE \\mathrm\{d\}X\_t=v\_t\(X\_t\)\\,\\mathrm\{d\}t。在适当的正则条件下,从正确的初始分布出发并精确求解,这个 ODE 在每个时刻的分布都与 \(1\) 中的插值分布相同,但轨迹未必是直线。

构造对应的 SDE 还需要 score。记 p\_t 为 X\_t 的密度,s\_t\(x\)=\\nabla\_x\\log p\_t\(x\)。对一般的独立高斯加噪 X\_t=\\alpha\_tX\_0\+\\sigma\_t\\varepsilon,在 \\sigma\_t\>0 时有

\\begin\{aligned\} \\nabla\_x\\log p\_t\(x\) &=\\mathbb E\\big\[\\nabla\_x\\log p\_t\(x\\mid X\_0\)\\mid X\_t=x\\big\]\\\\ &=\-\\frac\{1\}\{\\sigma\_t\}\\mathbb E\[\\varepsilon\\mid X\_t=x\]\. \\end\{aligned\} \\tag\{2\}

因此,noise-MSE 学到的条件均值乘上 \-1/\\sigma\_t,就得到 score。回到 \(1\) 的线性插值,在 0\\lt t\\lt 1 时:

\\begin\{aligned\} \\hat x\_0&=x\-tv\_t\(x\),\\\\ \\hat\\varepsilon&=x\+\(1\-t\)v\_t\(x\),\\\\ s\_t\(x\)&=\-\\frac\{\\hat\\varepsilon\}\{t\} =\-\\frac\{x\+\(1\-t\)v\_t\(x\)\}\{t\}\. \\end\{aligned\} \\tag\{3\}

其中 \\hat x\_0=\\mathbb E\[X\_0\\mid X\_t=x\]、\\hat\\varepsilon=\\mathbb E\[\\varepsilon\\mid X\_t=x\]。也就是说,虽然 FM 的训练目标是速度,但在这个设定下,同一个输出也能给出噪声、干净样本和 score 的最优预测。

采样等价

有了速度和 score,就可以按照Score-based SDE中的对应关系构造 SDE。设 ODE 的速度为 v\_t,样本分布的密度 p\_t 满足连续性方程:

\\partial\_t p\_t=\-\\nabla\\cdot\(p\_tv\_t\)\.

先沿时间递增的方向考虑。任取只依赖时间的 \\lambda\_t\\ge0,构造

\\mathrm\{d\}X\_t= \\big\[v\_t\(X\_t\)\+\\lambda\_t\\nabla\\log p\_t\(X\_t\)\\big\]\\,\\mathrm\{d\}t \+\\sqrt\{2\\lambda\_t\}\\,\\mathrm\{d\}W\_t\. \\tag\{4\}

其中 W\_t 是标准布朗运动。与原来的 ODE 相比,我们一边加入随机噪声,一边给漂移补上 \\lambda\_ts\_t。这两项对分布的影响恰好可以抵消。

用Fokker–Planck 方程(描述 SDE 的概率密度如何随时间变化)写出来,就是

\\begin\{aligned\} \\partial\_t p\_t &=\-\\nabla\\cdot\(p\_tv\_t\) \-\\lambda\_t\\nabla\\cdot\(p\_t\\nabla\\log p\_t\) \+\\lambda\_t\\Delta p\_t\\\\ &=\-\\nabla\\cdot\(p\_tv\_t\)\. \\end\{aligned\} \\tag\{5\}

因为 p\_t\\nabla\\log p\_t=\\nabla p\_t,新增的两项抵消,又得到了原来的连续性方程。在适当的正则条件下,从相同初始分布出发并精确求解,ODE 与这个 SDE 的边缘分布相同。

实际生成时,我们从 t=1 积分到 t=0。此时对应的反向 SDE 为

\\mathrm\{d\}X\_t= \\big\[v\_t\(X\_t\)\-\\lambda\_ts\_t\(X\_t\)\\big\]\\,\\mathrm\{d\}t \+\\sqrt\{2\\lambda\_t\}\\,\\mathrm\{d\}\\bar W\_t,\\qquad \\mathrm\{d\}t<0, \\tag\{6\}

其中 \\bar W\_t 是反向时间的布朗运动。取 \\lambda\_t=0 就回到 ODE;取正值则会在途中加入随机性,同时调整漂移。只要速度和 score 都准确、从正确的 p\_1 出发并精确求解,两者就可以在每个时刻具有相同的 p\_t。这也解释了为什么同一个预训练网络可以配合不同的采样器使用。

这里的“相同”只指每个时刻的边缘分布。给定初始状态后,ODE 的轨迹唯一确定,SDE 仍会引入新的随机性;两者并不需要沿着同一条轨迹生成样本。

实际误差

上面的抵消依赖真实 score。实际网络只能给出近似:即使 v\_t 精确,若预测的 score 为 s\_\\theta=s\_t\+e\_t,\(5\) 中仍会多出

\-\\lambda\_t\\nabla\\cdot\(p\_te\_t\)\. \\tag\{7\}

这一项通常不为零,原来的 p\_t 便不再同时满足两种演化方程。即使速度和 score 由同一个网络按 \(3\) 换算得到,也不能保证它们与 ODE 实际产生的密度满足 \(5\) 的关系。

即便模型完全精确,有限步求解仍会带来差别。举个简单例子:取 p\_t 为一维标准高斯、v\_t=0,ODE 保持状态不变;固定 \\lambda\>0,\(4\) 变成

\\mathrm\{d\}X\_t=\-\\lambda X\_t\\,\\mathrm\{d\}t\+\\sqrt\{2\\lambda\}\\,\\mathrm\{d\}W\_t\.

这个 SDE 同样保持标准高斯分布。但用Euler–Maruyama 方法(SDE 的显式 Euler 离散化)走一步,步长为 h,得到

X'=\(1\-\\lambda h\)X\+\\sqrt\{2\\lambda h\}\\,\\xi, \\qquad X,\\xi\\overset\{\\mathrm\{iid\}\}\\sim\\mathcal N\(0,1\)\.

一步之后的方差就变成了

\\operatorname\{Var\}\(X'\)=\(1\-\\lambda h\)^2\+2\\lambda h =1\+\\lambda^2h^2\.

当然,这个例子并不意味着随机采样总是更差。EDM将随机采样解释为 ODE 加 Langevin 修正,用来减小此前积累的分布误差;但过量加噪、去噪也会损失细节。因此,实际采样效果还要结合模型误差和求解误差来判断,不能只凭理想情况下的等价性决定。

高斯之外

前面还有一个条件需要单独看:\(2\)\(3\) 的换算依赖独立高斯加噪。我们不妨保留独立性,只把噪声换成一维 Laplace 分布。设 X\_t=\\alpha\_tX\_0\+\\sigma\_t\\varepsilon,\\sigma\_t\>0,且 \\varepsilon\\sim\\mathrm\{Laplace\}\(0,1\) 与 X\_0 独立。此时几乎处处有

s\_t\(x\)=\-\\frac\{1\}\{\\sigma\_t\} \\mathbb E\[\\operatorname\{sign\}\(\\varepsilon\)\\mid X\_t=x\]\. \\tag\{8\}

noise-MSE 学到的仍是 \\mathbb E\[\\varepsilon\\mid X\_t=x\]。均值相同并不意味着取正值和负值的概率相同,所以这个均值一般不足以恢复 score。也就是说,换成 Laplace 噪声后,FM 仍然可以学习 ODE 的速度场,但不能再按 \(3\) 直接换算出 SDE 所需的 score。

当然,有读者可能会说,实际应用里大家用的几乎都是高斯噪声。那我们再看一个更实际的例子:Waver的 noise blend refiner。它将退化后的低分辨率 latent 与高斯噪声混合作为 source,再与干净 latent 插值:

\\begin\{aligned\} Y&=\(1\-w\_d\)X\_\{\\mathrm\{lr\}\}\+w\_dN,\\qquad N\\sim\\mathcal N\(0,I\),\\\\ X\_t&=\(1\-t\)X\_0\+tY\. \\end\{aligned\} \\tag\{9\}

Waver 原文训练时在 \[0\.85,0\.95\] 内随机采样 w\_d,回归目标为 X\_0\-Y。下面考虑训练时固定混合系数 0\\lt w\_d\\lt 1 的同类 refiner,并假设 X\_\{\\mathrm\{lr\}\} 只用于构造 source、不额外输入网络。沿用本文的时间方向,最优速度记为 v\_t\(x\)=\\mathbb E\[Y\-X\_0\\mid X\_t=x\],与原文的预测方向相反。由于 N 是与 \(X\_0,X\_\{\\mathrm\{lr\}\}\) 独立的高斯噪声,沿用 \(2\) 的求导方法,在 0\\lt t\\lt 1 时有

s\_t\(x\)=\-\\frac\{x\+\(1\-t\)v\_t\(x\)\-\(1\-w\_d\)\\mathbb E\[X\_\{\\mathrm\{lr\}\}\\mid X\_t=x\]\}\{tw\_d^2\}\. \\tag\{10\}

速度给出的是整个 source 的条件均值,score 的换算还需要其中低清分量的条件均值。固定混合系数并不能消去这一项,因此一般不能仅凭速度直接得到 score。若能另外得到真实 score,\(4\) 中 ODE/SDE 的对应关系仍然成立。

蒸馏偏差

如果用这种 refiner 做DMD/DMD2蒸馏,问题就不只是采样器了:KL 梯度本身就需要 teacher 的 score。直接使用速度差,会产生什么误差?这要看 loss 怎样给学生输出重新加噪。

记 P\_t,Q\_\{\\theta,t\} 为目标与学生输出经过相应加噪后的分布,J=\\partial G\_\\theta/\\partial\\theta。下面固定 t,假设 loss 中的高斯噪声独立重采样、ref 不随 \\theta 变化,只分析理想网络下的分布匹配项,略去 CFG、GAN 和额外的梯度归一化。以下公式中的 score、速度和后验均值都在学生的加噪样本处求值,期望按学生的联合采样过程计算。此时

g\_t=\\nabla\_\\theta\\mathrm\{KL\}\(Q\_\{\\theta,t\}\\\|P\_t\) =\(1\-t\)\\mathbb E\\big\[J^\\top\(s\_Q\-s\_P\)\\big\]\. \\tag\{11\}

**第一种,loss 也沿用 noise blend。**假设 fake 同样按这条路径训练,记 m\_P\(x\)=\\mathbb E\_P\[X\_\{\\mathrm\{lr\}\}\\mid X\_t=x\],m\_Q 同理。根据 \(10\),若只取速度差,并补偿已知的 w\_d^2 缩放,所得更新 \\hat g\_t 与真实梯度的关系为

\\begin\{aligned\} s\_Q\-s\_P &=\-\\frac\{1\-t\}\{tw\_d^2\}\(v\_Q\-v\_P\) \+\\frac\{1\-w\_d\}\{tw\_d^2\}\(m\_Q\-m\_P\),\\\\ \\hat g\_t\-g\_t &=\-\\frac\{\(1\-t\)\(1\-w\_d\)\}\{tw\_d^2\} \\mathbb E\\big\[J^\\top\(m\_Q\-m\_P\)\\big\]\. \\end\{aligned\} \\tag\{12\}

遗漏的是 ref 在目标分布与学生分布下的条件均值之差。它们足够接近时,这个近似可能有效;但复用同一个 ref,并不保证两个模型对它的后验均值相同。

第二种,loss 改用纯高斯加噪X\_t=\(1\-t\)X\+tN。fake 可以通过相应的去噪训练学习 score,DMD2 官方实现中的 fake model 就采用独立高斯加噪监督。但 teacher 仍然预测 noise blend 路径上的速度 v\_P。如果直接按 \(3\) 换算,记得到的预测为 \\tilde s\_P^G、真实的高斯加噪 score 为 s\_P^G,则在 fake 精确时

\\begin\{aligned\} \\tilde s\_P^G\(x\)&=\-\\frac\{x\+\(1\-t\)v\_P\(x\)\}\{t\}, \\qquad e\_P\(x\)=\\tilde s\_P^G\(x\)\-s\_P^G\(x\),\\\\ \\hat g\_t\-g\_t&=\-\(1\-t\)\\mathbb E\\big\[J^\\top e\_P\\big\]\. \\end\{aligned\} \\tag\{13\}

teacher 是沿 noise blend 路径训练的,但计算 DMD loss 时,输入它的却是纯高斯加噪的学生样本,随后又按纯高斯加噪下的公式,把它输出的速度换算成 score。偏差就来自这两处不匹配。即使 fake 学得准确,也不能自动补上 teacher 的偏差。

因此,这类用 FM 训练的 noise blend refiner,直接在 DMD 中把速度换成 score,一般会引入偏差。实践中仍可以把它当作一种近似来做蒸馏,也可能得到不错的结果;只是这种近似可能改变优化方向,最终学到的分布未必对应原本 KL 目标的最优解。

总结一下

本文讨论了在独立高斯加噪的设定下,同一个模型可以提供速度与 score,让 ODE/SDE 在理想条件下具有相同的边缘分布;实际效果仍受模型和求解误差影响。换成不符合这些条件的应用场景,比如用 FM 训练的 noise blend refiner,直接用速度转换 score 做 DMD 蒸馏一般会引入偏差。

参考链接

相似文章

扩散模型的数学导论

arXiv cs.LG

本文对扩散模型进行了以证明为导向的介绍,涵盖了朗之万动力学、基于分数的模型、离散化、离散扩散以及推理时控制,面向研究生读者。