π0 是 Physical Intelligence 公司提出的 3.3B 参数通用机器人模型。它在预训练的 VLM(PaliGemma)之上添加了一个专门的 Action Expert,用 Flow Matching(流匹配)生成连续动作块(action chunk),支持最高 50Hz 的灵巧控制。是第一个能做折衣服、收拾桌子等复杂灵巧任务的通用 VLA。
| 属性 | 规格 |
|---|---|
| 参数量 | ~3.3B(PaliGemma 3B + Action Expert ~300M) |
| VLM backbone | PaliGemma(SigLIP + Gemma-2B) |
| 动作生成方式 | Flow Matching(连续空间生成 action chunk) |
| 控制频率 | 最高 50Hz(灵巧任务);通常 5-15Hz |
| 动作块 | 预测未来 T 步,执行前 X 步(receding horizon) |
| 核心能力 | 折衣服、收拾桌子、装袋、灵巧操作 |
OpenVLA 把动作离散化为 256 bin token,用 next-token prediction 训练。这种方式简单有效,但存在根本局限:
当任务存在多种合理操作方式时(如拿杯子可以握把手或握杯身),离散化方法倾向于输出"平均值"——两种方式的中间值——通常不是有效动作。连续空间的扩散/流匹配方法天然支持多模态分布:可以从多个模式中采样。
OpenVLA 每步只预测 1 个动作,推理 6Hz。灵巧任务(如折衣服)需要 50Hz 控制,且需要连续多步动作的平滑过渡。逐 token 生成的速度远远不够。
核心矛盾
LLM 的 next-token prediction 天然适合输出离散、单步、低频的序列(如文字)。但机器人动作需要连续、多步(chunk)、高频。π0 的解法:不强行让 LLM 输出动作,而是给它配一个专门的"动作专家",用 Flow Matching 直接生成连续动作块。
Flow Matching 是 Diffusion(扩散模型)的变体,但更高效。理解它需要三步:
给定一条真实训练动作 A_t(T 步的动作序列)和完全随机的噪声 ε ~ N(0, I),构造一个连续插值:
A_t^τ = τ · A_t + (1 - τ) · ε
# τ = 0 时,A_t^0 = ε(纯噪声)
# τ = 1 时,A_t^1 = A_t(真实动作)
# τ 从 0→1 的过程就是从噪声"流向"真实动作
定义一个"流速向量场"(velocity field):
u(A_t^τ | A_t) = ε - A_t
# 直觉理解:
# 在 τ=0 处(噪声),流速指向真实动作的方向
# 在 τ=1 处(真实动作),流速为零(到达目标)
# 中间任意点 τ,流速告诉你"该往哪个方向变化"
训练时,随机采样 τ 和 ε,构造噪声动作 A_t^τ,让神经网络学习预测流速 u:
# 训练目标(MSE loss)
loss = ||v_θ(A_t^τ, o_t, τ) - u(A_t^τ | A_t)||²
# v_θ 是神经网络预测的流速
# o_t 是当前观测(图像+指令+状态)
# 目标:让网络预测的流速 ≈ 真实流速 ε - A_t
推理时没有真实动作 A_t。但训练好的网络 v_θ 知道"在任意噪声状态下该往哪走"。从纯噪声开始,沿网络预测的流速方向积分:
# 推理过程(简化版欧拉积分)
A = sample_noise() # 从纯噪声开始
for τ from 0 to 1 step Δτ: # K 步积分
v = v_θ(A, observation, τ) # 网络预测流速
A = A + v * Δτ # 沿流速方向走一小步
# 最终 A ≈ 生成的动作
积分步数 K 越多精度越高,但速度越慢。π0 实践中用 10 步即可生成高质量动作。
Flow Matching vs DDPM Diffusion:为什么选 Flow Matching?
DDPM(如 Octo 用的):建模"加噪声→学去噪"的马尔可夫链,推理需要几十步迭代,较慢。
Flow Matching:建模"从噪声到数据的线性插值路径",用 ODE(常微分方程)求解器,路径更直、收敛更快,10 步即可。
类比:DDPM 像走迷宫(每步只能看到相邻格子),Flow Matching 像有 GPS 导航(直接看到目标方向)。
π0 的架构巧妙地融合了 VLM 和 Flow Matching:
关键设计:VLM 和 Action Expert 共享 self-attention 层(让语言理解能直接指导动作预测),但各自有独立的 FFN(Feed-Forward Network)。也就是说:
因为它像 mixture-of-experts(MoE)中的专家模块:只在需要输出动作时被激活,有自己专用的参数。这使得 Action Expert 能学习到与语言理解完全不同的表示——连续动作空间的"场"结构,而非离散文本 token 的概率分布。
不同于 OpenVLA 每次只预测 1 个动作,π0 每次预测未来 T 步动作(如 T=16),然后执行前 X 步(如 X=8),再重新预测:
# Receding Horizon Control
while task_not_done:
action_chunk = flow_matching_generate(observation) # 预测 16 步
for i in range(X): # 执行前 8 步
execute(action_chunk[i])
# 回到循环开头,用新观测重新预测
π0 使用 Physical Intelligence 的大规模私有机器人数据集(未完全公开),包含:
| 数据类型 | 机器人平台 | 典型任务 |
|---|---|---|
| 单臂操作 | Franka, UR5 | 抓取、放置、倒水 |
| 双臂操作 | 双臂 ALOHA | 折衣服、装袋 |
| 移动操作 | Mobile manipulator | 收拾桌面、搬运 |
π0 采用类似 LLM 的训练范式:
这让 π0 既有广度(预训练学到的通用策略),又有深度(后训练针对特定任务的精细控制)。
| 任务 | 成功率 | 说明 |
|---|---|---|
| 折衣服 | ~70% | 首个能做到的通用 VLA |
| 收拾桌面 | ~85% | 多物体分拣+放置 |
| 装袋 | ~65% | 需要精细力控 |
| 倒咖啡 | ~80% | 液体操作,需精确控制 |
注:具体数字来自论文定性描述和演示视频,精确 benchmark 请参考原文。
| 维度 | OpenVLA | π0 |
|---|---|---|
| 参数量 | 7B | ~3.3B |
| 动作生成 | 离散 token(256 bin) | Flow Matching(连续) |
| 每次预测 | 1 个动作 | T 个动作(chunk) |
| 控制频率 | ~6 Hz | 最高 50 Hz |
| 灵巧任务 | 弱(单步+低频) | 强(chunk+高频) |
| 多模态动作 | 不支持(输出平均值) | 支持(Flow Matching 采样) |
| 开源程度 | 完全开源 | 论文公开,权重未开源 |
✓ 优势
• 高频灵巧控制——50Hz,能折衣服这种极难任务
• Flow Matching 支持多模态动作分布
• Action Chunking 减少推理延迟,动作更平滑
• 预训练+后训练范式灵活适配新任务
✗ 代价
• 权重未开源——只有论文和视频,无法复现
• 训练数据是私有的——无法验证泛化性
• Flow Matching 推理需要 10 步迭代——比 greedy decoding 复杂
• Action Expert 增加架构复杂度
| 场景 | 推荐度 | 理由 |
|---|---|---|
| 灵巧操作(折衣服等) | ★★★★★ | 目前唯一能做到的通用方案 |
| 需要高频控制 | ★★★★★ | 50Hz + action chunk |
| 双臂协作 | ★★★★☆ | 训练数据含双臂 |
| 需要自己复现 | ★★☆☆☆ | 权重和数据未开源 |
| 低成本部署 | ★★☆☆☆ | 推理复杂度高 |