学习笔记 · 原始整理日期:2025-07-17
理解扩散模型时,我更习惯先看随机过程与概率密度如何演化,再回到神经网络究竟在学习什么。本文沿原始笔记的顺序,把布朗运动、SDE、分数匹配、概率流 ODE 和 Flow Matching 连成一条推导路径,并补充必要的公式和适用条件。
原始笔记主要整理自孙兵兵的微信文章系列,以及 cheern 的 Flow Matching 课程;原 PDF 中的灰色总结已标注为 LLM 辅助内容。对应学习来源保留在文末,下面的讲解是对这些主题的重新整理。
从随机游走到布朗运动
先考虑一维随机游走:每隔一小段时间,粒子向左或向右移动。若每步独立、方向等概率,就没有确定的运动方向,但位置的不确定性会随时间增大。
在合适的缩放下,这类随机游走的连续极限是 Wiener 过程,也称标准布朗运动 Wt。它的关键性质是:
- 起点为 W0=0。
- 不相交时间区间的增量相互独立。
- 对 t>s,增量满足 Wt−Ws∼N(0,t−s)。
- 路径连续,但通常不可微。
最后两条解释了随机微积分为什么不能直接照搬普通微积分。长度为 Δt 的时间区间里,布朗增量的典型尺度是 Δt,而不是 Δt。
ΔWt=Δtϵ,ϵ∼N(0,1).
这意味着二阶随机项的量级仍然是 Δt,不会像普通泰勒展开中的二阶时间项那样被忽略。
用 SDE 描述一条轨迹,用密度方程描述一个群体
常见的连续时间扩散写成:
dXt=f(Xt,t)dt+g(t)dWt.
其中,f 是漂移项,决定当前位置上的确定性趋势;g 控制随机扰动的强度。本文采用空间各向同性、扩散系数只依赖时间的情形,避免把一般矩阵扩散的公式混在一起。
这一个过程可以从两个层面理解。
对应的 Fokker–Planck 方程为:
∂tpt=−∇⋅(fpt)+21g(t)2Δpt.
第一项搬运已有的概率质量,第二项让分布扩散。它们描述的是同一个随机过程的群体行为。
如果直接令 g(t)=0,SDE 会退化为 ODE:
dtdXt=f(Xt,t).
此时密度满足连续性方程:
∂tpt=−∇⋅(fpt).
这里守恒的是总概率质量。一般 ODE 并不自动保持体积,也不能直接说它的微分熵始终不变;密度是否压缩还取决于速度场的散度。
Itô 修正项从哪里来
对一维随机过程 Xt 上的光滑函数 h(Xt,t),Itô 引理给出:
dh=(∂th+f∂xh+21g2∂xxh)dt+g∂xhdWt.
与普通链式法则相比,多出来的是:
21g2∂xxhdt.
直觉上,它来自布朗运动的二次变差,常用形式记作 (dWt)2=dt。这是一条随机微积分中的运算规则,不是对每个随机增量逐点成立的普通代数等式。
因此,随机项影响的不只是轨迹的抖动,也会改变对函数和密度求导时的规则。理解这一点,再看 Fokker–Planck 方程里的二阶空间导数就比较自然了。
逆向生成为什么需要 score
扩散模型先定义一个容易采样的前向加噪过程,把数据逐渐变成接近简单先验的分布。生成时,再从这个先验出发逆向运行。
对前面的时间相关标量扩散系数,在常见的正则条件下,逆时间 SDE 可写为:
dXt=[f(Xt,t)−g(t)2st(Xt)]dt+g(t)dWt,
其中:
st(x)=∇xlogpt(x).
这里沿时间从大到小积分,dt<0;Wt 表示逆时间布朗运动。公式中的符号必须和时间方向一起理解,不能把这个漂移项原封不动地拿去做正向时间积分。
Score 不是一个表示“好坏”的标量分数,而是向量场:它给出当前位置上对数密度上升的方向。前向过程由我们设定,难以直接获得的是它在每个时刻的边缘 score。于是,生成问题转化为学习 st(x)。
从不可计算的边缘 score 到去噪分数匹配
假设前向扰动可以写成:
Xt=atX0+σtϵ,ϵ∼N(0,I).
给定干净样本 X0=x0,条件分布是已知高斯,因此条件 score 可以直接计算:
∇xtlogp(xt∣x0)=−σt2xt−atx0=−σtϵ.
边缘密度虽然未知,但它的 score 与条件 score 有如下关系:
∇xtlogpt(xt)=E[∇xtlogp(xt∣X0)∣Xt=xt].
因此可以使用可采样的训练目标:
LDSM=Et,X0,ϵ[λ(t)sθ(Xt,t)+σtϵ22].
平方损失的最优回归函数是条件期望。这就是为什么只需要从数据中取样、添加已知噪声,就能学习不可直接计算的边缘 score。
如果模型选择预测噪声 ϵθ,可通过 sθ=−ϵθ/σt 转换成 score。不同参数化之间可以转换,但在有限网络、特定损失权重和噪声水平下,训练难度未必相同。这一点会在 JiT 的讨论 中再次出现。
VP-SDE:把抽象过程落到一个具体例子
Variance Preserving SDE 的常见写法是:
dXt=−21β(t)Xtdt+β(t)dWt.
设:
at=exp(−21∫0tβ(s)ds),σt2=1−at2.
它的条件扰动可以直接采样:
Xt=atX0+1−at2ϵ.
当初始数据的每个分量具有单位方差,并满足独立噪声等条件时,上式的总方差保持为 1。“方差保持”并不意味着每个给定样本的条件分布方差不变:条件噪声方差 1−at2 实际上随时间增加。
训练时,随机采样 t 和噪声即可构造输入及监督;生成时,则需要用学到的 score 配合逆向方程和数值求解器。
概率流 ODE:吸收扩散项,而不是直接删除随机项
回到 Fokker–Planck 方程,利用:
∇pt=pt∇logpt,
可以得到:
∂tpt=−∇⋅(fpt)+21g2Δpt=−∇⋅[pt(f−21g2∇logpt)].
它已经是连续性方程的形式,所以可以选择确定性速度场:
vPF(x,t)=f(x,t)−21g(t)2∇xlogpt(x),
从而得到 Probability Flow ODE:
dtdXt=vPF(Xt,t).
在精确 score、相同初始密度和适当正则条件下,这个 ODE 与原 SDE 具有相同的时变边缘分布。相同的是每个时刻的分布,单条轨迹及跨时间的联合分布通常不同。
还要区分两个系数:逆时间 SDE 的 score 修正系数是 g2,概率流 ODE 中是 21g2。仅仅删掉逆向 SDE 的随机项,会得到另一个动力系统。
确定性 ODE 提供了使用不同数值积分器的机会,但“换成 ODE”本身不保证可以任意增大步长。速度场误差、曲率和求解器误差仍然会影响生成质量。
条件生成:Classifier Guidance 与 CFG
对于条件 y,贝叶斯公式给出:
∇xlogpt(x∣y)=∇xlogpt(x)+∇xlogpt(y∣x).
Classifier Guidance 用噪声条件下的分类器提供第二项。这个分类器需要适应对应的噪声等级,不能简单拿只见过干净图片的分类器代替。
Classifier-Free Guidance 则让生成模型通过随机丢弃条件,同时学习有条件与无条件预测。在 score 参数化下,可以写成:
scfg=suncond+w(scond−suncond).
按这里的约定,w=1 恢复条件预测,w>1 进一步加强条件方向。噪声预测或速度预测也可以采用相应的组合形式,但比较不同实现时,要先确认其 guidance scale 的定义。
更大的引导通常会加强条件一致性,也可能损失多样性或产生伪影。它是采样策略中的权衡参数,而不是越大越好。
Flow Matching:直接监督速度场
前面通过 score 构造了一个确定性 ODE。Flow Matching 则从另一侧入手:先指定连接先验与数据的概率路径,再训练网络逼近能够实现这条路径的速度场。
这一节改用生成方向的时间约定:t=0 是噪声端,t=1 是数据端。最简单的条件插值是:
Xt=(1−t)X0+tX1,Ut=X1−X0.
其中 X0 来自先验,X1 来自数据。条件速度 Ut 很容易计算,因此可以训练:
LCFM=Et,X0,X1∥vθ(Xt,t)−(X1−X0)∥22.
最优的边缘速度是:
ut(x)=E[X1−X0∣Xt=x].
这与去噪分数匹配有相似的计算思路:把难以直接计算的边缘目标,转成易于采样的条件监督。条件路径是一条直线,并不意味着学习到的边缘 ODE 轨迹也都是直线。
推理时仍需从先验取样,并求解 X˙t=vθ(Xt,t)。如果进一步希望一步跳到终点,就会自然遇到一致性模型和 FACM 所讨论的问题。
把几个对象放在一起看
理解这条链路后,阅读一个新生成方法时,可以依次检查:它在哪个空间定义状态、采用什么时间方向、监督什么量、最后又如何采样。
原始材料
阅读或下载 4 页原始学习笔记
原笔记是一份带学习来源的阅读提纲;本文补充了可独立阅读的公式与衔接说明。更完整的随机过程证明仍可沿下面的来源继续学习。
参考资料
主要来源为孙兵兵在 2025 年发布的微信文章系列,并补充了 cheern 的 Flow Matching 课程:
- 从布朗运动到 Wiener 过程
- 扩散过程的 Lagrangian 与 Eulerian 视角
- SDE、ODE、Fokker–Planck 与 Liouville 方程
- Itô 积分与随机项
- 前向与逆向扩散过程
- 逆向 SDE
- Denoising Score Matching
- VP-SDE
- Probability Flow ODE
- Classifier 与 Classifier-Free Guidance
- Flow Matching 入门
- Generative AI Lecture 5:Guided Flow Matching