paper-notes / 生成式基础 / Flow Matching · 2023

Flow Matching for Generative Modeling

Yaron Lipman, Ricky T. Q. Chen, Heli Ben-Hamu, Maximilian Nickel, Matt Le · Meta AI (FAIR) + Weizmann · arXiv 2210.02747 · 2023

这篇笔记怎么读

你已经在 π₀ 里见过 flow matching loss 了——那一行代码 ||v_θ(x_t, t) - (x_1 - x_0)||²。 这篇论文就是推导出那行代码的原始论文。读完你会明白三件事:

(1) 为什么 flow matching 比 diffusion(DDPM)更简洁——ODE 替代 SDE,直线替代曲线
(2) "Conditional" FM 这一步怎么把不可计算的目标变成可训练的 loss
(3) 为什么 π₀ 选 OT 路径而不是 diffusion 路径——更快收敛、更少采样步

§1 一句话 + 你已经知道的

核心主张

Flow Matching 是一种无需模拟 ODE的 CNF 训练方法: 通过回归条件速度场(conditional vector field), 让神经网络学会把噪声沿着"流"(flow)变换成数据。 配合 Optimal Transport 路径(直线插值), 训练更稳定、采样更快、效果全面优于 DDPM / Score Matching。

展开原文 · Abstract

"We introduce a new paradigm for generative modeling built on Continuous Normalizing Flows (CNFs)... We present the notion of Flow Matching (FM), a simulation-free approach for training CNFs based on regressing vector fields of fixed conditional probability paths."

— Abstract, p.1
你在 π₀ 里已经见过的

π₀ 的 Action Expert 用 flow matching 训练:从噪声 $\mathbf{x}_0 \sim \mathcal{N}(0,I)$ 出发, 学一个速度场 $v_\theta(\mathbf{x}_t, t)$,沿着 ODE 走到真实动作 $\mathbf{x}_1$。 训练 loss 就是本文的 Eq 23(OT-CFM loss)。 这篇论文告诉你这个 loss 为什么对怎么推出来的比 diffusion 好在哪

§2 前置:CNF 是什么

这一节解决什么

Flow Matching 是 CNF(Continuous Normalizing Flow)的一种训练方法。 在讲 FM 之前,先搞清楚 CNF 在做什么——用一个随时间变化的速度场, 把简单分布(高斯噪声)"推"成复杂分布(数据)。 如果你了解 ResNet 残差块,CNF 就是"连续版残差网络"。

2.1 ODE 定义 flow

一个随时间变化的速度场 $v_t : \mathbb{R}^d \to \mathbb{R}^d$ 定义了一个 flow(流映射)$\phi_t$:

$$\frac{d}{dt}\phi_t(x) = v_t(\phi_t(x)), \quad \phi_0(x) = x$$ Eq. 1–2 · p.2 · ODE 定义
逐项拆解
$\phi_t(x)$
Flow 映射:把初始点 $x$ 在时间 $t$ 时"搬运"到的位置。类比水流中的一个粒子——$t=0$ 时在 $x$,$t=1$ 时到了 $\phi_1(x)$
$v_t(\cdot)$
速度场:在任意位置 $\phi_t(x)$,告诉粒子"现在往哪个方向走、走多快"。这就是神经网络要学的东西
$\phi_0(x) = x$
初始条件:$t=0$ 时粒子还在原位
类比 · 河流中的粒子

想象一条河。$v_t$ 是河流在每个位置每个时刻的水流速度。 你扔一个乒乓球进去($\phi_0(x) = x$),它随水流漂移, $t=1$ 时到了 $\phi_1(x)$。CNF 的目标:设计一条"河流"(速度场), 让从高斯噪声出发的所有粒子在 $t=1$ 时恰好分布成训练数据

2.2 Push-forward:噪声→数据

如果 $t=0$ 时粒子服从简单分布 $p_0$(比如标准高斯), 那么 flow $\phi_t$ 把它们"推"到 $t$ 时刻的分布 $p_t$:

$$p_t = [\phi_t]_* p_0$$ Eq. 3 · p.2 · Push-forward
逐项拆解
$[\phi_t]_*$
Push-forward 算子:把分布 $p_0$ 通过映射 $\phi_t$ "推"成新分布。直观理解:如果把每个噪声样本 $x$ 都送进 $\phi_t$,得到的一堆 $\phi_t(x)$ 的分布就是 $p_t$
$p_0$
起点分布,通常取标准高斯 $\mathcal{N}(0, I)$
$p_1 \approx q$
终点分布应该近似真实数据分布 $q$——这是 CNF 的训练目标

