Skip to content

Flow Matching 流匹配

Flow Matching 是一类基于连续归一化流(Continuous Normalizing Flows, CNF)的生成模型训练方法。它由 Lipman et al. (2022) 在论文 "Flow Matching for Generative Modeling" 中提出,核心思想是通过一个极其简洁的回归目标来训练神经网络,使其学会一个从噪声分布到数据分布的连续变换(速度场)。相比扩散模型,Flow Matching 在数学上更直观、采样效率更高,已经成为 Stable Diffusion 3、FLUX 等前沿模型的核心训练范式。

学习路线: Normalizing Flows → Neural ODEs / CNF → Flow Matching (CFM) → Optimal Transport 路径 → Rectified Flow → 应用(SD3, FLUX)


1. 背景与动机

生成模型的演进

深度生成模型经历了几代范式的演变:

时期 模型 核心思想 主要局限
2013-2014 VAE 变分推断 + 编码器-解码器 生成质量偏模糊
2014-2018 GAN 对抗训练,生成器 vs 判别器 训练不稳定,模式坍缩
2020-2022 Diffusion 逐步加噪 → 逐步去噪 采样步骤多,数学复杂
2022-至今 Flow Matching 直接学习速度场,ODE 框架 理论更简洁,采样更快

Diffusion 模型的问题

尽管扩散模型在图像生成中取得了巨大成功,但它存在几个痛点:

  1. 采样速度慢:标准 DDPM 需要 1000 步采样,即便 DDIM 等加速方法也通常需要 20-50 步
  2. 数学框架复杂:涉及前向 SDE、反向 SDE、score function、noise schedule(\(\alpha_t, \bar{\alpha}_t, \sigma_t\))等大量术语
  3. 路径弯曲:扩散过程走的是一条从数据到噪声的"弯曲路径",反向采样时需要更多步骤来精确跟踪
  4. 设计选择多:噪声调度表的选择(线性、余弦、sigmoid 等)对生成质量影响很大,且缺乏统一理论指导

Flow Matching 的核心思想

Flow Matching 回答了一个朴素但深刻的问题:

能不能找到一条从噪声到数据的最短、最直的路径,然后直接学习沿着这条路径走的速度?

答案是可以的。Flow Matching 的做法是:

  1. 定义一条从噪声 \(x_0\) 到数据 \(x_1\)直线插值路径
  2. 计算沿这条路径的速度(方向 + 大小)
  3. 训练神经网络预测这个速度

整个训练目标简化为一个简单的均方误差回归问题,不需要 noise schedule、不需要 score matching、不需要 SDE 求解器。


2. 前置知识:Normalizing Flows

在理解 Flow Matching 之前,需要先了解两个前置概念:传统的 Normalizing Flows 和 Continuous Normalizing Flows(Neural ODEs)。

可逆变换与密度变换

Normalizing Flows 的核心思想是通过一系列可逆变换,将一个简单分布(如标准高斯)变换为一个复杂的数据分布。

\(z \sim p_z(z)\) 是一个简单的先验分布(例如 \(\mathcal{N}(0, I)\)),\(f\) 是一个可逆变换,数据 \(x\) 通过以下方式生成:

\[ x = f(z), \quad z = f^{-1}(x) \]

变量替换公式

由于 \(f\) 是可逆的,我们可以通过变量替换公式(Change of Variables)精确计算数据的概率密度:

\[ p_x(x) = p_z(f^{-1}(x)) \cdot \left| \det \frac{\partial f^{-1}}{\partial x} \right| \]

取对数后:

\[ \log p_x(x) = \log p_z(f^{-1}(x)) + \log \left| \det \frac{\partial f^{-1}}{\partial x} \right| \]

这意味着只要能计算 \(f^{-1}\) 以及其 Jacobian 矩阵的行列式,就能精确计算数据的对数似然,从而进行最大似然训练。

传统 Normalizing Flows 的问题

为了让上述公式可计算,传统 Normalizing Flows(如 RealNVP, Glow, NICE)需要满足两个约束:

  1. 变换必须可逆\(f\)\(f^{-1}\) 都必须存在且可计算
  2. Jacobian 行列式必须可计算:通用方阵的行列式计算是 \(O(n^3)\) 的,因此需要特殊设计

