《生成扩散模型漫谈(十四):构建ODE的一般步骤(上)》 —— 苏剑林
《生成扩散模型漫谈(十五):构建ODE的一般步骤(中)》 —— 苏剑林
《生成扩散模型漫谈(十七):构建ODE的一般步骤(下)》 —— 苏剑林
从连续性方程看构造自由度
ODE dxt/dt=ft(xt) 搬运的边缘密度满足
∂tpt(x)=−∇x⋅(pt(x)ft(x)).(1)
给定完整的分布路径 pt 后,公式 (1) 对 d 维速度 ft 只有一个标量约束,因此解通常不唯一。理论上的自由度很大,实践上的问题却是:怎样把解写成可采样、可用有限数据回归、并且终点确实是简单分布的形式。
把密度与概率流合并成 d+1 维向量
u(t,x)=(pt(x),pt(x)ft(x)),
连续性方程就变成 ∇(t,x)⋅u=0。这样可以先求一个从边界点源 (0,x0) 出发的无散场 G(t,0;x,x0),满足
G1(0,0;x,x0)=δ(x−x0),∫G1(t,0;x,x0)dx=1.
再对真实数据源叠加:
u(t,x)=∫G(t,0;x,x0)p0(x0)dx0.(2)
G1(t,0;x,x0) 就是条件密度 pt(x∣x0),其余分量是 pt(x∣x0)ft(x∣x0)。公式 (2) 同时解释了“点源力场叠加”和“条件扩散核混合”为何是同一件事。
各向同性格林函数与 CDF 构造
若要求点源解在 (t,x−x0) 上各向同性,无散条件把解限制为 Poisson 型:
G(t,0;x,x0)∝(t2+∥x−x0∥2)(d+1)/2(t,x−x0).
因此
pt(x∣x0)∝(t2+∥x−x0∥2)(d+1)/2t,
正是 PFGM 对应的重尾条件核。令 z=(x−x0)/t 后,z 的密度不再依赖 t 与 x0,于是前向采样可以写成 xt=x0+tz;T 足够大时,x0 的影响消失,得到同型的简单先验。
各向同性方案并不限于这个核。若径向密度为 ϕt(r),其中 r=∥x−x0∥,笛卡尔密度换到球坐标后要乘 rd−1。与其先猜密度再做积分,不如直接构造径向 CDF ψt(r),要求
- ψt(0)=0、ψt(∞)=1;
- 对 r 单调递增;
- 任意固定 r>0 都有 limt→0+ψt(r)=1,使条件分布收缩到 x0。
于是可以通过求导得到密度与径向概率流:
ϕt(r)=rd−11∂rψt(r),φt(r)=−rd1∂t(ψt(r)+λt).
λt 是只依赖时间的自由项,通常可以取零。像 tanh(r/t)、1−e−r/t 这样的光滑阶跃近似都能给出一族解。高斯扩散、Poisson 扩散在这个视角下都只是不同的径向 CDF;它们在连续数学上可经坐标变换关联,但有限网络、采样器和训练权重仍会造成实践差异。
这个格林函数方案能从守恒方程系统地产生模型,但终点分布往往要在构造后再检查。下一步改为先指定单点轨迹与终点,直接把端点条件写进设计。
先画条件轨迹,再求条件速度
固定一个数据点 x0,选择一族从 x0 到任意终点 xT 的光滑且不交叉轨迹,用隐式方程表示为
φt(xt∣x0)=xT.(3)
沿同一条轨迹,右侧 xT 是积分常数。对 t 求全导数:
∂xφtdtdxt+∂tφt=0,
如果 ∂xφt 可逆,条件速度为
ft(xt∣x0)=−(∂xφt)−1∂tφt.(4)
这样构造的 ODE 轨迹必然经过指定 x0,初值条件不再需要事后验证。再给定易采样的终点密度 pT(xT),沿公式 (4) 的特征线求解连续性方程:
pt(xt∣x0)=pT(xT)exp(∫tT∇⋅fs(xs∣x0)ds).(5)
公式 (5) 的指数项是沿轨迹累计的体积变化。把公式 (3) 解出的 xT 代入后,条件密度只依赖 (t,xt,x0),于是初值、终值与归一化同时闭合。
从条件速度得到真实边缘速度
单点条件速度依赖未知数据 x0,不能直接用于生成。把全部点源混合后,真实边缘速度是后验加权平均:
ft(xt)=pt(xt)∫ft(xt∣x0)pt(xt∣x0)p0(x0)dx0=E[ft(xt∣x0)∣xt].(6)
因此用平方损失回归可计算的条件速度:
LCFM=Et,x0,xt[∥vθ(xt,t)−ft(xt∣x0)∥2].(7)
给定 (xt,t) 时,平方损失的最优解是条件期望,正好等于公式 (6)。这就是 Conditional Flow Matching 的核心:训练标签来自人为条件路径,但网络学到的是所有条件路径混合后的边缘速度。
单点轨迹选直线,训练出的真实 ODE 轨迹也一定是直线吗?
不一定。网络在同一个 xt 处平均来自不同 x0 的条件速度,积分这个平均场通常会产生曲线。直线只描述训练用的条件耦合路径,不是每个生成样本最终严格遵循的边缘轨迹。
线性路径包含高斯,也允许非高斯先验
令 T=1,选择
xt=μt(x0)+σtx1,
其中 μ0(x0)=x0、μ1(x0)=0,σ0=0、σ1=1。条件速度和条件密度分别为
ft(xt∣x0)=μ˙t(x0)+σtσ˙t(xt−μt(x0)),
pt(xt∣x0)=σtd1p1(σtxt−μt(x0)).
只要 p1 易于采样,就能先采样 x1∼p1 再构造 xt,不要求先验是高斯。最简单的直线取 μt=(1−t)x0、σt=t:
xt=(1−t)x0+tx1,ft(xt∣x0)=x1−x0=txt−x0.(8)
若 p1=N(0,I),则 pt(xt∣x0)=N((1−t)x0,t2I);若 p1 是均匀分布或其他简单分布,同一构造仍成立。
Rectified Flow 省掉显式密度求解
Rectified Flow 再向前简化一步:既然已经能直接采样端点 (x0,x1) 并计算任意插值 xt=Φt(x0,x1),就直接回归插值速度 ∂tΦt:
LRF=Et,x0,x1[∥vθ(Φt(x0,x1),t)−∂tΦt(x0,x1)∥2](9)
对直线路径,公式 (9) 就是回归 x1−x0。它与公式 (7) 相同,但构造时不必先显式写出条件密度或用特征线法求解。
严格性来自测试函数。伪轨迹的一小步满足
xt+Δt=xt+∂tΦt(x0,x1)Δt+o(Δt).
对任意光滑测试函数 h,先按给定 xt 条件化并做一阶展开,未观测端点只通过条件均值出现:
E[h(xt+Δt)]=E[h(xt+ΔtE[∂tΦt∣xt])]+o(Δt).
所以具有相同边缘演化的真实 ODE 是
dtdxt=E[∂tΦt(x0,x1)∣xt].(10)
而公式 (9) 的最优解正是这个条件均值。这里保证的是各时刻边缘分布以及端点运输正确,不是模型复原了每一对训练端点的原始耦合轨迹。
三篇文章形成的是同一问题的逐步收敛:格林函数把 ODE 构造变成守恒场求解;特征线法允许先指定条件轨迹和先验,再推出条件密度;Rectified Flow 发现只需采样轨迹并回归速度,条件期望就会自动给出正确的边缘速度。工程上最终只剩“选端点耦合、选插值、回归速度、积分 ODE”,但端点条件和分布正确性的依据仍来自前两层结构。