⏱ ~32 min

概念辨析 · Diffusion、Flow MatchingScore Matching 的数学统一

这是当前机器人学(Diffusion Policy、π0、动作生成)的核心数学。必须理清三者的关系——它们不是三个方法,而是同一思想的三个视角。

💡 一句话总结:Diffusion / Flow Matching / Consistency Model 本质都是"学一个生成动作分布的连续时间 ODE/SDE",差别只在路径形状——Diffusion 是预设曲线(50+ 步去噪)、Flow Matching 是直线(10 步 ODE)、Consistency 是蒸馏近似(1-4 步);π0 选 flow 的根本数学原因是直线路径让 Euler 法 10 步就收敛。

Diffusion / Flow Matching / Consistency 统一视角图:中心连续时间 ODE/SDE → 三条路径(弯曲线 50+ 步 / 直线 10 步 / 蒸馏跳步 1-4 步)+ 底部 π0 选 flow matching 原因

速查:何时用哪个
| 场景 | 推荐 | 原因 |
|------|------|------|
| 真机高频控制(30Hz+) | Flow Matching(π0) | 直线路径 10 步推理足够快 |
| 离线训练多模态动作、延迟不敏感 | Diffusion Policy(DDPM) | 50 步去噪,最成熟稳定 |
| 已有 Diffusion Policy 想压缩推理 | Consistency Model 蒸馏 | 1-4 步,机器人动作上质量损失很小 |
| 跨本体统一 action 空间 | Flow Matching + padding(π0) | 18 维 padding 让一个模型跨本体 |

本页内容

基础解释

一句话直觉

先把动作搅成一团雪花噪点,再学着把它慢慢收回成动作。像把浑水静置成清水。

是什么·为什么

这类方法都是"从噪点还原动作"的生成模型。给一团随机噪点,让网络一步步把它"雕"成合理动作。

为什么重要:同一状态可能有多种合理动作(拧扳手左转右转都对)。老办法用均方误差把多模态平均成无效动作。这类方法能学整个动作分布,是现代机器人灵巧操作的基石。

核心一句话:把"生成动作"看成一条从噪点到目标的路径。学一个网络当向导,告诉你每一步往哪走。

三种向导的差别

第一种叫扩散。它走的是一条弯弯的预设曲线。每一步加一点噪点、或去掉一点噪点。要走几十到几百步才到。慢,但稳。

第二种叫流匹配。它把路径拉成直线。向导告诉你"直接朝目标走"。十步就够。π0 选这条。快很多。

第三种叫一致性。它把整条路径蒸馏成一步。一次推理直接从噪点跳到目标。最快,但有精度损失。

它们不是三个方法,是同一思想的三个版本。差别只在"路径弯不弯、步数多不多"。

为什么机器人特别关心:动作要多模态;推理延迟直接决定控制频率;还要一次生成未来几十步的动作块。流匹配在这三件事上目前最平衡。

一句话类比:扩散之于流匹配,像乡间小路之于高速——都能到,直线高速更快;一致性像传送门,一步到但有概率送错地方。

为什么机器人学要懂这些

2023 年后,机器人动作生成几乎被三类方法主导:

  • Diffusion Policy(用 DDPM/Score-SDE 学动作分布)
  • Flow Matching(π0 用,更快)
  • Consistency Model(Consistency Policy 用,1-4 步推理)

这三者本质都是「学一个生成动作分布的模型」,但数学形式不同。理解它们的统一框架,才能看懂为什么 π0 用 flow 而不用 diffusion、为什么 consistency 能加速。

一个统一视角:连续时间的生成

所有这些方法的本质:把「从噪声生成动作」看作一个连续时间的随机过程

给定数据分布 $p_{\text{data}}(a)$(人类演示的动作分布),定义一个从 $t=0$(纯噪声)到 $t=1$(数据)的过程 $a_t$。学一个网络 $v_\theta(a_t, t)$ 来「引导」这个过程。

三者的区别只在「过程怎么定义、网络学什么」:

Diffusion(DDPM / Score-SDE)

前向过程(加噪)

定义一个固定的马尔可夫加噪过程

$$a_t = \sqrt{\bar\alpha_t}\, a_0 + \sqrt{1-\bar\alpha_t}\, \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)$$

其中 $\bar\alpha_t$ 是预设的 noise schedule。$t=0$ 是数据,$t=T$ 接近纯噪声。

反向过程(去噪 = 生成)

学一个网络 $\epsilon_\theta(a_t, t)$ 预测「加的噪声是什么」。反向一步步去噪:

$$a_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(a_t - \frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}} \epsilon_\theta(a_t, t)\right) + \sigma_t z$$

等价的 score 视角