架构受限

为了同时满足可逆性和行列式可计算性,传统 Normalizing Flows 只能使用特殊结构(如仿射耦合层、自回归变换),这严重限制了模型的表达能力。相比之下,扩散模型和 Flow Matching 可以使用任意神经网络架构(如 U-Net、DiT)。


3. 前置知识:Continuous Normalizing Flows(Neural ODEs)

从离散到连续

传统 Normalizing Flows 通过有限步可逆变换组合来实现分布变换。一个自然的想法是:如果步数趋于无穷、每步的变化趋于无穷小,会发生什么?

答案是:离散的变换序列变成了一个常微分方程(ODE)

Neural ODE 的定义

Continuous Normalizing Flows(CNF),也称为 Neural ODEs(Chen et al., 2018),用一个向量场(速度场) \(v_\theta(x, t)\) 定义数据的连续变换:

\[ \frac{dx}{dt} = v_\theta(x, t), \quad t \in [0, 1] \]

其中:

  • \(x(0) = x_0 \sim p_0\):起始分布(通常是标准高斯噪声)
  • \(x(1) = x_1 \sim p_1\):目标分布(数据分布)
  • \(v_\theta(x, t)\):神经网络参数化的速度场,指示在时刻 \(t\)、位置 \(x\) 处粒子应该往哪个方向、以多大速度移动

直观理解:想象空间中有无数个粒子,从噪声分布的位置出发。速度场 \(v_\theta\) 就像一个"风场",在每个位置和时刻告诉粒子应该往哪走。所有粒子从 \(t=0\) 流到 \(t=1\),就从噪声分布变换到了数据分布。

t=0 (噪声)                                    t=1 (数据)
  .  .                                         .***.
 . .. .         v_θ(x,t) 速度场引导            *   *
  . .     ──────────────────────────→          *  *  *
 .  . .        ODE 积分                         *   *
  .  .                                          .***.

连续性方程

在 CNF 中,概率密度 \(p_t(x)\) 随时间的演化满足连续性方程(Continuity Equation)

\[ \frac{\partial p_t(x)}{\partial t} + \nabla \cdot (p_t(x) \, v_t(x)) = 0 \]

这是流体力学中质量守恒的体现:概率的"总量"在变换过程中保持不变(始终积分为 1),概率密度的变化完全由速度场的散度决定。

展开散度项:

\[ \frac{\partial p_t(x)}{\partial t} = -p_t(x) \, \nabla \cdot v_t(x) - v_t(x) \cdot \nabla p_t(x) \]

连续性方程的物理直觉

想象概率密度是一片"流体"。\(v_t(x)\) 是流速,\(\nabla \cdot v_t(x)\) 是散度。如果某个区域的速度场是"发散的"(散度 > 0),则流体从该区域流出,密度降低;如果是"汇聚的"(散度 < 0),则流体汇入该区域,密度升高。

对数密度的演化

对于 CNF,沿流线的对数密度变化可以用瞬时变量替换公式表达:

\[ \frac{d \log p_t(x(t))}{dt} = -\nabla \cdot v_\theta(x(t), t) = -\text{tr}\left(\frac{\partial v_\theta}{\partial x}\right) \]

这里 \(\text{tr}\left(\frac{\partial v_\theta}{\partial x}\right)\) 是速度场 Jacobian 的迹(trace),它替代了传统 Normalizing Flows 中完整的 Jacobian 行列式计算。

CNF 的训练困难

尽管 CNF 在理论上很优雅,但直接训练存在严重的计算问题:

  1. 前向传播需要 ODE 求解:为了得到 \(x(1)\),需要从 \(x(0)\) 数值积分整个 ODE
  2. 反向传播需要通过 ODE solver 传梯度:使用 adjoint method 计算梯度,需要再解一次 ODE
  3. 训练代价极高:每一步训练都涉及多次 ODE 求解,且步长需要自适应调整

这些问题使得传统 CNF 在大规模数据集上几乎不可行。Flow Matching 正是为了解决这个训练困难而提出的。


4. Flow Matching 核心方法

目标:学习边际速度场

我们的最终目标是学习一个速度场 \(v_\theta(x, t)\),使得由它定义的 ODE 能够将噪声分布 \(p_0\) 变换为数据分布 \(p_1\)

