为什么 Flow Matching 能成为 VLA 的主流方法之一?这篇笔记想用 pi0 的架构,把它背后的直觉讲清楚。
在讲 Flow Matching 之前,需要先回顾一下 diffusion 的思想。
先理解 diffusion:从噪声中还原
扩散模型的完整逻辑由两个过程组成:
- 正向扩散:不断加噪声,把清晰样本破坏成随机噪声。
- 逆向扩散:训练模型一步步去噪,把随机噪声还原成真实样本。
拿图像生成举例。假设某个像素的真实值是 120,正向扩散会不断给它加高斯噪声,最后把它破坏成接近随机的值,比如 160。
逆向扩散要做的事情,就是从带噪样本中预测噪声,再把噪声减掉。这个过程通常需要反复迭代很多步:
160 → 145 → 130 → 120
所以扩散模型更像是在做“逆向修正”:每一步都问自己,这里多了多少噪声,然后一点点减回去。
Flow Matching 的直觉:直接规划路径
Flow Matching 的思路不太一样。它不是反复预测噪声,而是直接学习样本从起点到终点的运动路径。
如果扩散模型像是“从错误答案一步步改回正确答案”,那么 Flow Matching 更像是“提前规划一条从起点到终点的路线”,告诉样本每一步该往哪里走、走多快。
Flow Matching 的核心是向量场,也可以理解成速度场:
$$ v_\theta(x_t, t) $$它表示在任意时刻 t、任意位置 x_t,样本应该朝哪个方向移动、以多大速度移动:
如果把像素值看成数轴上的点,那么 Flow Matching 就是在学习一条从随机起点到目标终点的轨迹。例如从 20 走到 120:
20 → 40 → 60 → ... → 120
这个过程通常只需要 2-10 步,因此推理速度会更快。
训练目标:学习理想速度场
Flow Matching 将生成过程建模为时间连续的确定性变换,时间区间为:
$$ t \in [0, 1] $$其中:
t = 0:初始状态,对应易采样的先验分布p_0,通常是标准高斯噪声。t = 1:目标状态,对应真实数据分布p_1,比如清晰图像或专家演示动作。
为了简化训练,Flow Matching 会给每个真实样本 x_1 定义一条线性插值路径:
其中,x_0 是从先验分布 p_0 中采样的噪声。
对时间 t 求导,就能得到这条路径对应的理想速度场:
这个理想速度场是全局恒定的,和时间 t、中间样本 x_t 都无关。这也是 Flow Matching 训练相对稳定、对超参数不那么敏感的重要原因。
为什么它适合 VLA?
这个逻辑可以迁移到机器人动作生成里。
如果把机器人的每个动作维度,比如末端 x/y/z 坐标、夹爪开合度,看成一个像素,那么一整条动作轨迹就可以理解成一张“动作图像”。
Flow Matching 要做的,就是从一个随机动作轨迹出发,沿着速度场逐步移动,最后生成接近专家演示的动作轨迹。
结合 pi0 看完整流程
pi0 中大致可以分成三个阶段。
预计算阶段
模型输入视觉观测和语言指令,通过跨模态对齐生成固定的 prefix_tokens。
这些 prefix tokens 会输入大模型,并一次性构建 KV 缓存,避免后续每一步推理都重复计算。
Flow Matching 迭代阶段
模型先采样初始噪声:
x_0 ~ N(0, I)
然后初始化时间步 t = 0。在每一次迭代中,带噪动作 x_t 和时间步 t 会被投影、编码并融合成 suffix_tokens。
随后,模型结合前缀 token、自定义注意力掩码和 suffix tokens,预测当前动作轨迹的速度场。再通过 Heun 法等 ODE 求解器更新动作,最终得到完整轨迹。
动作执行阶段
生成完整动作块之后,控制器只执行前 K 步动作。执行完之后,再滑动窗口进入下一帧推理。
小结
Flow Matching 之所以能成为 VLA 的主流方向之一,本质上是因为它解决了传统方案的几个痛点:
- 从随机走到规划走:基于确定性 ODE,动作轨迹更平滑、更可控。
- 从几十步到 2-10 步:推理步数更少,更适合机器人实时闭环控制。
- 从模块割裂到端到端融合:可以更自然地嵌入 PaliGemma 等 VLM 架构,同时保留开放世界泛化能力和高效动作生成能力。
我的理解是,Flow Matching 对 VLA 的价值不只是“生成更快”,更重要的是它把动作生成变成了一种连续轨迹规划问题。这和机器人控制本身的直觉是很接近的。

评论
由 GitHub Discussions 提供,首次加载可能需要一点时间。