$\epsilon_\theta$ 和 score function $\nabla_{a_t} \log p_t(a_t)$ 的关系:$\nabla \log p_t \approx -\epsilon_\theta / \sqrt{1-\bar\alpha_t}$。所以 diffusion 是在学数据分布的 score。Score-SDE(Song 2021)把这个等价性推广到连续时间,给出 DDPM 反向过程对应的概率流 ODE——这就是「diffusion 也是 flow」的桥梁。

参数化:ε-prediction vs x0-prediction

DDPM 默认让网络预测噪声 $\epsilon_\theta$。等价的做法是直接预测干净动作 $\hat a_0$(loss $\|a_0 - \hat a_0\|^2$),两者可互相换算。动作生成里 $\hat a_0$ 预测更常见——$\hat a_0$ 有物理意义,能往上加 geometric loss(关节位置、足触地、速度平滑),MDM 因此选 $\hat a_0$;Diffusion Policy 走主流 $\epsilon_\theta$。

条件化:classifier-free guidance(CFG)

条件生成时,训练按一定概率(典型 10%)把条件 $c$(观测/语言)置空,让同一网络同时学 $\epsilon_\theta(a_t, t, c)$ 和 $\epsilon_\theta(a_t, t, \varnothing)$。推理时外推:

$$\tilde\epsilon = (1+w)\,\epsilon_\theta(a_t, t, c) - w\,\epsilon_\theta(a_t, t, \varnothing)$$

$w$ 是 guidance scale(MDM 实测 $w \approx 2.5$ 是 diversity-fidelity sweet spot)。机器人操作里观测永远在场,CFG 不如文生图关键;但 text-to-motion / music-to-dance 几乎必备。

为什么慢

反向过程要 T 步(DDPM 原始 1000 步),每步一次网络推理。DDIM(Song 2020)把反向过程改成确定性 ODE,步数可大幅下调而不崩——Diffusion Policy 训练用 100 步、真机推理用 DDIM 减到 16 步(NVIDIA 3080 上 ~0.1s)。即便如此,仍比 flow matching 的 10 步多。

Flow Matching(π0 用)

核心改变:路径可以是直的

Diffusion 的前向路径是预设的曲线(加噪 schedule)。Flow Matching 允许任意路径,最简单的是直线

$$a_t = (1-t)\, a_0 + t\, a_1, \quad a_0 \sim \mathcal{N}(0,I),\ a_1 \sim p_{\text{data}}$$

(注意:π0 的符号约定是 $t=0$ 噪声、$t=1$ 数据,和 DDPM 相反。)

学的是「速度场」

直线路径的「速度」(时间导数)是常数:$u_t = a_1 - a_0$。学一个网络 $v_\theta(a_t, t)$ 回归这个速度:

$$\mathcal{L}_{\text{FM}} = \mathbb{E}_{t, a_0, a_1}\left[\|v_\theta(a_t, t) - (a_1 - a_0)\|^2\right]$$

生成 = 解 ODE

从 $a_0 \sim \mathcal{N}(0,I)$ 出发,解 ODE $\frac{da_t}{dt} = v_\theta(a_t, t)$ 到 $t=1$。用 Euler 法 N 步:

$$a_{t+\delta} = a_t + \delta \cdot v_\theta(a_t, t)$$

为什么快

路径是直线 → ODE 解析性好 → 10 步就够(π0 用 10 步)。Diffusion 的曲线路径需要 50+ 步。

π0 的关键 trick(不是标准 flow matching)

π0 不从纯噪声出发,而是条件 flow matching——给定观测 $o_t$,学 $v_\theta(a_t, t, o_t)$。这把生成变成「观测条件下的动作分布生成」。还用 Beta 分布采 $t$(偏向高噪声),见 P-pi0-2024.md

Score Matching(Diffusion 的另一面)

Score Matching 是 Song & Ermon 的工作,直接学 $\nabla_a \log p(a)$(分布的梯度)。它和 DDPM 的关系:

视角学什么公式
DDPM噪声 $\epsilon_\theta$$\mathcal{L} = \\epsilon - \epsilon_\theta(a_t,t)\^2$
Score梯度 $s_\theta$$\mathcal{L} = \s_\theta(a_t,t) - \nabla\log p_t(a_t)\^2$

两者数学等价(差一个缩放)。Score-SDE 框架(Song 2021)把它们统一了。

Consistency Model(加速)

Consistency Model(Song 2023)学一个函数 $f_\theta(a_t, t)$ 满足一致性:沿 ODE 轨迹的任意点都映射到同一个终点。这样推理时一步就能生成

$$a_1 \approx f_\theta(a_0, 0)$$

Consistency Policy(机器人上)就是先用 Diffusion Policy 训,再蒸馏成 Consistency Model,推理从 16-100 步压到 1-4 步。