理想情况下,我们希望最小化Flow Matching(FM)目标

\[ \mathcal{L}_{FM} = \mathbb{E}_{t \sim \mathcal{U}[0,1], \, x \sim p_t(x)} \| v_\theta(x, t) - u_t(x) \|^2 \]

其中 \(u_t(x)\) 是能够生成概率路径 \(p_t(x)\) 的真实速度场。

问题\(u_t(x)\)\(p_t(x)\) 都是未知的。我们不知道将噪声变换到数据的"真实"速度场长什么样。

关键洞察:条件 Flow Matching

Lipman et al. 的核心贡献在于证明了:我们不需要知道边际速度场 \(u_t(x)\),只需要拟合条件速度场 \(u_t(x | x_1)\) 即可。

定义条件概率路径 \(p_t(x | x_1)\):给定一个数据点 \(x_1\),从噪声到这个特定数据点的概率路径。

定义条件速度场 \(u_t(x | x_1)\):生成条件概率路径 \(p_t(x | x_1)\) 的速度场。

Conditional Flow Matching(CFM)目标

\[ \mathcal{L}_{CFM} = \mathbb{E}_{t \sim \mathcal{U}[0,1], \, x_1 \sim q(x_1), \, x \sim p_t(x|x_1)} \| v_\theta(x, t) - u_t(x | x_1) \|^2 \]

CFM 与 FM 的等价性

Lipman et al. 证明了一个关键定理:\(\mathcal{L}_{CFM}\)\(\mathcal{L}_{FM}\) 在梯度上是等价的,即 \(\nabla_\theta \mathcal{L}_{CFM} = \nabla_\theta \mathcal{L}_{FM}\)。这意味着通过最小化 CFM 目标训练得到的速度场,和直接最小化 FM 目标得到的结果是一样的。这个结论解放了我们:只需要设计简单的条件路径和条件速度场即可。

Optimal Transport 路径:最简单的选择

条件概率路径和条件速度场有无数种选择。最简单、最自然的选择是Optimal Transport(OT)路径,也称为线性插值路径

条件概率路径(高斯形式):

\[ p_t(x | x_1) = \mathcal{N}(x \,;\, t \cdot x_1, \, (1 - (1 - \sigma_{\min})t)^2 I) \]

其中 \(\sigma_{\min}\) 是一个很小的正数(接近 0),控制终点处的方差。

\(\sigma_{\min} \to 0\) 时,简化为:

  • \(t = 0\)\(p_0(x | x_1) = \mathcal{N}(x; 0, I)\),即标准高斯噪声
  • \(t = 1\)\(p_1(x | x_1) = \mathcal{N}(x; x_1, \sigma_{\min}^2 I) \approx \delta(x - x_1)\),几乎集中在数据点 \(x_1\)

条件速度场(OT 路径):

\[ u_t(x | x_1) = \frac{x_1 - (1 - \sigma_{\min}) x}{1 - (1 - \sigma_{\min}) t} \]

极简形式:线性插值

\(\sigma_{\min} \to 0\) 时,一切变得极其简洁。

插值公式:给定噪声 \(x_0 \sim \mathcal{N}(0, I)\) 和数据 \(x_1 \sim q(x_1)\),在时刻 \(t\) 的插值为:

\[ x_t = (1 - t) \, x_0 + t \, x_1 \]
t=0        t=0.25       t=0.5        t=0.75       t=1
噪声 x₀ ─────→──────→──────→──────→ 数据 x₁

x_t = (1-t)x₀ + tx₁,线性插值

速度:对 \(x_t\) 关于 \(t\) 求导,速度为常数:

\[ \frac{dx_t}{dt} = x_1 - x_0 \]

这就是条件速度场的目标值。速度就是终点减起点,沿直线以恒定速度前进。

训练目标

\[ \mathcal{L}_{CFM} = \mathbb{E}_{t, \, x_0, \, x_1} \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \]

与扩散模型预测噪声的联系

在扩散模型(DDPM)中,训练目标是预测加入的噪声 \(\epsilon\)\(\| \epsilon_\theta(x_t, t) - \epsilon \|^2\)。在 Flow Matching 中,训练目标是预测速度 \(v = x_1 - x_0\)。两者都是简单的回归目标,但 Flow Matching 的目标更加直观:速度就是"数据减去噪声",指向从噪声到数据的方向。


