Skip to content

Flow Matching

Flow Matching 可以理解为一种训练连续生成过程的方法:先设定一条从简单分布到数据分布的概率路径,再训练一个速度场,让样本沿着这条路径移动。

设起点分布为 p0,通常是高斯噪声;终点分布为 p1,对应真实数据。Flow Matching 关注的是中间每个时刻 t[0,1] 的分布 pt,以及能推动这族分布演化的速度场。

如果把样本看成一群粒子,那么模型要学的就是:粒子在时刻 t、位置 x 时,应该朝哪个方向移动,移动得多快。

记号说明

不同论文会采用不同方向的记号。这里使用 CNF / Flow Matching 中比较自然的一套:

  • x0p0 表示起点,通常是高斯噪声;
  • x1p1 表示终点,通常是数据分布。

一些 diffusion 论文会把干净数据写成 x0,这和本文的记号方向相反。阅读不同材料时要先确认时间方向。

从 CNF 开始:流是怎么定义的

Flow Matching 建立在 Continuous Normalizing Flow(CNF)的语言上。CNF 用一个连续时间 ODE 描述样本的运动:

dxtdt=vθ(xt,t),t[0,1].

这里,xt 是时刻 t 的样本位置,vθ(x,t) 是模型学习到的速度场。它告诉我们:当前位置 x 在时刻 t 应该往哪里走。

如果从简单分布 p0 中采样

x0p0,

再按照上面的 ODE 从 t=0 积分到 t=1,样本就会被连续地推向另一个分布。这个由 ODE 诱导的映射通常称为 flow map。

概率密度如何随流变化

单个样本沿 ODE 运动,一整群样本的密度 pt(x) 也会随时间变化。它满足连续性方程:

tpt(x)+(pt(x)vt(x))=0.

这条方程表达的是概率质量守恒。取空间中的一个区域 A,区域内概率质量的变化率等于边界上的净流出量:

ddtApt(x)dx=Apt(x)vt(x)n(x)dS.

由散度定理可得

Apt(x)vt(x)n(x)dS=A(pt(x)vt(x))dx.

代回上式:

A[tpt(x)+(pt(x)vt(x))]dx=0.

由于区域 A 可以任意选取,括号中的项应为零,于是得到连续性方程。

CNF 为什么适合生成建模

CNF 的好处在于,它同时给出了采样和密度变化的描述。沿着轨迹 xt,对数密度满足瞬时变量替换公式:

ddtlogpt(xt)=vθ(xt,t).

0 积分到 1

logp1(x1)=logp0(x0)01vθ(xt,t)dt.

因此,如果速度场足够好,模型既可以从噪声生成样本,也可以通过散度积分估计似然。实际训练里,直接用似然训练 CNF 往往需要反复求解 ODE,成本较高。Flow Matching 提供了一条更直接的训练路线。

Flow Matching 的目标

假设我们已经指定了一条概率路径 pt,它满足:

  • p0 是容易采样的简单分布,例如标准高斯;
  • p1 是数据分布,或者至少接近数据分布。

如果存在一个速度场 ut(x) 能生成这条路径,也就是

tpt(x)+(pt(x)ut(x))=0,

那么可以直接训练模型速度场 vθ(x,t) 去拟合它:

LFM(θ)=EtU[0,1]Expt[vθ(x,t)ut(x)2].

这个损失的含义很清楚:随机取一个时间 t,再从当前分布 pt 中取一个点 x,让模型给出的速度接近目标速度 ut(x)

训练难点在于,真实情况下我们通常没有 pt(x) 的解析式,也不知道边缘速度场 ut(x)。手里只有数据样本 x1p1,以及一个容易采样的起点分布 p0。Flow Matching 的关键步骤,是把边缘路径问题改写成条件路径问题。

Conditional Flow Matching

Conditional Flow Matching(CFM)从更容易构造的条件路径入手。