CNF 的训练问题:传统方法(Chen et al. 2018)用 neural ODE 参数化 $v_t$, 但训练需要模拟整条 ODE 轨迹(simulation-based),计算量巨大。 Flow Matching 要解决的就是:不模拟 ODE,直接回归速度场

🧠 理解检查
CNF 用什么数学工具把噪声变成数据?

§3 Flow Matching 目标

这一节解决什么

上一节说了 CNF 用速度场 $v_t$ 驱动粒子,但怎么训练 $v_t$? 传统方法要模拟整条 ODE(很慢)。这一节推导出一个不用模拟 ODE的训练目标—— 先给出理想 loss(FM),发现它算不了,然后用"条件化"技巧(CFM)绕过去。 这是本论文最核心的贡献。

3.1 FM loss(Eq 5)

如果我们知道一个"理想速度场" $u_t(x)$,它恰好能生成目标概率路径 $p_t$ (即 $p_0 = \mathcal{N}(0,I)$,$p_1 \approx q$),那训练目标就是让神经网络 $v_t$ 去拟合它:

$$\mathcal{L}_{\text{FM}}(\theta) = \mathbb{E}_{t, p_t(x)} \| v_t(x) - u_t(x) \|^2$$ Eq. 5 · p.3 · Flow Matching loss
逐项拆解
$v_t(x)$
神经网络预测的速度场(learnable),即"模型觉得粒子在 $(x, t)$ 应该往哪走"
$u_t(x)$
目标速度场(target):真正能生成概率路径 $p_t$ 的速度场。如果 $v_t = u_t$,loss = 0,模型完美
$\mathbb{E}_{t, p_t(x)}$
对时间 $t \sim \mathcal{U}[0,1]$ 和空间 $x \sim p_t(x)$ 取期望

3.2 为什么直接用不了

问题:$u_t(x)$ 和 $p_t(x)$ 都算不出来。 要构造一个能把高斯变成任意数据分布的速度场,需要知道整个数据分布——但我们只有有限样本。 直接用 Eq 5 训练是不可能的。

3.3 Conditional FM(Eq 9)· 核心突破

关键想法:虽然全局的 $u_t(x)$ 算不出来,但如果我们固定一个数据样本 $x_1$, 就可以定义一条条件概率路径 $p_t(x|x_1)$——从高斯 $p_0$ 到以 $x_1$ 为中心的窄分布。 这条路径及其对应的条件速度场 $u_t(x|x_1)$ 都有解析形式

$$\mathcal{L}_{\text{CFM}}(\theta) = \mathbb{E}_{t, q(x_1), p_t(x|x_1)} \| v_t(x) - u_t(x|x_1) \|^2$$ Eq. 9 · p.4 · Conditional Flow Matching loss
逐项拆解
$q(x_1)$
从训练数据集中采一个真实样本 $x_1$
$p_t(x|x_1)$
条件概率路径:给定 $x_1$ 后,在时间 $t$ 时 $x$ 的分布。$t=0$ 时是标准高斯,$t=1$ 时集中在 $x_1$ 附近
$u_t(x|x_1)$
条件速度场:驱动 $p_t(x|x_1)$ 的速度场。有解析形式,可以直接算!
核心定理 · Theorem 2 (p.4)

FM loss 和 CFM loss 有完全相同的梯度:$\nabla_\theta \mathcal{L}_{\text{FM}} = \nabla_\theta \mathcal{L}_{\text{CFM}}$。 也就是说,优化 CFM(能算)等价于优化 FM(想要但算不了)。 这意味着我们不需要知道全局速度场,只需要对每个数据样本分别构造条件路径, 然后让神经网络学会从所有这些条件路径中"平均"出一个全局速度场。

展开原文 · Theorem 2

"Assuming that $p_t(x) > 0$ for all $x \in \mathbb{R}^d$ and $t \in [0,1]$, then, up to a constant independent of $\theta$, $\mathcal{L}_{\text{FM}}$ and $\mathcal{L}_{\text{CFM}}$ are equal. Hence, $\nabla_\theta \mathcal{L}_{\text{FM}}(\theta) = \nabla_\theta \mathcal{L}_{\text{CFM}}(\theta)$."

— Theorem 2, §3.2, p.4
类比 · 拼图 vs 整幅画

想画一幅"所有训练图片的分布"(全局速度场 $u_t$)——太难了,你甚至不知道画布有多大。 但如果你拿出每张训练图片 $x_1$,画一条"从随机涂鸦到这张图"的路径(条件速度场 $u_t(\cdot|x_1)$)——这很容易。 Theorem 2 说:所有这些小路径的加权平均,恰好就是你想要的那幅大画