5. 训练与采样算法

训练算法

Flow Matching 的训练过程极其简洁:

算法: Flow Matching 训练
──────────────────────────────────
输入: 数据集 D, 网络 v_θ
重复:
    1. 从数据集采样 x₁ ~ q(x₁)
    2. 从标准高斯采样 x₀ ~ N(0, I)
    3. 从均匀分布采样 t ~ U[0, 1]
    4. 计算插值: x_t = (1-t) x₀ + t x₁
    5. 计算目标速度: u = x₁ - x₀
    6. 计算损失: L = || v_θ(x_t, t) - u ||²
    7. 反向传播,更新 θ
直到收敛

注意训练过程中完全不需要 ODE 求解器。与传统 CNF 相比,这是一个质的飞跃:

  • 传统 CNF:每步训练需要求解 ODE(前向 + 反向),计算代价极高
  • Flow Matching:每步训练只需要一次前向传播 + 反向传播,与训练普通回归网络无异

采样算法

训练完成后,采样需要从 \(t=0\)\(t=1\) 积分 ODE \(\frac{dx}{dt} = v_\theta(x, t)\)

Euler 方法采样(最简单):

算法: Flow Matching 采样(Euler 方法)
──────────────────────────────────
输入: 训练好的 v_θ, 步数 N
1. 采样 x₀ ~ N(0, I)
2. 设置步长 Δt = 1/N
3. for k = 0, 1, ..., N-1:
       t_k = k / N
       x_{k+1} = x_k + Δt · v_θ(x_k, t_k)
4. 返回 x_N 作为生成样本

高阶 ODE 求解器(更精确):

也可以使用更高阶的求解器,如 RK45(四阶五阶 Runge-Kutta)、Midpoint 方法等。高阶方法在相同步数下更精确,但每步需要多次函数评估(Network Function Evaluations, NFE)。

步数选择

由于 Flow Matching 学到的路径通常比较直(尤其是使用 OT 路径时),Euler 方法在较少步数(如 20-50 步)下就能获得不错的结果。这比扩散模型的典型采样步数要少得多。在 Rectified Flow 的进一步优化下,甚至可以减少到 1-4 步。


6. Flow Matching vs Diffusion 详细对比

框架对比

方面 Diffusion (DDPM/Score-based) Flow Matching
随机过程 SDE(随机微分方程) ODE(常微分方程)
训练目标 预测噪声 \(\epsilon\) 或 score \(\nabla_x \log p_t(x)\) 预测速度 \(v = x_1 - x_0\)
路径形状 弯曲路径(由 noise schedule 决定) 直线路径(OT 路径)
采样过程 反向 SDE/ODE 求解 前向 ODE 求解
设计选择 noise schedule、\(\beta_t\)、参数化方式等 几乎没有超参数
数学复杂度 高(SDE、Fokker-Planck、score matching) 低(ODE、线性插值、MSE 回归)
采样步数 通常 20-1000 步 通常 10-50 步

路径对比的直觉

Diffusion 路径(弯曲):              Flow Matching 路径(直线):

数据 x₁   .                          数据 x₁   .
          / \                                    |
         /   \                                   |
        |     |    曲线路径                       |    直线路径
        |     |    需要更多步                     |    步数更少
         \   /                                   |
          \ /                                    |
噪声 x₀   .                          噪声 x₀   .

弯曲路径意味着离散化误差更大,需要更多采样步骤来保持精度。直线路径的离散化误差最小,即便用粗糙的 Euler 步也能得到较好的结果。

数学等价性

值得指出的是,Diffusion 和 Flow Matching 在一定条件下是数学等价的。具体来说:

  • DDPM 的确定性采样器(DDIM)实际上在求解一个 probability flow ODE
  • 如果把 Diffusion 的 noise schedule 视为一种特殊的概率路径选择,它可以被纳入 Flow Matching 的通用框架

因此,Flow Matching 可以被视为 Diffusion 的一个更通用的框架,而不仅仅是一个替代品。Diffusion 的 SDE 路径是 Flow Matching 无数种可选路径中的一种特例(但不是最优的那种)。

