MIT 6.S184 Lecture 2:Flow Matching

来源

本笔记基于 Lecture 2 Flow Matching slides 与 MIT 6.S184 lecture notes 中 Flow / Diffusion Models、Flow Matching 相关章节整理。Slides 的主线是推导 flow model 的训练算法;lecture notes 给出了更完整的定义、定理和训练算法。

参见:

0. 本讲主线

一句话总结:

Flow Matching 的目标是:
不用在训练时模拟 ODE,而是把训练 flow model 变成一个简单的 supervised regression 问题。

我们最终想训练一个 neural network vector field:

使得从简单噪声分布出发,沿着 ODE 走到 时,得到数据分布:

Slides 里把本讲目标说得很直接:训练就是找到参数 ,让从 出发、沿着 vector field 走到终点后的分布等于 。


1. 学习优先级

必须掌握

  • Probability Path:从噪声到数据的一族分布。
  • conditional vs marginal 的区别。
  • Conditional Flow Matching loss 为什么可训练。
  • Gaussian / CondOT path 下的核心公式:
  • Flow Matching 训练不需要模拟 ODE;采样时才需要模拟 ODE。

需要理解,但不必死磕证明

  • marginalization trick。
  • continuity equation。
  • 为什么 conditional loss 和 marginal loss 的梯度相同。

可以一笔带过

  • ODE / SDE 的严格存在唯一性证明。
  • continuity equation 的完整 PDE 推导。
  • 复杂 numerical solver,例如 Heun method。Euler method 理解即可。

2. Recap:Flow Model 和 Diffusion Model

Slides 开头回顾了两个模型:

Flow Model

其中 是 neural network vector field。采样时,从 模拟到 ,返回 。

Diffusion Model

相比 flow model,多了 stochastic noise term 。

这节课主要关注 Flow Model

本讲的训练算法是 Flow Matching,所以重点是 ODE 版本:


3. Flow Matching Matrix:本讲的概念地图

Slides 用一个矩阵组织 Flow Matching 的核心对象:

层次ConditionalMarginal
Probability Path
Vector Field
Flow Matching Loss

关键理解:

  • Conditional:针对单个 data point 。
  • Marginal:对整个 data distribution 做平均。
  • Conditional objects 通常可计算。
  • Marginal objects 才是我们真正想要的,但通常不可直接计算。
  • Flow Matching 的核心技巧是:
    训练 conditional loss,却等价于优化 marginal loss。

4. Probability Path:只规定分布快照,不规定粒子轨迹

4.1 Conditional Probability Path

给定一个数据点 ,conditional probability path 是一族分布:

满足:

意思是:

  • :还是噪声分布。
  • :坍缩到单个数据点 。
  • 中间的 :从噪声逐渐过渡到数据点。

容易误解

Probability path 只规定每个时间点的 marginal distribution,也就是每一帧长什么样。
它本身不规定单个 particle 如何随时间运动。Slides 也特别强调:probability path says nothing about the evolution of a single particle in time.


4.2 Marginal Probability Path

如果先采样一个数据点:

再从 conditional path 采样:

那么 的分布就是 marginal probability path:

它满足:

直觉

Conditional path 是“从噪声到某一个具体数据点 ”。
Marginal path 是“从噪声到整个数据分布 ”。


5. Gaussian Probability Path:最重要的例子

Gaussian conditional probability path 定义为:

其中 是 noise schedule,满足:

因此:

  • :
  • :

也就是说,它确实从标准高斯噪声走到数据点 。

实际采样时:

lecture notes 指出 Gaussian probability path 是最重要的例子,也是很多 state-of-the-art 模型使用的路径形式。


6. Vector Field:让粒子真的动起来

Probability path 只告诉我们“每个时间点的分布应该是什么”,但还没有告诉我们:

粒子 应该怎么移动,才能让 ?

这就需要 vector field。


6.1 Conditional Vector Field

Conditional vector field 记作:

它的作用是:如果

并且

那么:

也就是说,它让 ODE 的分布跟随 conditional probability path。


6.2 Gaussian Path 下的 Conditional Vector Field

对于:

Conditional target vector field 是:

其中:

lecture notes 给出了这个公式,并说明它的 ODE 轨迹会产生 Gaussian conditional probability path。


6.3 更好记的形式

因为:

所以它的时间导数是:

因此 Gaussian path 下的训练 target 可以写成:

这个形式在实现时更直接。


7. CondOT Path:最常用、最简单的特例

取:

则:

并且:

所以 target velocity 是:

这是本讲最应该记住的公式

对 CondOT path:

这就是 Flow Matching 训练可以变得非常简单的原因。lecture notes 也把这个特例总结为简单有效的训练过程。


8. Marginal Vector Field:真正想学,但不可直接算

我们真正想要的是一个 vector field:

使得:

推出:

特别是:

这个 marginal vector field 由 conditional vector field 加权平均得到:

可以把它理解成:

关键困难

这个 marginal vector field 才是我们采样时想要的,但它通常不可直接计算,因为里面有对整个数据分布的积分,而且 本身也难算。

Slides 后半部分也强调:marginal probability path、marginal vector field、marginal FM loss 都是我们想要的对象,但它们本身不可 tractable;不过仍然可以通过 conditional objects 学到。