🧠 理解检查
Conditional Flow Matching(CFM)为什么能替代原始 Flow Matching(FM)?

§4 选路径:Diffusion vs OT

这一节解决什么

上一节说 CFM 需要定义"条件概率路径" $p_t(x|x_1)$。 路径怎么选?本文给了两大类:Diffusion 路径(弯曲、复杂)和 Optimal Transport 路径(直线、简洁)。 这是本论文最有实际价值的部分——π₀ 选了 OT 路径,你读完就知道为什么。

4.1 Gaussian 条件路径

论文考虑一大类 Gaussian 条件路径:

$$p_t(x|x_1) = \mathcal{N}(x \mid \mu_t(x_1),\, \sigma_t(x_1)^2 I)$$ Eq. 10 · p.4 · Gaussian 条件路径
逐项拆解
$\mu_t(x_1)$
高斯均值,随时间变化。边界条件:$\mu_0(x_1) = 0$(起点在原点),$\mu_1(x_1) = x_1$(终点在数据样本处)
$\sigma_t(x_1)$
高斯标准差,随时间变化。边界条件:$\sigma_0(x_1) = 1$(起点是标准高斯),$\sigma_1(x_1) = \sigma_{\min} \approx 0$(终点集中在 $x_1$)

不同的 $\mu_t$ 和 $\sigma_t$ 选择 → 不同的路径形状。论文给出通用条件速度场(Theorem 3, p.5):