为什么直线路径更好

OT 直线路径的优势可以从几个角度理解:

  1. 离散化误差最小:直线路径的曲率为零,Euler 积分在直线上是精确的(如果速度场完美学到)
  2. 学习难度更低:沿直线路径的速度是常数 \(x_1 - x_0\),不随时间变化。网络只需要学习"如何根据当前位置和时间推断终点方向"
  3. Optimal Transport 意义:直线路径对应二次 Wasserstein 距离下的最优传输方案,是将一个分布变换为另一个分布的"最经济"方式

7. 深入理解:为什么 CFM 与 FM 等价

这一节对 CFM 等价性定理做更详细的解释。

边际速度场的构造

给定条件速度场 \(u_t(x | x_1)\) 和条件概率路径 \(p_t(x | x_1)\)边际速度场可以通过对所有数据点求期望来构造:

\[ u_t(x) = \frac{\int u_t(x | x_1) \, p_t(x | x_1) \, q(x_1) \, dx_1}{p_t(x)} \]

其中边际概率密度为:

\[ p_t(x) = \int p_t(x | x_1) \, q(x_1) \, dx_1 \]

直觉上,边际速度场是所有条件速度场按概率加权平均的结果。在位置 \(x\)、时刻 \(t\),不同数据点 \(x_1\) 对速度场的贡献按 \(p_t(x | x_1) q(x_1)\) 加权。

梯度等价性证明思路

证明 \(\nabla_\theta \mathcal{L}_{CFM} = \nabla_\theta \mathcal{L}_{FM}\) 的关键步骤如下:

  1. \(\mathcal{L}_{FM}\) 展开为 \(\| v_\theta - u_t \|^2\),其中 \(u_t\) 是边际速度场
  2. 注意到展开后与 \(\theta\) 相关的交叉项为 \(-2 \, \mathbb{E}[v_\theta(x,t) \cdot u_t(x)]\)
  3. 将边际速度场的定义代入,利用 \(p_t(x) = \int p_t(x|x_1)q(x_1)dx_1\) 交换积分顺序
  4. 最终得到与 \(\mathcal{L}_{CFM}\) 相同的梯度表达式

实际意义

这个等价性意味着:训练时我们只需要为每个数据点 \(x_1\) 构造简单的条件路径和条件速度(线性插值 + 常数速度),网络自然会学到正确的边际速度场。不同数据点的条件路径可能会交叉(因为从不同噪声到不同数据点的直线可能相交),但梯度平均后网络学到的边际速度场会正确地处理这些交叉。


8. Rectified Flow:进一步拉直路径

动机

虽然 Flow Matching 使用了直线条件路径,但由于边际速度场是所有条件速度场的加权平均,实际的边际流线仍然可能是弯曲的

考虑一个简单的例子:如果数据分布有两个模式(如两个高斯),从噪声到不同模式的直线路径会交叉。在交叉区域,速度场是两个不同方向的平均,导致实际流线弯曲绕行。

Reflow 操作

Rectified Flow(Liu et al., 2022)提出了一种迭代拉直流线的方法,称为 Reflow

  1. Step 1:用标准 Flow Matching 训练一个速度场 \(v_\theta^{(1)}\)
  2. Step 2:用 \(v_\theta^{(1)}\) 生成配对数据。从 \(x_0 \sim p_0\) 出发,通过 ODE 积分得到 \(\hat{x}_1 = \text{ODESolve}(x_0, v_\theta^{(1)})\)
  3. Step 3:用新的配对 \((x_0, \hat{x}_1)\) 重新训练 Flow Matching,得到 \(v_\theta^{(2)}\)
  4. 重复:可以继续迭代 reflow
第1轮训练:随机配对 (x₀, x₁)
       路径有交叉,边际流线弯曲

               ×  ←  路径交叉
             /   \
  x₀ₐ ────/──────→ x₁ₐ
  x₀ᵦ ──/────────→ x₁ᵦ


Reflow 后:配对变为 (x₀, ODESolve(x₀))
       路径更少交叉,流线更直

  x₀ₐ ──────────→ x₁ₐ
  x₀ᵦ ──────────→ x₁ᵦ

