《生成扩散模型漫谈(五):一般框架之SDE篇》 —— 苏剑林
《生成扩散模型漫谈(六):一般框架之ODE篇》 —— 苏剑林
连续时间把过程与离散步数分开
离散 DDPM 需要事先指定 T,连续时间框架则先定义一个前向随机微分方程:
dx=ft(x)dt+gtdw.(1)
ft(x) 是 drift,决定确定性运动方向;gt 是 diffusion coefficient,w 是标准 Wiener 过程。理解公式 (1) 时,可以先看它的 Euler–Maruyama 离散形式:
xt+Δt−xt=ft(xt)Δt+gtΔtε,ε∼N(0,I).(2)
随机项必须是 O(Δt)。若它也是 O(Δt),把长度固定的时间区间分成 n 段后,独立噪声和的方差大约是
n(1/n)2=1/n,极限会消失;取 Δt 时,方差约为
n(1/n)2=1,随机效应才能留在连续极限中。
因此 T 不再是模型定义的一部分,而是数值求解精度的一部分。理论上分析同一条连续轨迹,实现时再选择时间网格和求解器。
从局部贝叶斯推到反向 SDE
公式 (2) 对应的单步转移核是
p(xt+Δt∣xt)=N(xt+Δt;xt+ft(xt)Δt,gt2ΔtI).(3)
反向局部核由贝叶斯公式给出:
p(xt∣xt+Δt)=p(xt+Δt∣xt)exp[logpt(xt)−logpt+Δt(xt+Δt)]×C,
其中 C 与 xt 无关。由于高斯局部核只在
xt+Δt−xt=O(Δt) 时有显著密度,可以在 (xt,t) 附近展开:
logpt+Δt(xt+Δt)≈logpt(xt)+(xt+Δt−xt)⊤∇xlogpt(xt)+Δt∂tlogpt(xt).(4)
时间偏导不能省略,因为密度本身也随扩散时间变化。把公式 (4) 代回局部贝叶斯表达式并对 xt 配方,保留决定高斯均值和方差的最低阶项,反向一步的均值相对 xt+Δt 多出
−[ft−gt2∇xlogpt]Δt。连续极限就是
dx=[ft(x)−gt2∇xlogpt(x)]dt+gtdwˉ,(5)
其中公式沿 t:T→0 积分,dt 为负;wˉ 表示反向时间的 Wiener 过程。前向与反向使用相同的瞬时扩散强度,额外出现的
−gt2∇xlogpt(x) 把样本推向当时的高密度区域。
这也说明网络真正缺失的量不是“噪声”这个特定参数化,而是边缘分布的 score:
s∗(x,t)=∇xlogpt(x).
条件 score 为什么能学到边缘 score
边缘分布是数据分布经过前向核后的混合:
pt(xt)=∫p(xt∣x0)p~(x0)dx0.
对 xt 求梯度并除以 pt(xt):
∇xtlogpt(xt)=pt(xt)∫p(xt∣x0)p~(x0)∇xtlogp(xt∣x0)dx0=Ep(x0∣xt)[∇xtlogp(xt∣x0)].(6)
也就是说,给定带噪样本 xt,条件 score 的后验均值恰好等于难以直接计算的边缘 score。平方损失的最优回归函数是条件均值,因此训练
LDSM=Ex0,t,xt∼p(xt∣x0)[∥sθ(xt,t)−∇xtlogp(xt∣x0)∥2](7)
就能得到 sθ(xt,t)≈∇xtlogpt(xt)。公式 (6) 是这个结论的关键条件:训练标签是条件 score,模型输入却只有 xt,t,平方回归自动对不可见的 x0 做后验平均。
若选择高斯扰动核
xt=αˉtx0+βˉtε,ε∼N(0,I),
则条件 score 有解析式
∇xtlogp(xt∣x0)=−βˉt2xt−αˉtx0=−βˉtε.(8)
令 sθ(xt,t)=−εθ(xt,t)/βˉt,公式 (7) 就变成带权噪声预测:
LDSM=E[βˉt21∥ε−εθ(xt,t)∥2].
去掉 1/βˉt2 后得到 DDPM 常用的 simple loss,但不同噪声强度的相对权重已经改变。
先指定扰动核,再反推线性 SDE
从公式 (1) 出发,未必容易求出 p(xt∣x0)。更适合训练的路线是先设计一个可直接采样、条件 score 可解析的高斯扰动核,再求与之匹配的 SDE。
设
p(xt∣x0)=N(xt;αˉtx0,βˉt2I),
并寻找线性过程 dx=ftxdt+gtdw。短时间转移为
xt+Δt=(1+ftΔt)xt+gtΔtε2.
将 xt=αˉtx0+βˉtε1 代入,并分别匹配
xt+Δt 的条件均值与方差:
αˉt+Δtβˉt+Δt2=(1+ftΔt)αˉt,=(1+ftΔt)2βˉt2+gt2Δt.
取 Δt→0,得到
ft=dtdlogαˉt,gt2=αˉt2dtd(αˉt2βˉt2).(9)
当 αˉt≡1 时只有方差增长,对应 VE-SDE;当
αˉt2+βˉt2=1 时总体尺度保持稳定,对应 VP-SDE。Noise Schedule 不只是离散超参数,它完整决定了连续 drift 和 diffusion coefficient。
Fokker–Planck 方程只追踪边缘密度
反向 SDE 仍然是随机路径。如果只关心每个时刻的边缘分布 pt(x),需要把路径方程转成密度演化方程。
用 Dirac 函数表示密度:
pt(x)=E[δ(x−xt)].
把公式 (2) 代入
δ(x−xt+Δt),围绕 x−xt 做二阶展开。对噪声求期望后,一阶随机项因 Eε=0 消失,二阶项由
E[εε⊤]=I 留下。利用 Dirac 导数在期望中的转移关系,可以得到
∂tpt(x)=−∇x⋅[ft(x)pt(x)]+21gt2Δxpt(x).(10)
第一项描述 drift 搬运概率质量,第二项描述噪声导致的密度扩散。Fokker–Planck 方程把大量随机样本路径压缩成一个确定性的边缘密度演化规律。
同一组边缘分布对应一族随机过程
利用 ∇pt=pt∇logpt,对任意满足
0≤σt2≤gt2 的函数,都可以把公式 (10) 改写为
∂tpt=−∇⋅[(ft−21(gt2−σt2)∇logpt)pt]+21σt2Δpt.(11)
因此下面整族前向 SDE 都产生完全相同的边缘分布 pt:
dx=[ft(x)−21(gt2−σt2)∇xlogpt(x)]dt+σtdw.(12)
对公式 (12) 应用反向 SDE 公式,drift 中原有的修正项再减去
σt2∇logpt,得到反向族:
dx=[ft(x)−21(gt2+σt2)∇xlogpt(x)]dt+σtdwˉ.(13)
这里的“等价”仅指同一时刻的边缘分布相同;不同 σt 对应不同联合路径、不同样本相关性和不同数值性质。这正是连续时间版本的 DDIM 自由度。
概率流 ODE 与 DDIM
取 σt=0,公式 (12) 和
(13) 都退化为同一个确定性 ODE:
dtdx=ft(x)−21gt2∇xlogpt(x).(14)
它叫 probability flow ODE。虽然单条轨迹不再注入噪声,但其边缘密度仍与原 SDE 完全一致。用 sθ 代替真实 score 后,正向积分把数据确定性映射到先验,反向积分把先验确定性映射回数据。
这带来三层作用:
- 可以使用成熟的自适应、高阶 ODE 求解器减少离散误差;
- 确定性可逆轨迹提供稳定的 latent representation 与编辑路径;
- 通过 ODE 的瞬时变量变换公式,可以像 continuous normalizing flow 一样计算似然。
在线性高斯扰动核下,把公式 (9) 和
sθ=−εθ/βˉt 代入公式
(14),整理可得
dtd(αˉtxt)=εθ(xt,t)dtd(αˉtβˉt).(15)
这正是确定性 DDIM 离散更新的连续极限。因此关系不是“DDIM 恰好像一个 ODE”,而是:DDIM 在高斯线性扰动路径上离散化了 probability flow ODE;原始随机采样则离散化了 reverse-time SDE。二者共享同一个 score 网络和同一组边缘分布,但沿着不同路径把噪声运回数据。