π₀.₅: a Vision-Language-Action Model with Open-World Generalization
π₀.₅: a Vision-Language-Action Model with Open-World Generalization
π₀.₅ 通过异构数据 co-training(跨机器人数据 + 高层语义预测 + web 数据 + 人类语言指令)和两阶段训练(discrete token 预训练 + flow matching post-training),使移动操作机器人首次在从未见过的家庭环境中完成长时程(10-15分钟)灵巧操作任务(清洁厨房/卧室)。
0. 基本信息
- 论文标题:π₀.₅: a Vision-Language-Action Model with Open-World Generalization
- 作者:Physical Intelligence (Kevin Black, Noah Brown, Danny Driess, Chelsea Finn, Karol Hausman, Brian Ichter, Sergey Levine, Karl Pertsch, Lucy Shi, et al.)
- 机构:Physical Intelligence
- 来源(会议 / arXiv / 期刊):arXiv preprint
- 年份:2025
- 原论文 arXiv 链接:https://arxiv.org/abs/2504.16054v1
- 论文研究方向:Vision-Language-Action Models / 机器人泛化 / 开放世界操作 / Co-training
- 本文一句话概括:π₀.₅ 通过异构数据 co-training(跨机器人数据 + 高层语义预测 + web 数据 + 人类语言指令)和两阶段训练(discrete token 预训练 + flow matching post-training),使移动操作机器人首次在从未见过的家庭环境中完成长时程(10-15分钟)灵巧操作任务(清洁厨房/卧室)。
1. 论文核心观点与主张的系统梳理
1.1 研究背景与动机
开放世界泛化是机器人智能的核心难题:机器人只有离开实验室、应对真实世界的多样性才真正有用。当前 VLA 模型虽然在实验室环境表现出色,但仍限于与训练数据高度相似的场景。
核心挑战:让机器人清洁一个从未见过的厨房,需要在多个抽象层次上泛化—— - 低层:抓取新形状的盘子(靠充足训练数据) - 中层:在新环境中调整或组合已有技能(需要跨域迁移) - 高层:理解场景语义来决定做什么(需要 web 级别的世界知识)
论文核心假设:单一数据来源无法覆盖所有泛化需求——需要从异构数据源(其他机器人、web 数据、高层标注、人类口头指令)联合训练。
1.2 问题设定