直线路径的终极目标

经过 reflow 迭代,流线越来越直。当流线完全是直线时,一步 Euler 积分就能精确采样

\[ x_1 = x_0 + 1 \cdot v_\theta(x_0, 0) = x_0 + v_\theta(x_0, 0) \]

这意味着采样退化为一次前向传播,与 GAN 的采样速度相当。

Reflow 与蒸馏

Reflow 可以与知识蒸馏结合。先通过 reflow 拉直路径,再通过渐进蒸馏(progressive distillation)将多步采样压缩为 1-2 步。InstaFlow(2023)就是这种方法的一个成功案例,实现了高质量的单步图像生成。


9. 与 Score Matching 的联系

Flow Matching 和 Score-based Diffusion Models(score matching)之间存在紧密的数学联系。

Score 与速度的关系

在 Diffusion 框架中,score function 定义为:

\[ s_t(x) = \nabla_x \log p_t(x) \]

在 Flow Matching 框架中,速度场和 score 之间的关系为:

\[ v_t(x) = \dot{\mu}_t + \dot{\sigma}_t \sigma_t \, s_t(x) \]

其中 \(\mu_t\)\(\sigma_t\) 分别是条件分布的均值和标准差随时间的演化。

对于 OT 路径(\(\mu_t = t x_1\), \(\sigma_t = 1-t\)):

\[ v_t(x) = x_1 + (-(1-t)) \cdot s_t(x) \cdot (1-t)^{-1} = x_1 - \frac{x - tx_1}{1-t} \]

预测目标的统一

不同的参数化方式实际上在预测不同但等价的量:

参数化 预测目标 关系
\(\epsilon\)-prediction 噪声 \(\epsilon = x_0\) DDPM 标准
\(v\)-prediction 速度 \(v = x_1 - x_0\) Flow Matching 标准
\(x\)-prediction 数据 \(x_1\) 直接预测去噪结果
score prediction \(\nabla_x \log p_t\) Score-based 标准

在 OT 路径下,这些预测目标之间可以互相转换:

\[ v = x_1 - x_0, \quad x_1 = x_t + (1-t) v, \quad x_0 = x_t - t \cdot v \]

10. 实际应用与影响

Stable Diffusion 3(SD3)

Stability AI 在 Stable Diffusion 3 中全面采用了 Flow Matching 训练范式,具体改进包括:

  • Rectified Flow 训练:使用 OT 路径的 Flow Matching 替代传统的 DDPM 训练
  • DiT 架构(MM-DiT):使用 Transformer 替代 U-Net,文本和图像 token 在同一序列中联合处理
  • 采样效率提升:相比 SD 1.5/2.x,SD3 在更少的采样步数下达到更好的图像质量

FLUX

Black Forest Labs(由 Stability AI 前核心成员创办)推出的 FLUX 模型系列进一步发展了 Flow Matching + DiT 的范式:

  • FLUX.1 [pro/dev/schnell]:不同配置满足不同需求
  • schnell 版本:通过蒸馏实现 1-4 步生成
  • 指导蒸馏(Guidance Distillation):将 classifier-free guidance 的多步过程蒸馏到更少步骤

视频生成

Flow Matching 在视频生成领域展现出巨大潜力:

  • 时空一致性:ODE 框架天然适合建模时序连续变化
  • 可控生成:速度场的可解释性使得条件控制更加直观
  • Meta Movie Gen、Sora 等模型都采用了 Flow Matching 或类似的连续流框架

其他应用领域

  • 音频生成:Voicebox(Meta)使用 Flow Matching 进行语音合成
  • 蛋白质设计:FrameFlow 等方法将 Flow Matching 应用于蛋白质结构生成
  • 3D 生成:Flow Matching 在点云生成、NeRF 优化等 3D 任务中的应用
  • 科学计算:分子动力学模拟、气象预测等领域

11. 代码直觉:最小化 Flow Matching 实现

以下伪代码展示 Flow Matching 的核心实现,帮助理解其简洁性:

# ========== 训练 ==========
def train_step(model, x1, optimizer):
    """
    model: 速度场网络 v_θ(x, t)
    x1: 一个 batch 的真实数据, shape [B, D]
    """
    # 1. 采样噪声和时间
    x0 = torch.randn_like(x1)           # 标准高斯噪声
    t = torch.rand(x1.shape[0], 1)      # 均匀采样 t ~ U[0,1]

    # 2. 线性插值得到 x_t
    xt = (1 - t) * x0 + t * x1

    # 3. 目标速度 = 终点 - 起点
    target = x1 - x0

    # 4. 网络预测速度
    pred = model(xt, t)

    # 5. MSE 损失
    loss = ((pred - target) ** 2).mean()

    # 6. 反向传播更新
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    return loss


# ========== 采样 ==========
def sample(model, shape, num_steps=50):
    """
    从噪声采样,通过 Euler 积分生成数据
    """
    x = torch.randn(shape)              # x_0 ~ N(0, I)
    dt = 1.0 / num_steps

    for i in range(num_steps):
        t = torch.full((shape[0], 1), i / num_steps)
        v = model(x, t)                  # 预测速度
        x = x + v * dt                   # Euler 步进

    return x                             # 近似 x_1(生成的数据)

这是简化版本

实际工程中还需要考虑:时间 \(t\) 的编码方式(sinusoidal embedding)、条件输入(文本 embedding、类别标签)、classifier-free guidance、EMA 模型等。但核心训练循环确实就是这么简单。


12. 思考与讨论

Flow Matching 会取代 Diffusion 吗?

从实践角度来看,Flow Matching 正在逐步成为主流。SD3、FLUX 等新一代模型已经全面转向 Flow Matching。但更准确的说法是:Flow Matching 是 Diffusion 的一个自然进化,而非完全替代。

两者的关系类似于:

  • Diffusion 提出了"逐步去噪"的核心范式
  • Flow Matching 找到了训练这个范式的更优方法
  • 底层的生成思想是一脉相承的

ODE vs SDE 的根本区别

  • ODE(确定性):给定初始点,轨迹是唯一确定的。同一个噪声永远生成同一个数据
  • SDE(随机性):轨迹包含随机性,同一个噪声可能生成不同的数据

SDE 的随机性有时是有用的(例如可以提升样本多样性),因此一些方法会在 Flow Matching 的 ODE 框架上加入少量随机噪声(stochastic sampling),兼取两者之长。

为什么更直的路径更好:总结

  1. 采样效率:直线路径使得粗糙的数值积分也能给出好结果
  2. 学习效率:恒定速度比随时间剧烈变化的速度更容易学习
  3. 理论最优:OT 路径在 Wasserstein 距离意义下是最优的传输方案
  4. 实用价值:路径越直,越容易通过蒸馏压缩到极少步采样

开放问题

  • 最优路径的选择:OT 直线路径是否真的是所有场景下的最优选择?对于复杂的多模态分布,弯曲路径是否有时更好?
  • 离散化误差的理论分析:在有限步采样下,Flow Matching 的误差界与步数的关系是什么?
  • 与一致性模型(Consistency Models)的关系:Consistency Models 直接学习 ODE 轨迹上任意两点之间的映射,是否比 Rectified Flow 更高效?
  • 高维空间中的 OT:在非常高维的数据空间中(如百万像素图像),线性 OT 路径是否仍然有效?条件 OT 与全局 OT 的差距有多大?

参考文献

  1. Lipman, Y., Chen, R. T., Ben-Hamu, H., Nickel, M., & Le, M. (2022). Flow Matching for Generative Modeling. ICLR 2023.
  2. Liu, X., Gong, C., & Liu, Q. (2022). Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. ICLR 2023.
  3. Chen, R. T., Rubanova, Y., Bettencourt, J., & Duvenaud, D. (2018). Neural Ordinary Differential Equations. NeurIPS 2018.
  4. Albergo, M. S., & Vanden-Eijnden, E. (2022). Building Normalizing Flows with Stochastic Interpolants. ICLR 2023.
  5. Esser, P., Kulal, S., Blattmann, A., et al. (2024). Scaling Rectified Flow Transformers for High-Resolution Image Synthesis. (Stable Diffusion 3 技术报告)
  6. Tong, A., Malkin, N., Huguet, G., et al. (2023). Improving and Generalizing Flow-Based Generative Models with Minibatch Optimal Transport. TMLR 2024.

评论 #