9. Continuity Equation:理解即可

Continuity equation 说的是:

直觉:

  • 左边 :位置 附近概率质量随时间的变化。

  • 右边 :净流入的概率质量。

  • 如果一个 vector field 真能让分布沿着 走,那么概率质量的变化必须满足这个守恒关系。

lecture notes 用 continuity equation 证明了 marginalization trick:由 conditional vector field 可以构造出 follows marginal path 的 marginal vector field。

学习建议

这里不需要第一次就掌握完整 PDE 证明。
你只需要记住它的作用:
用来证明某个 vector field 的 ODE 轨迹确实会产生指定 probability path。


10. Flow Matching Loss

10.1 理想目标:Marginal Flow Matching Loss

理想情况下,我们想让 neural network 学到:

自然的 MSE loss 是:

问题是:

不可直接计算。


10.2 可训练目标:Conditional Flow Matching Loss

于是改用:

这个 loss 是 tractable 的,因为:

  • 可以从 dataset 取。

  • 可以从 均匀采样。

  • 可以通过加噪采样出来。

  • 有解析公式。

lecture notes 明确指出,虽然我们真正想最小化 marginal loss,但 conditional velocity field 是 tractable 的,因此可以最小化 conditional loss。


11. 为什么 conditional loss 可以替代 marginal loss?

核心定理:

其中 与 无关。

因此:

这意味着:

最小化 conditional flow matching loss,等价于最小化 marginal flow matching loss。

这就是 Flow Matching 的核心理论保证。lecture notes 将其表述为 Theorem 12,并强调二者梯度一致。


12. Gaussian Path 下的最终训练目标

一般 Gaussian path:

训练 loss:

对于 CondOT path:

得到:

实现视角

训练时模型输入是:

模型输出是:

监督信号是:


13. Flow Matching Training Algorithm

以 Gaussian CondOT path 为例:

  1. 从 dataset 采样数据:
  1. 采样时间:
  1. 采样噪声:
  1. 构造 noisy sample:
  1. 构造 target velocity:
  1. 计算 loss:
  1. 对 做 gradient update。

lecture notes 中的 Algorithm 3 正是这个过程,并指出 Flow Matching 训练有几个重要特点:不需要在训练时模拟 ODE,是一个简单的 regression objective,且非常适合大规模模型训练。


14. 训练 vs 采样:不要混淆

训练时

不模拟 ODE。

只做:

然后回归:

采样时

才需要模拟 ODE:

从 积分到 ,返回:

核心区别

Flow Matching 的训练是 simulation-free。
但生成样本时仍然要 solve / simulate ODE。


15. 和 Stable Diffusion 3 / MovieGen 的关系

Slides 后面提到,Stable Diffusion 3 和 Meta MovieGen 的生成网络使用了前面介绍的 Flow Matching 类训练算法。

这里不需要深究模型架构。当前阶段只要理解:

大模型里的核心训练目标,本质上可以简化成:
在 noisy data 上预测从 noise 指向 data 的 velocity。


16. 常见误区

误区 1:Probability path 就是 particle trajectory

不是。

Probability path 只是每个时间点的分布快照。
Trajectory 是由 vector field / ODE 决定的。


误区 2:Conditional vector field 就够了

不够。

Conditional vector field 是针对某个固定数据点 的。
如果直接用它,终点会坍缩到这个 ,不是生成新的 data sample。

真正用于生成的是 marginal vector field。


误区 3:训练时要 rollout ODE

不需要。

Flow Matching 的优势正是训练时不 rollout。
只需要采样 、采样 noise、构造 ,然后做 MSE regression。


误区 4:Conditional loss 和 marginal loss 是一样的函数

严格说不是。

它们相差一个与参数 无关的常数:

所以优化时等价,因为梯度相同。


17. 记忆版总结

Flow Matching in one page

目标:

先设计 probability path:

Gaussian path:

CondOT path:

target velocity:

训练目标:

训练后采样:

返回:


18. 和后续内容的连接

Flow Matching 学的是:

后续 Score Matching 会学习:

对于 Gaussian probability path,lecture notes 说明 vector field 和 score function 可以互相转换,所以 Flow Matching 和 Diffusion / Score Matching 之间有很深的联系。


19. 复习问题

  1. 为什么 probability path 本身不等于 ODE trajectory?
  2. Conditional probability path 和 marginal probability path 的区别是什么?
  3. 为什么 marginal vector field 是真正想学的对象?
  4. 为什么 marginal vector field 不 tractable?
  5. CondOT path 下,为什么 target velocity 是 ?
  6. 为什么训练 conditional flow matching loss 等价于训练 marginal flow matching loss?
  7. Flow Matching 训练时为什么不需要模拟 ODE?
  8. 采样时为什么又必须模拟 ODE?

20. 最小实现伪代码

假设使用 CondOT path:

for z in dataloader:
    t = Uniform(0, 1).sample()
    eps = Normal(0, 1).sample(shape=z.shape)
 
    x_t = t * z + (1 - t) * eps
    target = z - eps
 
    pred = model(x_t, t)
    loss = mse(pred, target)
 
    loss.backward()
    optimizer.step()

采样时:

x = Normal(0, 1).sample(shape)
for t in time_grid_from_0_to_1:
    x = x + dt * model(x, t)
return x