三者关系(一张表)

方法学什么路径推理步数代表
DDPM/Diffusion噪声 $\epsilon_\theta$ 或 score预设曲线50-1000Diffusion Policy、MDM、RDT-1B
Flow Matching速度场 $v_\theta$直线(可自定义)5-20π0、FlowPolicy
Consistency一致性函数 $f_\theta$蒸馏自上面1-4Consistency Policy

统一视角:都是「学一个生成 ODE/SDE」,区别在路径形状和网络参数化。Flow Matching 是目前机器人上最快的(π0 用 10 步)。

为什么机器人特别关心这个

  1. 多模态动作分布BC 的 MSE 回归处理不了「同一状态多种合理动作」。Diffusion/Flow 能学整个分布。
  2. 推理延迟 = 控制频率:Diffusion 50 步太慢(机器人要 30Hz+),Flow 10 步够,Consistency 1-4 步最快。
  3. action chunking:Flow/Diffusion 一次生成未来 N 步动作 chunk,顺带缓解协变量偏移。
  4. 跨本体统一:π0 用 flow matching + 18 维 padding 实现跨本体统一 action 空间。

数学补充:为什么直线快

ODE 的数值求解误差取决于路径曲率。直线曲率为 0,Euler 法 10 步就精确。Diffusion 的预设路径(如 cosine schedule)是弯曲的,需要更多步才能跟上曲线。这是 π0 选 flow 的根本数学原因。

复盘:误区、检查点与 FAQ

常见误用

  • ❌ 「Diffusion Policy 太慢,所以不能用」——用 Flow Matching(π0)或 Consistency 蒸馏加速
  • ❌ 「Flow Matching 和 Diffusion 完全不同」——两者都是「学一个向量场把噪声分布传输到数据分布」。Score-SDE(Song 2021)证明 DDPM 的概率流 ODE 本身就是一条 flow;Flow Matching(Lipman 2023)框架更一般,允许任意路径,DDPM 那条弯曲的高斯路径只是其中一种特例
  • ❌ 「Consistency Model 会损失质量」——在机器人动作上实测质量损失很小,主要损失在图像生成
  • ❌ 把 $t$ 的方向搞混——DDPM 是 $t=0$ 数据 $t=T$ 噪声,π0 是 $t=0$ 噪声 $t=1$ 数据。复现时看清楚

常见误区

"扩散策略太慢,所以不能用" —— 不对。慢的是推理步数。换成流匹配(π0 的 10 步)或一致性蒸馏(1-4 步)就能上真机。

"慢"是工程问题,已被流匹配和一致性解决。

"流匹配和扩散是完全不同的方法" —— 错。它们都是基于分数的生成模型。扩散反而是流匹配的特例(路径选弯曲线);流匹配更一般,可以选任意路径,选直线就比扩散快。数学上同源。

流匹配是扩散的推广版,直线流匹配比弯曲扩散更快。

"一致性模型会损失太多质量" —— 在机器人动作上实测损失很小。主要损失在图像生成这种高频细节任务。机器人动作平滑、低维,一致性蒸馏够用。

检查点

Q1

这类方法的"共同核心"是什么?

💡 显示参考答案
  • 入门层「是什么·为什么」段直接说明。
Q2

扩散、流匹配、一致性三种"向导"的差别在哪?

💡 显示参考答案
  • 相应段落 + 直觉层 类比共同支撑。
Q3

为什么流匹配比扩散快这么多?

💡 显示参考答案
  • 常见误区或 入门层 关键句直接说明。
Q4

用"乡间小路 vs 高速"的类比解释:路径形状怎么影响步数?

💡 显示参考答案
  • 入门层 关键句或常见误区直接说明。
Q5

假设你要在 30 Hz 真机上做灵巧操作,三种向导里你会选哪个?为什么?

💡 显示参考答案
  • 入门层 应用提示。

FAQ

Q1:为什么不用简单的均方误差回归动作?

均方误差假设答案唯一。多模态动作(同一状态多种合理动作)会被平均成无效中间态。生成式方法学整个分布,自然支持多模态。

Q2:流匹配为什么是直线?

路径形状是人为选的。扩散选弯曲线(预设加噪 schedule);流匹配直接选直线(从噪点到目标的线性插值)。直线欧拉法解 ODE 10 步就够,弯曲线要 50 步以上。

Q3:π0 的流匹配有什么"关键 trick"?

条件流匹配——给定当前观测学动作分布,不是无条件生成。还用 Beta 分布采样时间步、偏向高噪声区,让向量场在噪声端学得更准。详见 π0 论文笔记。


深度辨析 → site/concepts/C-diffusion-flow-matching.html

相关