Figure 3 展示 π₀.₅ 的两阶段架构:预训练阶段用 discrete tokens 统一训练所有数据源;post-training 阶段引入 flow matching action expert 用于连续动作推理。推理时先生成高层子任务,再生成低层动作。
- 输入:4 个 RGB 摄像头(前/后/双腕)+ 机器人关节状态(18-19 DoF)+ 语言任务指令
- 输出:高层子任务文本
+ 低层动作 chunk
- 机器人平台:双臂移动操作机器人(2×6DoF 臂 + 夹爪 + 全向底盘 + 升降机构)
- 评估:全新未见家庭中完成长时程清洁任务(10-15 分钟)
1.3 核心观点(Claims)的逐条梳理
Claim 1:异构数据 co-training 是实现开放世界泛化的关键,而非仅靠扩大同质数据规模。
- 位置:Introduction + Section V-C (Figure 10/11)
- 论据:移除跨体 (CE) 或多环境 (ME) 数据后,in-distribution 和 OOD 性能均显著下降
Claim 2:将离散 token 预训练与连续 flow matching post-training 结合,可兼得训练效率和推理精度。
- 位置:Section IV-B (Equation 1)
- 论据:FAST token 预训练更高效(同等 compute 下优于纯 diffusion),flow matching 推理更快(10 步 vs 自回归解码)
Claim 3:高层子任务推理(类似 chain-of-thought)显著提升长时程任务性能。
- 位置:Section V-E (Figure 13)
- 论据:完整 π₀.₅ 甚至优于 human oracle 高层策略;移除高层训练数据性能大幅下降
Claim 4:Web 数据的核心价值在于提升高层语义策略,而非低层动作质量。
- 位置:Section V-C/E
- 论据:移除 web 数据对 OOD 物体的语言跟随和高层推理有显著负面影响
Claim 5:首次展示端到端学习系统在全新家庭完成长时程灵巧操作。
- 位置:Section V-B
- 论据:在从未见过的厨房/卧室中完成 10-15 分钟的清洁任务
1.4 创新性与贡献边界
实质性创新:
- Co-training recipe:系统性地整合 5 类异构数据源(MM/ME/CE/HL/WD + VI)
- 两阶段训练:discrete token 预训练(α=0)→ flow matching post-training(α=10),兼得效率和精度
- 统一模型做高低层推理:同一模型先输出子任务文本,再输出连续动作(类 chain-of-thought)
增量性贡献:
- 模型架构本质沿用 π₀(PaliGemma + Action Expert + Flow Matching)
- Flow matching 算法本身未改变 - 高层-低层分解在机器人领域已有大量先例
2. 关键论据、理论基础与数学方法的深度解析
2.1 理论基础与学术渊源
- π₀ VLA 框架(Black et al., 2024):PaliGemma VLM + Flow Matching Action Expert
- FAST Action Tokenizer(Pertsch et al., 2024):高效离散化动作 chunk 的压缩 tokenizer
- Flow Matching(Lipman et al., 2022):比 diffusion 更简洁的连续分布建模
- Chain-of-thought(Wei et al., 2022):推理时先生成中间步骤再给出最终答案
2.2 问题形式化与建模选择
π₀.₅ 的联合分布分解为高层和低层:
符号说明:
为图像+关节状态观测
为高层任务指令(如"清洁厨房")
为模型预测的子任务(如"拿起盘子")
为动作 chunk。
关键设计:低层动作只依赖子任务
,不直接依赖原始指令
。这实现了信息隔离——高层负责理解"做什么",低层只需执行"怎么做"。
2.3 核心推导与算法构造
2.3.1 联合训练损失
符号说明:
:文本 token 的交叉熵损失(包括 FAST 编码的动作 token)。
:action expert 输出的 flow matching 向量场预测。
:flow matching 插值,其中
,
。
:flow matching 损失权重(预训练阶段 α=0,post-training 阶段 α=10)。
自然语言翻译: 模型同时最小化两个目标:
- 让文本输出(包括子任务和 FAST 动作 token)的交叉熵尽可能低;
- 让 action expert 预测的 flow vector field 尽可能接近真实目标
。
2.3.2 两阶段训练策略
预训练(280k steps,α=0):
- 所有任务统一为 next-token prediction
- 动作用 FAST tokenizer 离散化为文本 token
- 数据:MM + ME + CE + HL + WD
- 97.6% 的训练样本不来自移动操作机器人
Post-training(80k steps,α=10):
- 加入随机初始化的 Action Expert
- 联合优化文本预测 + Flow Matching
- 数据:MM + ME + HL + WD + VI(去掉 CE 实验室数据)
- 额外引入 verbal instruction (VI) 数据
2.3.3 推理流程
- 高层推理:自回归生成子任务文本
(如"pick up the plate")
- 低层推理:以
为条件,用 flow matching 10 步去噪生成动作 chunk
- 控制频率:50 Hz(使用 action chunking)
2.4 理论结论的适用范围
- 模型需要大量标注的高层子任务数据(HL),标注成本不低
- Verbal instruction (VI) 数据仅占高层数据的 11%,但对性能至关重要
- 模型处理的语言指令复杂度受限于训练数据的多样性
- 上下文窗口有限,不支持跨房间记忆或长期规划
3. 实验设计与实验结果的充分性分析
3.1 实验目标与论文主张的对应关系
| 主张 | 对应实验 |
|---|---|
| Claim 1 (Co-training 关键) | Fig. 10/11: 移除 CE/ME/WD 消融 |
| Claim 2 (两阶段训练) | Fig. 12: π₀.₅ vs π₀ vs π₀-FAST+Flow |
| Claim 3 (高层推理重要) | Fig. 13: 7种高层策略消融 |
| Claim 4 (Web数据价值) | Fig. 11/13: no WD 消融 |
| Claim 5 (新家庭泛化) | Fig. 6-9: 真实家庭评估 |
3.2 实验设置合理性
- 评估环境:4 个全新家庭(完全未在训练中出现)
- 任务:Mock home 设置的标准化清洁任务(厨房/卧室各 5+ 子任务)
- 数据规模:~400h 移动操作数据 + 大量跨体数据
3.3 实验结果的解释力度
Co-training 消融(Figure 10/11)
| 消融 | Mock Home 成功率 | 影响 |
|---|---|---|
| Full π₀.₅ | 最高(基准) | — |
| no ME (无多环境数据) | 显著下降 | 多环境数据对泛化至关重要 |
| no CE (无跨体数据) | 显著下降 | 跨体迁移有效 |
| no ME & CE | 更大幅下降 | 两者协同 |
| no WD (无web数据) | 在语言跟随OOD场景显著下降 | Web数据帮助理解新物体 |
模型对比(Figure 12)
| 模型 | 表现 |
|---|---|
| π₀ (原始) | 较弱 |
| π₀-FAST+Flow (改进) | 中等 |
| π₀.₅ (完整) | 显著最优 |
即使给 π₀ 更长的训练(300k steps),仍不如 π₀.₅。证明 co-training recipe 的重要性超越单纯的训练时长。
高层推理消融(Figure 13)
| 高层策略 | 表现 | 洞察 |
|---|---|---|
| π₀.₅ (完整) | 最优 | 甚至优于 human oracle |
| implicit HL (训练含HL,推理不用) | 第二 | 仅 co-training 就有大量增益 |
| no HL (完全无HL数据) | 差 | HL数据即使不在推理时用也很重要 |
| no VI (无口头指令) | 显著下降 | 11% 的 VI 数据却至关重要 |
| no WD (无web数据) | 显著下降 | Web知识主要帮助高层决策 |
| GPT-4 (零样本) | 最差 | 通用LLM不能替代机器人特化的高层策略 |
| Human oracle | 略低于完整模型 | π₀.₅ 的高层推理已超越人类手工选择 |
3.4 潜在未讨论因素
| 消融项 | 变化 | 数据集/设置 | 结论 |
|---|---|---|---|
| ME 数据 | 移除 | Mock Home | 显著下降,跨环境数据关键 |
| CE 数据 | 移除 | Mock Home | 显著下降,跨体迁移有效 |
| WD 数据 | 移除 | 语言跟随 OOD | 显著下降,帮助理解新物体 |
| VI 数据 | 移除 | 高层推理 | 显著下降,11% 数据贡献巨大 |
| HL 训练数据 | 移除 | Mock Home | 大幅下降 |
| 高层推理 | 关闭 | Mock Home | 下降,但隐式学习已捕获部分收益 |
4. 与当前领域主流共识及反对观点的关系
4.1 与主流观点的一致性
- VLA 是通用机器人控制的有力框架:与 RT-2, OpenVLA, π₀ 方向一致
- Co-training 有益:与 RT-2, Octo 等工作的发现一致
- 高层-低层分解有效:与 SayCan, RT-H 等层次化方法一致
4.2 与反对或竞争观点的分歧
- 与 "单一模型直接端到端" 路线的对比:π₀.₅ 虽用同一模型,但推理时仍有显式的高低层分离,不是纯 end-to-end
- 与 GPT-4 做高层的方案对比:结果表明通用 LLM 做高层策略远不如机器人数据特化的模型
- 与纯 scaling 路线的对比:证明异构数据 co-training 比单纯增加同类数据更有效
4.3 论文在学术版图中的定位
π₀.₅ 是 Physical Intelligence 的第二代 VLA,处于VLA 泛化的最前沿。它首次在真实新家庭中展示了长时程灵巧操作,是目前公开报道的泛化能力最强的 VLA 系统。
4.4 文献检索说明
- 检索范围:论文引用的 88 篇文献
- 检索结论可信度:高
4.5 相关论文补充表
| 序号 | 论文标题 | 作者 / 年份 | 来源 | 与原论文关系 | 一句话概述 |
|---|---|---|---|---|---|
| 1 | π₀ | Black et al. / 2024 | arXiv | 直接前身 | Flow matching VLA,π₀.₅ 的架构基础 |
| 2 | FAST Tokenizer | Pertsch et al. / 2024 | arXiv | 技术组件 | 高效动作 chunk 离散化 |
| 3 | PaliGemma | Beyer et al. / 2024 | arXiv | 基础模型 | VLM backbone |
| 4 | RT-2 | Zitkovich et al. / 2023 | arXiv | 方法对比 | VLM co-training for robot control |
| 5 | OpenVLA | Kim et al. / 2024 | arXiv | 方法对比 | 开源 VLA 方案 |
| 6 | SayCan | Ahn et al. / 2022 | arXiv | 方法对比 | LLM 做高层 + 低层策略执行 |
| 7 | Open X-Embodiment | OXE Collaboration / 2023 | arXiv | 数据来源 | 大规模跨体机器人数据集 |
| 8 | Diffusion Policy | Chi et al. / 2024 | RSS | 方法对比 | Diffusion 做机器人动作生成 |
| 9 | GR00T N1 | NVIDIA / 2025 | arXiv | 竞争方法 | 人形机器人基础模型 |
| 10 | Octo | Collaboration / 2023 | arXiv | 方法对比 | 跨体泛化的机器人策略 |
5. 对论文理论体系的严肃反驳与系统性质疑
5.1 核心假设层面的质疑
- 泛化来源的归因问题:π₀.₅ 同时改变了太多变量(数据源、训练策略、模型细节),难以精确归因哪部分改进来自 co-training recipe vs 更好的模型细节(如 AdaRMSNorm)。
- HL 数据的人工标注成本:高层子任务标注是手动完成的,这是一个隐含的监督成本。论文未讨论这一标注的规模和成本。
- "超越 human oracle" 的可信度:π₀.₅ 在高层推理上超越 human oracle 令人惊讶。可能的解释:(a) human oracle 受限于预定义的标签集;(b) 模型的"超越"更多反映了统计匹配而非真正的推理能力。
5.2 数学推导与理论主张的边界
- Equation 1 中 α 的选择:预训练 α=0,post-training α=10。这一巨大跳变缺乏理论指导,为何不是渐进增大?
- Flow matching 时间分布:使用 Beta(1.5, 1.0) 而非均匀分布,偏向干净动作端——这一选择的消融未提供。
5.3 工程实现与实际适用性
- 数据闭源:400h 移动操作数据、CE/ME/HL/VI 数据均不公开
- 硬件特化:评估仅在两种特定移动操作平台上进行
- 成功率未报告绝对数值:实验结果以相对对比图展示,缺乏绝对成功率
- 推理延迟:50Hz 控制频率需要 10 步 flow matching 去噪 + 高层推理的自回归解码,计算需求未讨论
5.4 整体理论体系的稳健性
论文的核心贡献是系统集成而非单点突破——它展示了一个精心设计的 co-training recipe 可以实现前所未有的泛化水平。消融实验充分支持了各数据源的重要性,但由于系统复杂度高且数据不公开,可复现性受限。整体是一篇工程导向的系统论文,实验规模和泛化范围令人印象深刻。
6. 最终结论
6.1 论文价值总结
π₀.₅ 首次展示了端到端学习系统在全新家庭环境中完成长时程灵巧操作的能力。其核心洞察——异构数据 co-training 比同质数据 scaling 更有效——对机器人学习领域具有重要指导意义。两阶段训练(discrete → continuous)的设计也为 VLA 训练提供了实用的工程范式。
6.2 一句话总评
一篇系统集成水平极高的工程论文,首次令人信服地展示了 VLA 在开放世界中的泛化潜力,但可复现性受数据闭源限制。
6.3 综合评分(10 分制)
- 创新性:7/10 — Co-training recipe 是系统集成创新,非单点突破
- 技术严谨性:7.5/10 — 消融充分但缺乏绝对数值,数据闭源
- 实验说服力:9/10 — 真实新家庭评估、多维度消融、长时程任务
- 工程价值:9/10 — 两阶段训练范式、统一高低层推理
- 总体评分:8/10
6.4 最关键的三条优点
- 首次在全新家庭中展示 10-15 分钟长时程灵巧操作的端到端系统
- 消融实验系统性极强——5 类数据源、7 种高层策略的全面对比
- 两阶段训练(FAST token 预训练 + flow matching post-training)兼得训练效率和推理精度
6.5 最关键的三条问题
- 训练数据完全闭源,核心 co-training recipe 不可复现
- 实验结果仅以相对对比图展示,缺乏绝对成功率数值
- 高层子任务标注依赖人工,标注规模和成本未讨论
附录 A:关键实验表与消融实验表
A.1 数据源组成
| 数据类别 | 缩写 | 内容 | 阶段 |
|---|---|---|---|
| Mobile Manipulator | MM | ~400h 家庭操作 | 预训练+后训练 |
| Multi-Environment | ME | 非移动臂在多种家庭 | 预训练+后训练 |
| Cross-Embodiment | CE | 实验室各类机器人+OXE | 仅预训练 |
| High-Level | HL | 子任务标注 | 预训练+后训练 |
| Web Data | WD | 图文问答/定位 | 预训练+后训练 |
| Verbal Instruction | VI | 人类口头指令演示 | 仅后训练 |
A.2 模型架构参数
| 组件 | 规格 |
|---|---|
| VLM Backbone | PaliGemma (Gemma-2B, 2048 dim, 18 layers) |
| Vision Encoder | SigLIP So400m/14 |
| Action Expert | Gemma-300M (1024 dim, 18 layers) |
| Action Dim | 18-19 (取决于平台) |
| Action Horizon | 50 步 |
| 控制频率 | 50 Hz |
| Flow Matching 步数 | 10 (推理) |
A.3 训练配置
| 参数 | 预训练 | Post-training |
|---|---|---|
| 步数 | 280k | 80k |
| α (flow matching 权重) | 0 | 10.0 |
| 动作表示 | FAST discrete tokens | Flow matching continuous |
| Action Expert | 无 | 随机初始化 |
A.4 消融总结
| 消融 | Mock Home | 语言跟随 | 高层推理 |
|---|---|---|---|
| Full π₀.₅ | 最优 | 最优 | 最优(超 human) |
| no ME | 显著↓ | 显著↓ | — |
| no CE | 显著↓ | 显著↓ | — |
| no WD | 不显著 | OOD 显著↓ | 显著↓ |
| no VI | — | — | 显著↓ |
| no HL | — | — | 大幅↓ |
| implicit HL | — | — | 第二名 |
| GPT-4 HL | — | — | 最差 |
附录 B:本报告引用的关键外部文献
- Black et al. (2024). "π₀: A Vision-Language-Action Flow Model for General Robot Control." arXiv:2410.24164 — π₀.₅ 的直接前身
- Pertsch et al. (2024). "FAST: Efficient Action Tokenization for VLA Models." arXiv:2501.09747 — 动作 tokenizer
- Beyer et al. (2024). "PaliGemma: A Versatile 3B VLM for Transfer." arXiv:2407.07726 — VLM backbone
- Lipman et al. (2022). "Flow Matching for Generative Modeling." — Flow matching 理论基础
- Wei et al. (2022). "Chain-of-Thought Prompting." NeurIPS — 高层推理的概念来源
- Ahn et al. (2022). "SayCan: Do As I Can, Not As I Say." arXiv:2204.01691 — LLM 高层+低层执行
- OXE Collaboration (2023). "Open X-Embodiment." arXiv:2310.08864 — 跨体数据集
- Zitkovich et al. (2023). "RT-2: Vision-Language-Action Models." arXiv — VLM co-training 先驱
附录 C:核心代码解析(基于 openpi 仓库)
本附录基于 https://github.com/Physical-Intelligence/openpi 开源代码仓库,结合论文内容给出核心伪代码解读。
C.1 整体架构
openpi/
├── src/openpi/
│ ├── models_pytorch/
│ │ ├── pi0_pytorch.py # 核心模型(Flow Matching VLA)
│ │ ├── gemma_pytorch.py # 双 Transformer 架构
│ │ └── preprocessing_pytorch.py # 图像预处理
│ ├── models/
│ │ ├── pi0.py # JAX 参考实现
│ │ ├── pi0_config.py # 配置(Pi0/Pi0.5)
│ │ └── tokenizer.py # FAST/FSQ tokenizer
│ ├── policies/
│ │ └── policy.py # 统一推理接口
│ └── training/
│ └── config.py # 训练配置
C.2 模型核心结构(伪代码)
class Pi0Model:
"""π₀/π₀.₅ 统一模型"""
def __init__(config):
# === 1. 感知模块:PaliGemma (2B) ===
self.paligemma = PaliGemma(
vision_encoder=SigLIP_So400m(), # 图像编码
language_model=Gemma_2B() # 语言模型
)
# === 2. 动作模块:Action Expert (300M) ===
self.action_expert = Gemma_300M() # 独立的小 Transformer
# === 3. 投影层 ===
self.action_in_proj = Linear(action_dim → expert_dim) # 动作→嵌入
self.action_out_proj = Linear(expert_dim → action_dim) # 嵌入→动作
# === 4. 时间步嵌入(Flow Matching 条件)===
if config.pi05:
# π₀.₅ 用 AdaRMSNorm 注入时间步
self.time_mlp = MLP(expert_dim → expert_dim)
else:
# π₀ 用拼接方式
self.state_proj = Linear(action_dim → expert_dim)
self.action_time_mlp = MLP(2*expert_dim → expert_dim)
C.3 数据流和注意力掩码
┌──────────────────────────────────────────────────────┐
│ INPUT TOKENS │
│ │
│ PREFIX(双向注意力,PaliGemma 处理): │
│ ┌─────────┐ ┌─────────────┐ ┌──────────────┐ │
│ │ 图像 emb │ │ 语言 tokens │ │ (π₀.₅)状态 │ │
│ │ SigLIP │ │ tokenized │ │ 离散化 token │ │
│ └─────────┘ └─────────────┘ └──────────────┘ │
│ ↕ 互相可见 ↕ 互相可见 │
│ │
│ SUFFIX(结构化注意力,Action Expert 处理): │
│ ┌──────────────────────────────────────┐ │
│ │ 噪声动作 x_t + 时间步 embedding │ │
│ │ action_in_proj(x_t) │ │
│ └──────────────────────────────────────┘ │
│ ↑ 可以看到 PREFIX │
│ ✗ PREFIX 看不到 SUFFIX(单向) │
└──────────────────────────────────────────────────────┘
关键:PREFIX(感知)和 SUFFIX(动作)之间是单向注意力——动作 token 可以看到图像/语言,但图像/语言看不到动作。这允许推理时缓存 PREFIX 的 KV cache,10 步去噪只需重复计算 SUFFIX。
C.4 训练前向传播(Flow Matching)
def forward(observation, actions):
"""训练时的前向传播"""
# ---- Step 1: 采样噪声和时间步 ----
noise = torch.randn_like(actions) # ω ~ N(0, I)
time = Beta(1.5, 1.0).sample(batch_size) # τ ~ Beta(1.5, 1)
time = time.clamp(0.001, 1.0) # 截断到 [0.001, 1]
# ---- Step 2: Flow Matching 线性插值 ----
τ = time[:, None, None] # 扩展维度
x_t = τ * noise + (1 - τ) * actions # 插值:t=0 是真实动作,t=1 是噪声
u_t = noise - actions # 目标向量场
# ---- Step 3: 编码 prefix(图像 + 语言)----
img_embs = paligemma.encode_images(observation.images)
lang_embs = paligemma.embed_tokens(observation.text_tokens)
prefix = concat([img_embs, lang_embs]) # 全双向注意力
# ---- Step 4: 编码 suffix(噪声动作 + 时间步)----
action_embs = action_in_proj(x_t) # 投影到嵌入空间
time_embs = sinusoidal_embedding(time) # 正弦时间编码
if pi05:
# π₀.₅: 时间步通过 AdaRMSNorm 注入(不拼接)
adarms_cond = time_mlp(time_embs)
suffix = action_embs
else:
# π₀: 时间步与动作拼接后过 MLP
state_emb = state_proj(observation.state)
suffix = action_time_mlp(concat([action_embs, time_embs]))
# ---- Step 5: 双 Transformer 前向 ----
# PaliGemma 处理 prefix,Action Expert 处理 suffix
# 注意力掩码保证 prefix ← suffix 但 prefix → suffix 不行
output = dual_transformer(
prefix, suffix,
attention_mask=make_causal_mask(...),
adarms_cond=adarms_cond # 仅 π₀.₅
)
# ---- Step 6: 预测向量场并计算损失 ----
v_t = action_out_proj(output.suffix[-action_horizon:])
loss = MSE(u_t, v_t) # Flow Matching 损失
return loss
C.5 推理(Flow Matching 去噪)
@torch.no_grad()
def sample_actions(observation, num_steps=10):
"""推理时的迭代去噪"""
# ---- Step 1: 缓存 PREFIX 的 KV ----
prefix = encode_prefix(observation)
cached_kv = paligemma.forward(prefix, use_cache=True)
# (这一步只做一次,10步去噪复用)
# ---- Step 2: 从纯噪声开始 ----
x_t = torch.randn(batch, action_horizon, action_dim) # t=1: 纯噪声
dt = -1.0 / num_steps # 步长(从 1→0)
t = 1.0
# ---- Step 3: Euler 积分去噪 ----
while t >= -dt / 2:
# 用 Action Expert 预测当前时刻的速度场
v_t = action_expert.forward(
x_t, time=t,
past_key_values=cached_kv # 复用缓存的 prefix KV
)
v_t = action_out_proj(v_t)
# Euler 步进:x_{t+dt} = x_t + dt * v_t
x_t = x_t + dt * v_t
t += dt # t: 1.0 → 0.9 → ... → 0.0
return x_t # t=0: 去噪后的干净动作
推理效率要点: - PREFIX KV 缓存:图像/语言只编码一次,10 步去噪只重复 Action Expert(300M,远小于 2B VLM) - 10 步 Euler 积分 vs diffusion 的 50+ 步——flow matching 更快 - Action Expert 仅 300M 参数,每步推理成本低
C.6 π₀ vs π₀.₅ 的关键代码差异
| 特性 | π₀ | π₀.₅ |
|---|---|---|
| 状态输入 | 连续向量 →state_proj 投影 |
离散化为 256 bins → 文本 token |
| 时间步注入 | 拼接到动作 emb 后过 MLP | AdaRMSNorm 条件化 |
| Token 长度 | max 48 | max 200(更长的语言指令) |
| 预训练 | 仅 flow matching | FAST discrete token (α=0) |
| Post-training | flow matching | FAST + flow matching (α=10) |
| 高层推理 | 无 | 自回归生成子任务文本 |
C.7 AdaRMSNorm(π₀.₅ 核心改进)
class AdaRMSNorm(nn.Module):
"""自适应 RMS 归一化,基于 flow matching 时间步条件化"""
def forward(x, condition):
# condition = time_mlp(sinusoidal_embedding(t))
# 标准 RMSNorm
rms = x.norm(dim=-1, keepdim=True) / sqrt(dim)
x_norm = x / (rms + eps)
# 用时间步条件调制归一化后的特征
# condition 通过 learned affine transform 变成 scale/shift
scale = 1 + condition_to_scale(condition)
return x_norm * scale
为什么比拼接更好:拼接时间 embedding 到动作 token 会增加 attention 中的序列长度,而 AdaRMSNorm 在每一层通过归一化参数注入时间信息,不改变序列长度,计算更高效。
浙公网安备 33010602011771号