$$u_t(x|x_1) = \frac{\sigma_t'(x_1)}{\sigma_t(x_1)}(x - \mu_t(x_1)) + \mu_t'(x_1)$$ Eq. 15 · p.5 · 通用 Gaussian 条件 VF

4.2 Diffusion 路径(弯曲)

如果选 $\mu_t(x_1) = \alpha_{1-t} x_1$,$\sigma_t(x_1) = \sqrt{1 - \alpha_{1-t}^2}$ (VP diffusion 的逆时间版本),得到的路径和 DDPM 等价。 但这些路径有一个问题:粒子的轨迹是弯曲的,会先"过头"再折回来。

4.3 OT 路径(直线)· π₀ 用的

如果选最简单的线性插值

$$\mu_t(x_1) = t \cdot x_1, \quad \sigma_t(x_1) = 1 - (1-\sigma_{\min})t$$ Eq. 20 · p.5 · OT 路径参数
逐项拆解
$\mu_t = t \cdot x_1$
均值从 $0$ 线性移动到 $x_1$。在 $t=0.5$ 时刚好在一半的位置
$\sigma_t = 1 - (1-\sigma_{\min})t$
标准差从 $1$(纯噪声)线性缩小到 $\sigma_{\min} \approx 0$(聚集在 $x_1$)

对应的条件速度场:

$$u_t(x|x_1) = \frac{x_1 - (1 - \sigma_{\min})x}{1 - (1 - \sigma_{\min})t}$$ Eq. 21 · p.5 · OT 条件速度场

这个速度场的方向不随时间变化(只是大小变化)—— 粒子沿着直线从噪声走到数据。这就是为什么叫"Optimal Transport"路径。

Figure 2: Diffusion vs OT vector fields
Fig 2 · p.6 Compared to the diffusion path's conditional score function, the OT path's conditional vector field has constant direction in time and is arguably simpler to fit with a parametric model. 左:Diffusion 路径——箭头方向随 $t$ 旋转,回归目标复杂。右:OT 路径——箭头方向恒定,回归目标简单。蓝=大幅度,红=小幅度。

4.4 OT-CFM loss(Eq 23)· π₀ 实际用的

把 OT 路径代入 CFM loss,得到 π₀ 实际使用的训练目标:

$$\mathcal{L}_{\text{CFM}}(\theta) = \mathbb{E}_{t, q(x_1), p(x_0)} \left\| v_t(\psi_t(x_0)) - \big(x_1 - (1-\sigma_{\min})x_0\big) \right\|^2$$ Eq. 23 · p.6 · OT-CFM loss(π₀ 用的就是这个)
逐项拆解
$x_0 \sim p(x_0) = \mathcal{N}(0, I)$
采一个噪声样本
$x_1 \sim q(x_1)$
采一个真实数据样本(在 π₀ 里是一段真实动作)
$\psi_t(x_0) = (1-(1-\sigma_{\min})t)x_0 + t x_1$
线性插值:$t=0$ 时是纯噪声 $x_0$,$t=1$ 时是纯数据 $x_1$。这就是"OT 直线路径"
$v_t(\psi_t(x_0))$
模型在插值点处预测的速度
$x_1 - (1-\sigma_{\min})x_0$
真实的"直线速度"——ground truth。当 $\sigma_{\min} \to 0$ 时就是 $x_1 - x_0$(从噪声到数据的方向)
这就是 π₀ 代码里的那一行

当 $\sigma_{\min} \approx 0$ 时,Eq 23 简化为:
采噪声 $x_0$,采数据 $x_1$,做线性插值 $x_t = (1-t)x_0 + t x_1$, 让模型预测 $v_\theta(x_t, t) \approx x_1 - x_0$
这就是 π₀ 的 pi0_pytorch.py 里 flow matching loss 的完整含义。

🧠 理解检查
π₀ 的 flow matching loss 在做什么?

§5 实验亮点

这一节解决什么

公式推完了,效果到底怎么样?两个关键结论: (1) FM + OT 在 FID/NLL 上全面优于 DDPM 和 Score Matching, (2) 训练收敛更快、采样需要的步数更少。

Figure 4: Checkerboard trajectories
Fig 4 · p.7 Trajectories of CNFs trained on 2D checkerboard data. The OT path introduces the checkerboard pattern much earlier, while FM results in more stable training. 棋盘格数据上三种方法对比。FM+OT(第三行)收敛最快,低步数采样质量最好。

5.1 FID / NLL 全面领先(Table 1)

方法 CIFAR-10 FID↓ ImageNet 64 FID↓ NFE↓
DDPM7.4817.36264
Score Matching19.9419.74441
FM w/ Diffusion8.0616.88187
FM w/ OT6.3514.45138

FM+OT 在三个指标上全面领先:更好的 FID(样本质量)、更好的 NLL(似然)、 更少的 NFE(采样需要的函数评估次数,直接决定推理速度)。

5.2 训练快 + 采样省

Figure 5: FID training curves
Fig 5 · p.8 Image quality during training, ImageNet 64×64. FM+OT(蓝线)在同样的训练 epoch 下 FID 最低,收敛速度最快。

§6 连接 π₀:从图片到机器人动作

这一节解决什么

Flow Matching 原论文是在图片生成上验证的。π₀ 把它搬到了机器人动作生成—— $x_1$ 不再是图片像素,而是一段 50 步的关节角度序列。 核心 loss 完全一样,只是"数据空间"从 $\mathbb{R}^{3 \times H \times W}$ 变成了 $\mathbb{R}^{50 \times \text{DoF}}$。

对应关系Flow Matching 原论文π₀
数据 $x_1$图片像素50-step action chunk(关节角度)
噪声 $x_0$$\mathcal{N}(0,I)$
速度场 $v_\theta$U-Net860M Action Expert transformer
条件信息类别标签(conditional generation)VLM backbone 的激活(图像+语言+metadata)
路径类型OT 直线(Eq 20)同 OT 直线
采样步数~100 NFE(图片生成)5 步(机器人需要实时性)
时间步注入U-Net 的 timestep embeddingAdaptive RMSNorm(类似 DiT)

§7 收获

核心收获

1. 关键突破是 Conditional FM——把不可计算的全局速度场分解成可计算的条件速度场。这让 CNF 训练不再需要模拟 ODE。
2. OT 路径 = 直线 = 更简单的回归目标——速度场方向恒定,神经网络更容易学,采样步数更少。
3. 从 Diffusion 到 Flow Matching 是"去随机化"——DDPM 用 SDE(加随机噪声),FM 用 ODE(确定性)。路径更直、训练更稳、采样更快。
4. π₀ 的 loss 就是 Eq 23——线性插值 + 预测直线方向,整个 flow matching 管线的核心就这一行。

局限

1. 条件 OT ≠ 全局 OT——每条"条件路径"是 OT 最优的,但所有路径合在一起的 marginal flow 不一定是全局 OT。论文自己也承认这一点。
2. 只在图片上验证——2023 年论文发布时还没有在机器人/策略上的应用。π₀(2024)才把它搬过去。
3. 对 ODE solver 的依赖——采样需要用 dopri5 等 ODE solver,步数虽然比 DDPM 少,但不像 GAN 那样一步出结果。

对你下一步学习的启示

现在你有了完整的知识链:
DDPM(加噪去噪、SDE)→ Flow Matching(确定性 ODE、直线路径)→ Diffusion Policy(DDPM 做机器人策略)→ π₀(FM+OT 做机器人策略)
下一篇可以读 Dreamer v1(世界模型路线),或者 SuSIE(π₀.₇ 的 subgoal 生成来源)。