c 是某个条件变量。它可以是一个数据样本 x1,也可以是一对起点和终点 (x0,x1),还可以是其他帮助定义路径的随机变量。先定义条件路径 pt(xc),再把这些条件路径混合起来:

pt(x)=pt(xc)q(c)dc.

换句话说,整体路径由许多更小的条件路径平均得到。我们不必先写出完整的边缘分布,只要每条条件路径容易采样、速度场容易计算,就能训练。

边缘速度场的来源

假设每条条件路径都有对应的条件速度场 ut(xc),并满足

tpt(xc)+(pt(xc)ut(xc))=0.

c 积分:

tpt(x)=tpt(xc)q(c)dc=(pt(xc)ut(xc))q(c)dc.

交换积分和散度:

tpt(x)=(pt(xc)ut(xc)q(c)dc).

于是可以定义边缘速度场:

ut(x)=pt(xc)ut(xc)q(c)dcpt(x).

这样就有

tpt(x)+(pt(x)ut(x))=0.

也可以写成条件期望形式:

ut(x)=E[ut(XtC)Xt=x].

也就是说,某个时刻、某个位置上的边缘速度,是所有经过该位置的条件路径速度的平均。

CFM 损失

既然边缘速度场可以由条件速度场平均得到,训练时可以直接拟合条件速度:

LCFM(θ)=EtU[0,1]Ecq(c)Expt(c)[vθ(x,t)ut(xc)2].

这个目标看起来与原始 FM 损失不同,但它们的梯度一致;更具体地说,两者只差一个与 θ 无关的常数项。

固定 (x,t),记

Y=ut(XtC),a=vθ(x,t).

边缘速度场是条件期望:

ut(x)=E[YXt=x].

平方误差可以分解为

E[aY2Xt=x]=aut(x)2+E[Yut(x)2Xt=x].

展开即可看到原因。把 Y 写成

Y=ut(x)+(Yut(x)),

aY2=aut(x)2+Yut(x)22(aut(x))(Yut(x)).

对条件分布取期望时,交叉项消失,因为

E[Yut(x)Xt=x]=0.

再对 (x,t) 取期望,就得到

LCFM(θ)=LFM(θ)+const,

因此

θLCFM(θ)=θLFM(θ).

这解释了为什么训练时可以避开难算的边缘速度场,只回归条件速度场。

Gaussian 条件路径

一种常用选择是高斯条件路径。给定数据样本 x1,定义

pt(xx1)=N(xμt(x1),σt2I).

其中,μt(x1) 是时间相关的均值,σt 是时间相关的标准差。通常会设置类似的边界条件:

μ0(x1)=0,σ0=1,

使 t=0 时接近标准高斯;并令

μ1(x1)=x1,σ1=σmin,

使 t=1 时分布收缩到数据点附近。

重参数化

高斯路径可以写成

xt=μt(x1)+σtϵ,ϵN(0,I).

这样可以直接采样训练点 xt

条件速度场

对上式按时间求导,保持 x1ϵ 固定:

dxtdt=μ˙t(x1)+σ˙tϵ.

训练时模型看到的是 xt,所以把

ϵ=xtμt(x1)σt

代回,得到

ut(xtx1)=μ˙t(x1)+σ˙tσt(xtμt(x1)).

其中,μ˙t(x1) 描述均值的移动,第二项描述分布宽度的变化。

使用重参数化形式时,条件速度还可以写成

ut(xtx1)=μ˙t(x1)+σ˙tϵ.

于是 CFM 目标可以写成

LCFM(θ)=Et,x1,ϵ[vθ(μt(x1)+σtϵ, t)(μ˙t(x1)+σ˙tϵ)2].

这就是实际实现中常见的形式:采样 x1ϵt,构造 xt 与目标速度,再做一次均方误差回归。训练阶段不需要对模型自己的 ODE 做数值求解。

与 diffusion 的关系

Diffusion 中常见的加噪形式可以写成

xt=αtx1+σtϵ.

