抓住杯柄可以从左侧接近,也可以先绕到右侧。示教数据里两种轨迹都合理,普通 L2 回归却可能取平均,给出一条正好撞上杯子的中间路线。生成式策略处理的是这种多峰动作分布:不把所有示教压成一个均值,而是从条件分布里生成一段自洽动作。
Diffusion Policy 用迭代去噪生成动作序列,π0 一类模型则用 flow matching 学习动作空间里的向量场。两者都常与 action chunk、滚动执行配合,但训练目标、采样过程和部署时的时间预算并不相同。
为什么要生成 chunk,而不是下一步
单步策略每次只预测 a_t,下一周期再看 o_{t+1}。反馈很及时,但每一步的小偏差会改变下一次输入,误差容易沿时间累积。双臂穿线、折衣服等动作还依赖较长协同,仅靠当前一步很难表达“左手保持,右手继续拉”的意图。
动作 chunk 一次预测 A_t = [a_t, ..., a_{t+H-1}]。模型能在一个样本内表达多步协调,也能让慢速视觉推理支撑更高频的动作点。代价是后半段动作很快过时,所以常配 receding-horizon control:预测 H 步,只执行前 K 步,满足 K < H,然后重新观测。
这和ACT 的动作分块目标相似。区别在于 ACT 直接由 CVAE/Transformer 回归 chunk,Diffusion Policy 和 flow matching 通过生成过程表示动作分布。
Diffusion Policy 学的是逐步去噪
Diffusion Policy 把干净动作序列逐步加噪得到 A^k,网络在图像和状态条件下预测噪声或与 score 相关的量。推理时从高斯噪声开始,沿预设噪声日程反复去噪,最终得到动作 chunk。
简化过程可以写成:
1 | training: clean action -> add noise at step k -> predict noise |
论文将这一做法与视觉条件、时间序列建模和滚动控制结合,在 12 个任务、4 个机器人操作基准上报告了相对基线的平均提升。该平均值只属于论文比较,不能写成“扩散策略普遍提升 46.9%”。
扩散采样的部署代价很直白:每个去噪步都可能调用一次网络。减少步数能缩短延迟,也可能改变动作质量;换 sampler 或噪声日程同样会让训练时结论发生偏移。
Flow matching 回归的是速度场
Flow matching 选择一条从简单噪声分布到真实数据分布的概率路径,训练网络预测路径上每一点的条件速度。以最容易理解的直线条件路径为例:
1 | A_tau = (1 - tau) * epsilon + tau * A |
模型推理时从 tau=0 的噪声出发,求解常微分方程:
1 | dA_tau / d_tau = v_theta(A_tau, tau, condition) |
Flow Matching 原论文讨论了更一般的概率路径,直线插值只是便于理解的一种情况。π0 把这类连续动作输出接到 VLM 与 action expert 上;动作 expert 多次更新带噪动作,VLM 提供图像和语言上下文。
“ODE”也不表示只算一次。Euler、midpoint 或更高阶求解器都需要若干函数评估。模型结构、积分步数和缓存策略一起决定实际延迟,不能只凭方法名称断言 flow matching 一定更快。
两种方法怎么选
| 维度 | Diffusion Policy | Flow matching 动作头 |
|---|---|---|
| 训练对象 | 去噪、噪声或 score 相关目标 | 条件向量场 |
| 采样过程 | 按噪声日程逐步去噪 | 沿学习到的 ODE 积分 |
| 多峰动作 | 可以表达 | 可以表达 |
| 与 VLM 结合 | 可作为独立动作策略或动作头 | π0 等用 action expert 接入 VLM |
| 主要旋钮 | 去噪步数、schedule、horizon | 积分器、步数、路径、horizon |
| 部署风险 | 多步推理和旧 chunk | 多次函数评估和旧 chunk |
表里没有“谁更准”,因为答案依赖任务、数据、模型容量和评测协议。单一稳定任务的数据不多,Diffusion Policy 的成熟实现可能更容易起步;需要语言条件、多机器人预训练和长任务语义,VLM 加 action expert 更符合目标。最后仍要用相同数据划分、相同视觉编码预算和相同真机任务比较。
时间预算决定 H 和 K
假设控制频率 50 Hz,单步 20 ms;模型 P99 推理 140 ms,通信和校验再用 40 ms。若每次只执行 4 步,80 ms 后就需要新 chunk,生产者永远追不上消费者。把执行前缀改为 12 步能覆盖 240 ms,留下约 60 ms 余量,但机器人会更久地沿旧计划运动。
可以用下面的脚本做第一轮预算:
1 | control_hz = 50 |
正余量只是必要条件。还要考虑相机输入年龄、GPU 与其他节点争用、模型偶发超时和动作切换连续性。H 太大增加开环尾部,K 太小又让推理器追不上,参数要通过任务速度与故障测试决定。
随机性需要可复现,也需要多次采样
生成策略从随机噪声出发,同一观测可能产生不同动作。评测只固定一个 seed,结果容易碰巧偏好某条轨迹;完全不记 seed,又无法回放失败。
离线评测可以对每个观测采多个 seed,记录动作范围、轨迹聚类和约束拒绝率。真机不适合为了统计直接执行所有样本,可以先用碰撞检查和仿真筛掉明显非法轨迹,再对通过的候选按固定协议抽样。运行日志应保存模型版本、seed、完整条件输入和最终被执行的 chunk。
当多种生成轨迹都能通过几何检查时,选择器还可以考虑轨迹长度、关节余量和与上一 chunk 的连续性。这个选择器会改变系统策略,也必须进入版本和验收记录。
未来的动作模型仍绕不开确定性底座
OpenVLA-OFT 用连续回归和并行解码缩短生成路径,π0 用 action expert 和 flow matching 把 VLM 语义接到高频 chunk,SmolVLA 又把推理与执行拆成异步线程。动作头会继续变,运行时的几个问题不会消失:动作属于哪一帧,何时过期,谁检查越界,怎样取消,模型停止响应后机器人做什么。
前两种架构可分别回看OpenVLA-OFT与π0/π0.5。部署侧的队列和动作年龄见SmolVLA 与 LeRobot。把三篇连起来读,比记住“扩散”或“流匹配”哪个更新更有用。
参考资料
- Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
- Diffusion Policy project
- Flow Matching for Generative Modeling
- π0: A Vision-Language-Action Flow Model for General Robot Control
- OpenVLA-OFT
证据边界
Diffusion Policy 的任务数量、论文平均提升和 π0 的模型设计来自原论文。本站没有在同一数据集上重训两种策略,也没有给出准确性胜负。公式省略了具体噪声日程、网络参数化、概率路径与求解器细节;时间预算脚本只做静态算术。方法选择必须在相同数据、硬件、动作空间和真机协议下比较。