Lecture 3 - Flow Matching
1 问题设定与 Flow 基础
前两讲介绍了两条生成路线:
- DDPM:人为定义加噪过程,训练网络预测 noise,再学习反向去噪;
- Score Matching:学习
,把它作为走向高密度区域的“指南针”。
Lecture 2 又把二者统一到 SDE:
反向生成需要 score,而 Probability Flow ODE 可以把同一组边际分布写成确定性动力学。
这一讲提出第三种 generation paradigm:Flow Matching(FM)。它不先学习 noise,也不先学习 score,而是直接学习一个随时间变化的 velocity field:
这个速度场负责把一个容易采样的初始分布整体运输到真实数据分布。
整堂课的逻辑是:
把生成理解为 probability mass transport
↓
用 ODE 描述单个样本如何移动
↓
用 continuity equation 描述整个分布如何变化
↓
理想的 marginal velocity 无法直接监督
↓
先解决“分布到单个数据点”的条件问题
↓
聚合 conditional paths 得到 marginal path
↓
证明 Conditional Flow Matching loss 可训练且等价
↓
直接积分学习到的 ODE 进行生成
↓
分析轨迹弯曲问题,并用 Reflow 拉直轨迹
学完后,应当能够回答:
- Trajectory、flow、probability path 和 vector field 分别是什么?
- Velocity 和 score 都是向量,它们有什么本质区别?
- Continuity equation 为什么表达了 probability mass conservation?
- Flow Matching 为什么不直接回归 marginal velocity?
- Conditional Flow Matching 如何把不可计算目标变成简单 MSE?
- 为什么训练时画的是直线,推理轨迹却可能是曲线?
- Rectified Flow 与 Reflow 如何让生成轨迹更直?
- Flow Matching 和 Diffusion、Score Matching 的关系是什么?
1.1 首先记住:本讲的时间方向反过来了
这是课程开头最重要的符号提醒。
在 DDPM、Score Matching 和 SDE 的常见记号中:
t = 0 clean data
t = T noise
而 Flow Matching 文献通常采用:
t = 0 initial distribution, usually noise
t = 1 target distribution, usually data
本文遵循本讲和 Flow Matching 原论文的约定:
通常令:
因此本讲的生成方向是:
这只是领域惯例发生了变化,不代表生成问题本身改变了。阅读公式时必须先确认时间约定,否则很容易把 forward 与 reverse 的方向看反。
1.2 怎样把生成理解成“运输”?
Flow Matching 的目标不是逐个创造样本,而是把整个 probability mass 从 搬运到
。
想象初始时刻有大量粒子服从 Gaussian。我们为每个时间、每个位置规定一个速度,让所有粒子一起移动。若设计正确,到 时,粒子总体形成的分布就应当是
。
这里至少有四个容易混淆的对象。
1.2.1 Trajectory:一个样本走过的路径
给定初始点 ,单个粒子随时间的位置记为:
函数 是这一个粒子的 trajectory。
1.2.2 Flow:初始点到当前点的映射
Flow 记作:
它接收一个初始条件 ,返回该粒子在时间
的位置。改变
,便得到一族 trajectories,因此 flow 也可以理解为所有轨迹的集合。
最终希望:
这里 pushforward 记号表示:如果 ,那么
应服从
。
1.2.3 Probability path:群体在每个时刻的分布
表示粒子群在时间 的概率密度,并满足边界条件:
连接同一对端点分布的 probability path 并不唯一。可以直线插值,也可以绕路;只要起点和终点正确,就构成候选路径。
1.2.4 Vector field:在何时何地往哪里走
Velocity field 或 vector field 记为:
输入当前位置 和时间
,输出一个与
同维度的向量,表示移动方向和速度。
1.2.5 四个概念可以这样区分:
| 对象 | 回答的问题 |
|---|---|
| Trajectory |
某一个粒子走了哪条路? |
| Flow |
给定起点,时间 |
| Probability path |
时间 |
| Velocity field |
在位置 |
1.3 Velocity 和 Score 有什么区别?
总结:
- score描述固定时刻概率分布的空间几何
- velocity描述概率分布随时间演化的运输动力学
上一讲的 score 为:
本讲的 velocity 为:
二者都是向量场,也都可以参与生成,但语义不同:
- Score 是 compass:指出当前分布密度增长最快的方向;(观察当前分布的空间结构)
- Velocity 是 highway instruction:直接规定某时某地应该朝哪个方向、以多快速度移动。(不一定指向高密度区域)
Score 由当前密度 的局部几何决定;velocity 则依赖我们选择怎样运输概率质量。同一个 probability path 可能有不同表示,而连接同一对端点分布的路径更是有无数种。
在 diffusion 的 PF-ODE 中,可以由 score 构造 velocity:
Flow Matching 则选择直接学习 ,省去“先学 score、再转成 velocity”的中间步骤。
1.4 Velocity 如何决定单个样本?
单个样本服从 ODE:
给定 后,对这个 ODE 从
积分到
,就得到一条 trajectory 和最终样本
。
积分形式为:
1.4.1 为什么课程强调 Lipschitz continuity?
如果 vector field 关于 是 Lipschitz continuous,即存在常数
使:
那么给定初始条件后,ODE 的解在适当条件下是唯一的。这意味着一个起点不会同时分叉成两条不同轨迹。
课程用反例说明非 Lipschitz 场可能破坏唯一性。若:
则:
和
都满足方程和初始条件。
唯一性很重要,因为 flow 希望定义稳定的起点到终点映射。课程后面也借此解释名称:在满足适当正则性时,vector field 决定唯一 flow,因此“匹配 velocity”也就在匹配它生成的 flow。
1.5 Velocity 如何决定整个分布?
ODE 描述一个粒子,生成模型却关心一整个分布。连接二者的桥梁是 continuity equation。
1.5.1 先理解 divergence
对向量场 ,divergence 定义为:
它是一个标量,描述局部“流出减去流入”的程度:
- divergence 为正:局部净流出;
- divergence 为负:局部净流入;
- divergence 为零:流入与流出平衡。
但 probability density 的变化不能只看 velocity 。同样的速度,在高密度区域和低密度区域携带的 probability mass 不同。真正应计算 divergence 的是 probability flux:
1.5.2 Continuity equation
质量守恒要求:一个位置的密度增加量等于流入减去流出。因此:
这就是 continuity equation。
负号来自 divergence 的定义:divergence 衡量净流出,而密度随时间的增量是净流入。
现在我们有两种互补视角:
单样本视角:dx_t / dt = u_t(x_t)
分布视角: partial_t p_t = -div(p_t u_t)
如果 满足 continuity equation,就说
generates probability path
。
2 Conditional Flow Matching
Continuous Normalizing Flow 可以利用 continuity equation 推导瞬时变量替换公式:
从而:
理论上可以在训练时积分 ODE,通过 maximum likelihood 学习 vector field。但每次训练都要:
- 数值求解 ODE;
- 计算 velocity 的 divergence;
- 反向传播穿过 solver。
这会使训练缓慢且昂贵。
Flow Matching 的目标正是避开训练时的 ODE simulation:如果能直接为随机的 构造 velocity label,就可以像普通监督学习一样回归速度。
理想的 Flow Matching loss 是:
问题是,能把整个 运输到
的 marginal vector field
并不直接可见。
这和上一讲很相似:Score Matching 想回归未知 marginal score;Flow Matching 想回归未知 marginal velocity。解决策略也相似:先退回一个条件化后可解析的简单问题。
2.1 怎样先解决一个简单的条件运输问题?
2.1.1 把目标分布先缩小成一个点
从数据分布采样一个目标点:
先不考虑整个 ,而只考虑把初始分布
运输到以
为中心的 Dirac distribution。这个问题以
为条件,因此称为 conditional problem。
2.1.2 Conditional Gaussian probability path
课程采用 conditional Gaussian path:
可通过重参数化采样:
当 时:
当 时,方差趋于零:
所以这条路径从标准 Gaussian 出发,最终收缩到以 为支撑的 Dirac distribution。采样式就是在 noise point 与 data point 之间做 straight-line interpolation。
2.1.3 Conditional vector field
对采样式求导:
利用 消去起点,得到 conditional vector field:
如果 ,则进一步得到:
也就是说,对一对固定端点,整条直线上的条件速度恒定。
课程指出,可以把 conditional path 和 conditional vector field 代入 continuity equation,验证这个 vector field 确实 generates 该 Gaussian path。
2.2 怎样从“到一个点”恢复“到整个数据分布”?
每个 都定义了一条 conditional probability path。把所有真实数据点按
混合,就得到 marginal probability path:
检查端点:
而在 时:
因此它确实连接了 noise distribution 和 data distribution。
2.2.1 Marginal vector field 是条件速度的后验平均
课程构造:
Bayes' rule 给出:
所以:
这个式子的直觉非常重要:到达同一个 的训练配对可能提出不同速度,marginal velocity 就是对这些可能方向按后验概率加权后的平均。
把这个定义与 marginal path 代入 continuity equation,可以证明 generates
。于是,若:
并沿着:
积分到 ,最终样本分布就是
。
请注意,这个结论保证的是终点的分布正确,不保证某个随机起点必须抵达训练时与它配对的那个具体 。
2.3 Conditional Flow Matching 为什么可训练?
理想 FM loss 需要未知 marginal velocity:
Conditional Flow Matching 改为使用已知 conditional velocity:
两者的 loss 数值未必相等,但对模型参数的梯度相同:
为什么?展开平方项后:
在两种期望下相同;
- target norm 不依赖
,不会影响参数梯度;
- 交叉项利用 tower property 和 marginal velocity 的条件期望定义后相同。
因此可以用 tractable conditional target 训练,却得到理想 marginal Flow Matching 的同一优化方向。
在直线路径下,最终 loss 极其简单:
其中:
整段推导可以压缩为:
1. 先为“noise distribution -> 单个 x_1”设计可解析路径
2. 用 continuity equation 找到 conditional velocity
3. 混合所有 x_1,构造 marginal path 与 marginal velocity
4. 证明 CFM 与理想 FM 对 theta 具有相同梯度
5. 得到简单的 velocity regression MSE
这与 Lecture 2 的 DSM 有相同方法论:先构造容易计算的 conditional target,再证明它足以学到想要的 marginal object。
3 训练与推理
每次训练执行三步。
3.1 采样两个端点和时间
这里通常独立采样 与
,形成一个 training pair。
3.2 构造中间状态和监督速度
3.3 回归 velocity
把 输入网络,优化:
训练过程中不需要积分 ODE,也不需要计算 divergence。这正是 Flow Matching 相比 likelihood-trained Continuous Normalizing Flow 的工程优势。
3.4 Flow Matching 的推理配方
3.4.1 从初始分布采样
3.4.2 数值积分 ODE
使用学习到的 velocity:
例如 Euler method:
从 逐步积分到
。
3.4.3 得到图像
理论上:
🚀️ Flow Matching 的生成过程从一开始就是 deterministic ODE:给定相同的初始噪声、模型和 solver,轨迹固定。多样性仍来自不同的初始 。
4 Rectified Flow 与加速
这是本讲最容易误解的地方。
训练时,每一对独立采样的 都定义一条直线,并提供恒定 target velocity
。但网络并不知道配对身份,只接收
。
如果多条条件路径在相同或相近的 区域相交,它们会给出不同 target velocities。一个确定性 vector field 在同一个
只能输出一个向量。MSE 的最优解因此是条件平均:
这个平均方向通常不等于任意一条训练直线的方向。粒子走到下一位置后又重新查询 vector field,于是实际 marginal trajectory 会逐渐弯曲或“rewire”。
训练看到的对象:许多随机配对的 conditional straight lines
模型学到的对象:这些方向在每个 (x,t) 上的 conditional mean
推理走的对象:marginal vector field 生成的 trajectory
即使两条路径没有在完全相同的 相交,neural network 的平滑归纳偏置也会让附近时空位置相互影响,因此问题仍可能出现。
4.1 这会破坏最终分布吗?
在理论条件和精确学习下不会。前面已经证明 marginal velocity generates 正确的 marginal probability path,所以最终仍到达 。
问题主要在于效率与学习复杂度:
- 学到的路线与训练配对直线不同,vector field 更复杂;
- 弯曲轨迹不能用一次大步 Euler 准确逼近;
- 为控制 numerical error,需要更多 NFE。
4.2 为什么不能直接套用 DPM-Solver?
DPM-Solver 利用 diffusion ODE 的已知 semilinear structure,解析处理 linear part,只近似模型项。
Flow Matching 直接学习完整 velocity ,一般不存在同样的已知线性分解。因此课程强调:这里没有可以原样套用的 DPM-Solver“魔法”,通常仍需 Euler、Runge-Kutta 等传统 ODE solver。
4.3 Rectified Flow 如何把轨迹拉直?
课程把初始训练得到的模型称为 1-Rectified Flow。由于随机独立配对产生冲突,它的实际轨迹可能弯曲。
4.3.1 Reflow 的核心想法
既然模型已经学会从 Gaussian 生成数据,可以让它自己产生更合理的端点配对:
- 采样
;
- 用当前模型积分 ODE,得到终点:
- 保存新 pair
;
- 在新 pair 之间重新画直线:
- 用 target velocity
重新训练,得到 2-Rectified Flow。
这就是 Reflow。还可以重复生成新 pairs 并继续训练更高阶 rectified flow。
4.3.2 为什么新配对更好?
最初的 与
是独立随机配对,直线之间容易冲突。Reflow 的终点是当前 ODE 实际从该起点送达的位置,因此新 pair 与已有 transport mapping 一致。用这些 pairs 重训,会减少相互矛盾的方向,让新的 vector field 更接近直线运输。
4.3.3 为什么终点分布仍然正确?
若原模型的 flow 把 push forward 到
,则:
Reflow 改变的是 与终点之间的 coupling,而不是端点的 marginal distributions。论文还可通过 continuity equation 与唯一性结果证明重新构造的 flow 保持目标分布。
4.3.4 为什么轨迹会越来越直?
Rectified Flow 论文定义了衡量实际 velocity 与端点平均速度偏差的 straightness quantity。通过 conditional variance decomposition 和 telescoping argument,可以证明 Reflow 不增加该弯曲度,并在理想条件下逐轮改善。
直觉上,新训练目标不再要求模型协调任意随机配对,而是模仿自己已经实现的 transport coupling,因此方向冲突减少,路径更直。
4.3.5 Reflow 不是免费的
实际不会无限重复 Reflow。课程指出通常做 1 至 2 次,因为误差会累积:
- 当前 neural velocity 本身存在 approximation error;
- 生成新 pairs 时存在 ODE discretization error;
- 每轮又在近似数据上重新训练。
因此存在 quality-speed trade-off:更直的轨迹允许更简单的 Euler 和更少 NFE,但额外训练与误差积累可能降低最终质量。
4.4 为什么叫 Flow Matching,而不是 Velocity Matching?
训练 loss 表面上匹配的是 velocity:
课程给出两层解释:
- 历史上这条路线来自 Normalizing Flow 与 Continuous Normalizing Flow,名称沿用了 flow;
- 在 Lipschitz continuity 等条件下,vector field 为每个初始条件定义唯一 trajectory,因此 velocity field 与其生成的 flow 紧密对应。
所以匹配 velocity 也等价于确定其 flow。这里的 flow 不是“流量数值”,而是随时间把初始点映射到当前位置的一族映射 。
5 方法对照与概念框架
| 维度 | Discrete Diffusion | Score-based Diffusion | Flow Matching |
|---|---|---|---|
| 常见时间方向 | data |
data |
noise |
| Forward / training path | 离散 Gaussian corruption | Forward SDE / noisy marginals | 选定的 interpolation path |
| 网络学习对象 | Noise | Score | Velocity |
| 典型目标 | Noise prediction MSE | DSM | CFM velocity MSE |
| 基本生成动力学 | Reverse Markov chain | Reverse-time SDE | ODE |
| 是否随机 | 通常随机 | 通常随机 | 天生确定 |
| 确定性 counterpart | DDIM | Probability Flow ODE | 无需转换 |
| 常见数值工具 | DDPM/DDIM sampler | Euler-Maruyama、ODE solver、DPM-Solver | Euler、RK 等 ODE solver |
它们解决的是同一类问题:把 easy distribution 变成 data distribution;区别在于选择什么中间路径、学习什么局部量,以及如何执行生成。
Stochastic Interpolants 提供了更统一的框架。在适当设定下,noise prediction、score 与 velocity 彼此相关;知道其中两个,可以推导第三个。但这不意味着三种训练范式在所有设定下完全相同。
5.1 把模型、路径和求解器分开
| 层次 | 本讲中的对象 | 作用 |
|---|---|---|
| Coupling | 如何配对 |
决定 conditional paths 是否冲突 |
| Probability path | 规定分布如何从 |
|
| Training target | Conditional velocity | 为网络提供可计算监督 |
| Learned dynamics | 定义生成轨迹 | |
| Numerical solver | Euler、RK 等 | 用有限 NFE 近似 ODE 解 |
| Reflow | 重新构造 coupling 并训练 | 降低轨迹弯曲度,改善少步采样 |
改变 solver 不会改变训练目标;改变 coupling 或 Reflow 则会改变训练数据中的速度监督。这些属于不同层次的问题。
6 总结与速查
6.1 建模链
initial distribution -> probability path -> target distribution
↑
generated by velocity field
6.2 数学链
dx / dt = u_t(x) 单样本运动
↓
partial_t p_t = -div(p_t u_t) 群体质量守恒
6.3 训练链
未知 marginal velocity
↓ 条件化到单个 x_1
解析 conditional path 与 velocity
↓ 聚合
marginal path 与 marginal velocity
↓ 梯度等价
Conditional Flow Matching MSE
6.4 加速链
随机独立配对 -> velocity averaging -> curved marginal trajectories
↓
model-generated coupling
↓
Reflow
↓
straighter, fewer-step paths
6.5 建议记住的 8 个公式
6.5.1 Flow map
6.5.2 Sample ODE
6.5.3 Continuity equation
6.5.4 Linear conditional path
6.5.5 Conditional velocity
6.5.6 Marginal velocity
6.5.7 Conditional Flow Matching loss
6.5.8 Euler inference
6.6 容易混淆的概念
- 本讲
是 noise,
是 data。 这和前两讲的常见约定相反。
- Flow 不等于 trajectory。 Trajectory 是一个起点的路径;flow 是初始点到各时刻位置的映射族。
- Velocity 不等于 score。 Velocity 直接规定运动;score 描述当前密度的局部上升方向。
- Continuity equation 对 probability flux 求 divergence。 不能只对 velocity 求 divergence 来表达密度守恒。
- CFM 回归 conditional velocity,却学到 marginal velocity。 原因是 MSE 的条件期望性质和两种 loss 的梯度等价。
- 训练中的直线不是推理时逐条复现的路线。 网络没有配对标识,只能在每个
输出平均后的唯一速度。
- Crossing 不会自动破坏目标边际分布。 它主要增加 vector field 和数值积分的复杂度。
- 独立端点 pairing 是一种 coupling。 改变 coupling 可以改变路径复杂度而保持端点 marginals。
- Flow Matching 推理本来就是 deterministic。 它不需要像 DDPM 那样先构造 DDIM counterpart。
- Deterministic 不代表没有生成多样性。 多样性来自不同初始 Gaussian samples。
- DPM-Solver 不能原样用于一般 Flow Matching ODE。 它依赖 diffusion ODE 的特殊半线性结构。
- Reflow 是再次生成数据并训练,不只是换 solver。 它改变训练 coupling,使路径更直。
- Reflow 次数并非越多越好。 模型误差和离散化误差会逐轮累积。
- Straight path 的优势是 numerical。 曲率越小,Euler 等低阶方法用少量步骤时越准确。
6.7 一张最终知识图
x_0 ~ Gaussian x_1 ~ data
\ /
\ independent pairing /
+----------------------+
|
x_t = (1-t)x_0 + t x_1
|
conditional velocity = x_1-x_0
|
CFM velocity regression
|
learned u_theta(x,t)
|
dx/dt = u_theta(x,t)
|
generated data
|
model-generated endpoint pairs
|
Reflow
|
straighter paths and fewer NFEs
6.8 最简总结
- Flow Matching:把生成建模为从
到
的 probability mass transport;
- Velocity field:直接告诉粒子在每个时空位置如何移动;
- ODE:描述单个样本沿 velocity field 的 trajectory;
- Continuity equation:描述 velocity 如何在保持质量守恒的条件下推动整个分布;
- Conditional path:把复杂的 distribution-to-distribution 问题拆成 distribution-to-point 问题;
- CFM:用可计算 conditional velocity 训练,并获得与 marginal FM 相同的参数梯度;
- Linear interpolation:令
,监督速度为
;
- Marginalization:同一位置的不同条件方向被取条件平均,因此实际轨迹可能弯曲;
- Rectified Flow / Reflow:用当前模型产生更合理的 coupling,再训练出更直的路径;
- 少步生成:路径越直,Euler 等简单 solver 用较少 NFE 时越准确。
浙公网安备 33010602011771号