这也是一类高斯条件路径,对应

μt(x1)=αtx1.

因此条件速度为

ut(xtx1)=α˙tx1+σ˙tϵ,

也可以写成只依赖 xt 的形式:

ut(xtx1)=α˙tx1+σ˙tσt(xtαtx1).

对高斯条件分布

pt(xx1)=N(xμt(x1),σt2I),

条件 score 为

xlogpt(xx1)=xμt(x1)σt2.

因此条件速度也能写成

ut(xx1)=μ˙t(x1)σ˙tσtxlogpt(xx1).

这个式子把 velocity matching 和 score matching 联系起来:对于高斯路径,速度与 score 之间存在直接的代数关系。Flow Matching 可以直接学习 ODE 速度场,而不必先训练 score 再转换为 ODE。

直线路径与 Optimal Transport

Flow Matching 的路径不必固定为 diffusion path。另一类常用路径是起点和终点之间的线性插值。

(x0,x1) 是起点分布 p0 和数据分布 p1 的一个 coupling,定义

xt=(1t)x0+tx1.

对时间求导:

dxtdt=x1x0.

所以条件速度场为

ut(xtx0,x1)=x1x0.

对应的训练目标是

LCFM(θ)=Et,(x0,x1)π[vθ((1t)x0+tx1, t)(x1x0)2].

如果 coupling π(x0,x1) 选成 Optimal Transport coupling,这条线性插值路径就是 OT displacement interpolation。此时可以理解为:先用整体搬运成本较小的方式匹配噪声点和数据点,再让每一对样本沿直线移动。

Rectified Flow 也使用类似的线性插值形式:

Xt=(1t)X0+tX1,

并把边缘速度场写为

vtX(z)=E[X1X0Xt=z].

这和前面得到的条件平均形式一致。

训练与采样

训练时,Flow Matching 更像监督回归。给定一批数据,随机采样时间 t,再根据选定的条件路径构造中间点 xt 和目标速度 ut,最后让模型输出 vθ(xt,t) 去拟合这个速度。

以高斯条件路径为例:

xt=μt(x1)+σtϵ,ut=μ˙t(x1)+σ˙tϵ.

每一步训练只需要前向计算和均方误差损失。模型自己的 ODE 不参与训练阶段的数值求解。

采样阶段则需要解 ODE:

dxtdt=vθ(xt,t),x0p0.

t=0 积分到 t=1 后,得到数据分布附近的样本。

因此,simulation-free training 指的是训练过程不需要模拟模型 ODE;生成样本时仍然要进行 ODE 积分。

Flow Matching 的特点

Flow Matching 的训练目标直接,形式上接近普通监督学习。它避免了 CNF 训练中反复通过 ODE 求解似然的成本,也允许研究者自由设计概率路径。Gaussian path、diffusion path、OT path 和直线路径都可以放进同一个框架里讨论。

这种自由度也带来新的选择问题。路径设计会影响训练难度、采样效率和生成质量。路径太曲折,模型需要学习更复杂的速度场;coupling 质量不好,线性路径也可能难以建模;速度场不够平滑,采样时的 ODE solver 可能需要更多步数。

Flow Matching 的价值不只在于一个新的损失函数,也在于它把生成建模重新表述为“设计一条合适的概率路径,并学习对应速度场”的问题。

总结

Flow Matching 为一条从噪声分布到数据分布的概率路径学习速度场。边缘形式的目标是

LFM(θ)=Et,xpt[vθ(x,t)ut(x)2].

实践中常用条件路径训练:

LCFM(θ)=Et,c,xpt(c)[vθ(x,t)ut(xc)2].

连接二者的关键关系是

ut(x)=E[ut(XtC)Xt=x].

边缘速度场是条件速度场在同一时空点上的条件平均,因此可以通过回归条件速度来学习整体流。Flow Matching 训练阶段通常不需要求解模型 ODE,采样阶段再沿学习到的速度场从噪声积分到数据。