#为什么 Diffusion 先流行,而 Flow Matching 到最近才大量使用?
#0. 一句话核心结论
Flow Matching 在今天看起来更直观,但它需要“连续动力系统 / ODE / optimal transport / vector field regression”这套视角成熟之后才显得自然;而 Diffusion 是从 score matching、去噪自编码、随机过程和稳定训练一步步演化来的,在 2020 年前后更容易被深度学习社区理解、实现和规模化。
再压缩一点:
Diffusion 先火,不是因为它本质上更简单,而是因为它有更清晰的概率建模起点、更稳定的训练目标、更成熟的采样解释和更强的早期经验验证;Flow Matching 后来火,是因为大家逐渐意识到 Diffusion 的很多东西可以统一成“学一条从噪声到数据的流”,而且 rectified flow / flow matching 在少步采样、路径设计和工程实现上更直接。
#1. 先说直觉:Diffusion 和 Flow Matching 到底差在哪?
#1.1 Diffusion 的故事
Diffusion 的故事是:
真实数据 x0
逐渐加噪
x0 → x1 → x2 → ... → xT ≈ Gaussian noise
训练模型学会反过来:
noise → data
它的核心训练目标通常是预测:
噪声 ε
score ∇x log p_t(x)
或者干净数据 x0
所以 Diffusion 的直觉是:
我先定义一个简单可靠的破坏过程,再学怎么修复。
这非常符合早期深度学习里的 denoising autoencoder 传统。
#1.2 Flow Matching 的故事
Flow Matching 的故事是:
给定噪声分布 p0 和数据分布 p1
我想学一个速度场 vθ(x,t)
让样本沿着 ODE 从噪声流到数据:
dx/dt = vθ(x,t)
训练时直接监督速度场:
vθ(x_t,t) ≈ u_t(x_t | x0, x1)
直观上就是:
我直接学“每个时刻应该往哪里走”,把噪声搬运成数据。
这个确实非常直观,尤其是站在今天看。
#2. 为什么最开始大家更容易接受 Diffusion?
#2.1 Diffusion 有更自然的概率建模来源
Diffusion 不是突然冒出来的,它接了几条成熟线:
非平衡热力学
score matching
denoising score matching
Langevin dynamics
variational inference
denoising autoencoder
早期关键脉络大概是:
Sohl-Dickstein et al. 2015: Deep Unsupervised Learning using Nonequilibrium Thermodynamics
Song & Ermon 2019: Score-Based Generative Modeling
Ho et al. 2020: DDPM
Song et al. 2021: Score-Based Generative Modeling through SDEs
这套故事对生成建模社区很有说服力:
- 正向过程是已知的;
- 反向过程有概率解释;
- loss 可以从变分下界 / score matching 推出来;
- 采样过程有随机微分方程解释;
- 训练目标很稳定。
所以 diffusion 一开始不是“工程 trick”,而是一套完整的概率生成框架。
#2.2 Diffusion 的训练目标非常稳定
DDPM 之所以爆发,一个重要原因是它的训练目标极其简单:
随机采样 x0
随机采样 t
加噪得到 xt
训练模型预测噪声 ε
MSE loss
也就是:
L = || ε - εθ(xt, t) ||²
这个东西非常好训。
相比 GAN:
- 不需要判别器;
- 不容易 mode collapse;
- loss 稳;
- scaling 比较友好。
在 2020 年左右,大家最缺的就是一种能稳定训练高质量图像生成模型的方法。DDPM 正好解决了 GAN 的痛点。
Flow Matching 虽然今天看也很简单,但当时大家还没有形成“直接回归 velocity field 就能训大生成模型”的共识。
#2.3 Diffusion 和 denoising 直觉更贴近深度学习经验
早期深度学习社区对这个流程很熟:
输入被破坏的数据
模型恢复干净数据
比如:
- denoising autoencoder;
- image restoration;
- super-resolution;
- inpainting;
- noise2noise。
所以 DDPM 说“我不断加噪,然后学去噪”,大家很容易接受。
而 Flow Matching 的说法是:
学一个时间依赖向量场
解一个 ODE 把分布推过去
这在数学上优雅,但在当时对图像生成主流社区来说没那么直观。
也就是说:
对现在的我们,Flow Matching 更直观;对 2020 年的生成模型社区,denoising 更直观。
#3. Flow Matching 为什么没有更早成为主流?
其实 Flow Matching 背后的思想并不晚。
相关脉络包括:
Normalizing Flows
Continuous Normalizing Flows
Neural ODE
Optimal Transport
Schrödinger Bridge
Probability Flow ODE
Rectified Flow
Flow Matching
但它没有一开始成为主流,有几个原因。
#3.1 Normalizing Flow 早期被“精确似然”和可逆结构绑住了
早期大家说 flow,通常指 normalizing flow:
z → x
可逆变换
需要计算 Jacobian determinant
最大似然训练
这带来一些限制:
- 网络结构必须可逆;
- Jacobian 计算要高效;
- 架构设计很受约束;
- 图像质量长期不如 GAN/diffusion;
- 高维图像建模比较吃力。
所以很多人对 flow 的印象是:
理论漂亮,似然好算,但样本质量一般,架构麻烦。
Flow Matching 后来的突破之一,就是它不要求显式可逆网络和 tractable Jacobian,而是学一个速度场。这个观念转变需要时间。
#3.2 Continuous Normalizing Flow / Neural ODE 采样和训练成本不友好
CNF / Neural ODE 的思路是:
dx/dt = vθ(x,t)
这和 Flow Matching 形式很接近。
但早期 CNF 通常关注 maximum likelihood,需要估计 divergence / trace,训练和采样都比较复杂。
典型问题:
- ODE solver 成本高;
- adjoint training 不稳定;
- likelihood 目标需要 trace estimator;
- 图像生成质量不够亮眼;
- 生态不如 DDPM 简单。
所以虽然“连续流”这个想法早就有,但它没有像 DDPM 那样一下变成大规模生成模型的默认路线。
#3.3 Flow Matching 需要先解决“训练 target 怎么定义”的问题
你说 Flow Matching 直观,是因为今天我们已经知道可以这样做:
采样噪声 x0
采样数据 x1
定义中间点 xt = (1-t)x0 + t x1
目标速度 u = x1 - x0
训练 vθ(xt,t) 去拟合 u
但这个看似简单的目标,背后有问题:
- 噪声样本和数据样本怎么配对?
- 路径怎么选?
- 直线路径是不是合理?
- 学 conditional vector field 后,marginal vector field 是否正确?
- 采样 ODE 是否稳定?
- 少步采样质量如何?
- 和 diffusion/score matching 的关系是什么?
这些问题需要理论整理。
Flow Matching、Conditional Flow Matching、Rectified Flow 等工作把这些问题系统化之后,社区才开始相信它不仅是直觉,而且是可训、可扩展、可解释的生成建模框架。
#4. Diffusion 其实已经暗含了 Flow 的视角
一个关键点是:
Diffusion 和 Flow Matching 不是完全割裂的两类东西。Diffusion 后来被 SDE/ODE 统一之后,本来就已经包含 probability flow ODE 的视角。
Song 等人的 score-based SDE 框架里有两条采样路径:
Reverse-time SDE:随机采样
Probability flow ODE:确定性采样
也就是说,扩散模型不仅可以看成随机去噪过程,也可以看成一个确定性流:
noise → data
后来 DDIM 也把 DDPM 的采样变成更确定性的非马尔可夫过程。
所以从历史上看,是这样的:
DDPM / score model 先证明:去噪生成可以稳定训练和高质量生成
SDE / DDIM 发现:它也可以被看成 ODE / flow
Rectified Flow / Flow Matching 进一步说:那我们何不直接学这个流?
所以 Flow Matching 不是凭空替代 Diffusion,而是 diffusion 成功之后,大家重新抽象出更简洁的范式。
#5. 为什么最近 Flow Matching 开始大量使用?
主要有五个原因。
#5.1 少步采样需求变强了
Diffusion 的一个大痛点是:
采样步数多
推理慢
早期 DDPM 可能需要几百到上千步。后来虽然有 DDIM、DPM-Solver、consistency model、distillation 等加速,但核心问题一直在。
Flow Matching / Rectified Flow 的目标更自然地适配:
学一条更直、更短、更容易积分的路径
如果路径更直,采样可以更少步。
这对图像、视频、语音、多模态生成尤其重要,因为推理成本很高。
#5.2 工程上 velocity prediction 很自然
现在很多 diffusion 模型已经从预测噪声 ε 转向预测 velocity v。
例如 Stable Diffusion 里的 v-prediction,本质上已经让模型学某种时间相关方向场。
当社区习惯了:
模型输入 xt, t
输出一个 direction / velocity / denoising vector
Flow Matching 的训练形式就不陌生了。
也就是说,Diffusion 的工程实践已经把大家带到了 Flow Matching 门口。
#5.3 Rectified Flow 把路径“拉直”的想法很有吸引力
Rectified Flow 的核心直觉非常简单:
把噪声和数据之间的运输路径变直
越直,ODE 越容易解
采样步数越少
这比传统 diffusion 那种复杂噪声 schedule 更容易解释和调参。
早期 diffusion 的路径是围绕加噪/去噪设计的,不一定是最短、最直、最适合少步采样的路径。
Flow Matching 让大家直接思考:
我到底想让样本沿什么路径从 noise 到 data?
这给了更大的设计空间。
#5.4 大模型时代更关注统一框架和可扩展性
当生成模型进入大规模图像、视频、3D、多模态后,大家希望有一个更统一的训练目标:
文本到图像
文本到视频
图像到图像
语音生成
动作生成
3D 生成
多模态 token / latent 生成
Flow Matching 的表述很统一:
定义源分布 p0
定义目标分布 p1
定义路径 pt
学习速度场 vt
积分得到样本
它不强依赖“加高斯噪声再去噪”的叙事,对任意两个分布之间的运输更自然。
#5.5 理论上开始统一 diffusion、CNF、OT、Schrödinger Bridge
最近几年大家对生成模型的理解更成熟了:
- diffusion 可以看成 SDE;
- SDE 有 probability flow ODE;
- flow matching 可以学 ODE vector field;
- optimal transport 可以提供更直的路径;
- Schrödinger Bridge 可以连接 entropy-regularized OT 和 diffusion;
- consistency model / rectified flow / distillation 都在追求少步生成。
所以 Flow Matching 火起来,是因为社区的共同语言变了:
从“去噪”
转向“分布之间的动力学运输”
在这个语言里,Flow Matching 显得更自然。
#6. 为什么不是一开始就“直接学 x1 - x0”?
这个问题特别关键。
你可能会说:
采一个噪声 z
采一个数据 x
中间点 xt = (1-t)z + tx
速度就是 x-z
训练模型预测这个速度
不就完了吗?
看起来确实很简单。
但这里有一个隐藏问题:
随机配对的 z 和 x 定义的是 conditional path;模型真正要学的是 marginal vector field。
也就是说,对于同一个中间点 xt,它可能来自很多不同的 (z, x) 配对。训练时的 target x-z 是条件速度,但模型看到的是 xt,t,它要学的是条件速度的平均:
v*(xt,t) = E[x - z | xt]
这个东西是否能把整体分布正确推过去,不是肉眼直觉就能保证的,需要理论说明。
另外,如果随机配对导致路径大量交叉,速度场会变复杂,少步采样可能不稳定。
所以后来大家会研究:
- conditional flow matching;
- optimal transport coupling;
- rectified flow reflow;
- stochastic interpolants;
- minibatch OT;
- path design;
- noise schedule / time schedule。
这些理论和工程细节成熟之后,Flow Matching 才真正可用。
#7. Diffusion 和 Flow Matching 的关系
可以用一个表格:
| 维度 | Diffusion | Flow Matching |
|---|---|---|
| 核心故事 | 加噪再去噪 | 噪声流向数据 |
| 数学对象 | score / noise / reverse SDE | vector field / ODE |
| 训练目标 | denoising score matching / noise prediction | velocity regression |
| 采样 | 多步 reverse diffusion / SDE / ODE | 解 ODE |
| 优势 | 稳定、成熟、经验充分 | 直观、统一、路径设计灵活、少步潜力大 |
| 早期门槛 | 概率推导稍复杂,但目标简单 | 概念直观,但理论/路径设计/ODE 生态较晚成熟 |
| 主要痛点 | 采样慢、schedule 复杂 | 路径/coupling 选择、ODE solver、少步质量和稳定性 |
#8. 从研究史看,为什么 Diffusion 先赢?
我觉得可以总结成五句话。
#8.1 Diffusion 先解决了 GAN 的痛点
它证明了:
不用对抗训练,也能稳定生成高质量图像
这是当时社区最需要的。
#8.2 DDPM 的 loss 太好用了
一个 MSE 预测噪声的目标,简单、稳定、可 scale。
#8.3 Diffusion 有强概率建模合法性
score matching、SDE、变分下界给了它可信理论基础。
#8.4 Flow 的早期形态被 normalizing flow / CNF 限制了想象
大家一听 flow,就想到可逆网络、Jacobian、ODE solver、likelihood,觉得麻烦。
#8.5 Flow Matching 的简洁形式需要 diffusion 成功之后才被重新发现
社区先通过 diffusion 学会:
多时间噪声层
时间条件网络
denoising vector
ODE/SDE 采样
少步 solver
然后才发现:
其实可以直接学分布运输的速度场
#9. 为什么今天 Flow Matching 显得“本来就应该这样”?
这是很典型的 hindsight bias。
一个理论在成熟之后,会显得非常自然。但在它成熟之前,有很多问题没有被清楚表达。
今天我们觉得 Flow Matching 直观,是因为我们已经有了:
diffusion 的成功经验
score/SDE/ODE 统一框架
DDIM / probability flow ODE
v-prediction 工程经验
rectified flow 理论
OT / Schrödinger bridge 连接
高质量 ODE solver
大规模生成模型训练经验
有了这些之后,“直接学 flow”才变得像是显然的答案。
但在 2019/2020 年,最显然的答案反而是:
用 denoising score matching 训练一个稳定生成模型
#10. 一个更本质的理解:Diffusion 是“局部修复”,Flow Matching 是“全局运输”
可以这样抽象。
#10.1 Diffusion:局部修复
Diffusion 更像:
我把数据逐步破坏成噪声
然后学每个噪声水平下如何局部修复
它强调的是局部 score:
在当前 noisy distribution 下,往高密度数据方向走
#10.2 Flow Matching:全局运输
Flow Matching 更像:
我直接定义一个从源分布到目标分布的全局运输路径
然后学沿路径移动的速度场
它强调的是分布之间的 transport。
所以 Diffusion 更适合从 denoising 和概率建模入手;Flow Matching 更适合从 transportation 和 dynamics 入手。
从历史上看,深度生成模型社区先走的是 denoising/probabilistic route,后来才转向 transport/dynamics route。
#11. 对未来的判断
我不认为 Flow Matching 会简单“取代” Diffusion,而是两者会逐渐统一。
未来大家可能不再纠结名字,而是统一看成:
选择一族中间分布 p_t
选择路径 / 噪声 schedule / coupling
训练模型预测 score 或 velocity
用 SDE / ODE / solver 从 base distribution 生成数据
Diffusion 是其中一种路径设计,Flow Matching 是更一般的速度场学习方式。
真正重要的问题会变成:
- 什么路径最适合少步采样?
- 什么 coupling 能让速度场最简单?
- 如何在高维 latent space 中设计最优 transport?
- 如何把 text condition、video temporal consistency、3D / robot action 等结构融入流?
- 如何把 flow matching 和 consistency / distillation / RL feedback 结合?
- 如何从“生成图像”扩展到“生成长程行为轨迹”?
最后这个和 Agent / world model 也有关:如果把 agent trajectory 看成一种高维序列分布,那么未来也可能不是简单 autoregressive,而是学一种从噪声到轨迹的 flow。
#12. 最终回答
所以,为什么大家最开始都用 Diffusion,而不用 Flow Matching?
不是因为 Flow Matching 不直观,而是因为它作为可规模化生成模型框架所需的理论、训练目标、路径设计和工程共识成熟得更晚。
Diffusion 先火,是因为它:
继承了 denoising / score matching 传统
训练目标简单稳定
概率解释强
解决了 GAN 的训练不稳定
很早在图像质量上给出压倒性结果
Flow Matching 后火,是因为:
diffusion 成功后,社区逐渐用 SDE/ODE/transport 统一理解生成过程
少步采样需求变强
v-prediction 和 probability flow ODE 已经铺路
rectified flow / conditional flow matching 把理论和训练目标讲清楚
大规模生成模型需要更直、更统一、更可控的路径
一句话概括:
Diffusion 是生成模型社区从“去噪”和“概率建模”走出来的自然答案;Flow Matching 是社区在 Diffusion 成功之后,从“分布运输”和“连续动力系统”重新抽象出来的更一般答案。它不是一开始没人想到,而是到了最近,理论、工程和需求终于同时成熟了。