【AI学习日记 Day 4|10.13】PI0.5
摘要: π₀.₅(PI0.5)关注一个关键问题:机器人进入训练时没有见过的家庭后,能否理解任务、拆解步骤,并持续完成复杂操作?本文先回顾 π₀,再梳理 π₀-FAST 和 Hi Robot,最后介绍 π₀.₅ 的数据组成、模型架构、训练方式与推理流程。
关键词: VLA、π₀.₅、FAST、DCT、Flow Matching、机器人泛化
文章目录
一、从 π₀ 到 π₀.₅:为什么还需要进一步改进?
1.1 回顾 π₀
π₀ 的核心可以从三个方面理解:
| 方面 | 核心内容 |
|---|---|
| 数据 | 使用多任务、多种机器人形态的数据进行训练 |
| 架构 | 在视觉语言模型基础上加入动作专家(Action Expert) |
| 训练 | 通过预训练获得通用能力,再通过后训练适配具体任务 |
其中,动作专家通过 **Flow Matching(流匹配)**生成连续动作。
模型一次预测一个包含 50 个时间步的动作块(Action Chunk)。需要注意,50 个时间步属于同一个动作块,并不是一次输出 50 个动作块。
π₀ 已经能够执行折衣服等复杂操作。因此,后续研究更值得关注的问题是:
当物体、背景和房间布局发生变化时,机器人还能否完成任务?
1.2 π₀.₅ 关注的核心:陌生环境中的泛化
如果训练与测试环境相近,机器人表现出色,并不能充分说明它能够适应一个全新的家庭。
π₀.₅ 将重点放在训练中未出现过的家庭环境,例如整理厨房、收拾卧室和整理床铺。官方展示包含持续 10~15 分钟的长时序操作,但这并不代表每次评测任务都持续这么久。
理解 π₀.₅,可以先看两条相关研究路线:
- **π₀-FAST:**怎样高效地学习机器人动作?
- **Hi Robot:**怎样将复杂指令拆成机器人能够执行的步骤?
二、π₀-FAST:让自回归模型更高效地学习动作
2.1 传统动作离散化存在什么问题?
RT-2、OpenVLA 等模型使用的一类常见方法,是对每个时间步、每个动作维度分别离散化。
例如,将一个连续动作维度划分为 256 个区间,数值落在哪个区间,就用对应的 token 表示。
但机器人动作通常具有很强的时间连续性。
假设某个动作维度在约 1 秒内从 0.1 平滑变化到 0.3,控制频率为 50 Hz,那么每一步的变化量约为:
Δ a ≈ 0.3 − 0.1 50 = 0.004 \Delta a \approx \frac{0.3-0.1}{50}=0.004 Δa≈500.3−0.1=0.004
如果归一化范围为 [-1, 1],划分为 256 个区间,那么每个区间的宽度约为:
Δ bin ≈ 2 256 = 0.0078 \Delta_{\text{bin}}\approx\frac{2}{256}=0.0078 Δbin≈2562=0.0078
此时,连续两步的动作可能仍然落在同一个区间,形成大量重复 token:
连续动作:0.100、0.104、0.108、0.112……
离散编码: token A、token A、token B、token B……
自回归模型可能倾向于利用“复制前一个 token”的局部规律,而没有充分学习视觉、语言与动作之间的关系。
**这里不能说“重复 token 不产生梯度”。**它们仍然参与损失计算,问题在于序列冗余较高,容易形成学习捷径。
2.2 FAST 的思路:先压缩动作,再预测 token
FAST 全称为 Frequency-space Action Sequence Tokenization。
它没有放弃自回归预测,而是改变了动作的编码方式:
将一段动作序列变成更紧凑的频域表示,再编码为离散 token。
整体流程如下:
连续动作块
↓
归一化
↓
DCT:时域 → 频域
↓
量化
↓
按频率顺序展平
↓
BPE 压缩
↓
离散动作 token
第一步:归一化
将不同动作维度归一化到接近 [-1, 1] 的范围,减小数值尺度差异。
需要注意:统一数值范围并不等于统一不同机器人的动作语义。
第二步:DCT——从时域转换到频域
对每个动作维度,沿时间轴执行离散余弦变换(DCT)。
以 50 个时间步为例:
50 个按时间排列的动作数值
↓ DCT
50 个按频率排列的系数
低频系数描述动作的整体趋势,高频系数描述较快的变化和细节。
DCT 本身只是变换表示方式;后续量化才会引入近似误差。
第三步:量化
对频域系数进行缩放、取整。
平滑动作的许多高频系数较小,量化后可能变成零,从而形成便于压缩的稀疏表示。
第四步:展平
将多个动作维度的系数展平成一维序列,按照低频在前、高频在后的顺序组织。
第五步:BPE 压缩
使用 BPE 合并频繁出现的符号组合,得到更短的动作 token 序列。
这里使用的是面向动作数据的 BPE 编码,不能直接理解成“原封不动使用语言模型已有的分词器”。
FAST 通过 DCT 与 BPE 减少动作序列冗余,使自回归模型能够学习高频、精细的机器人操作。
2.3 为什么训练快,推理却仍有压力?
自回归模型训练时,可以通过 Teacher Forcing 并行计算多个位置的预测损失;推理时,动作 token 通常仍需要逐个生成。
因此需要区分:
| 比较角度 | FAST 的特点 |
|---|---|
| 相比朴素动作离散化 | token 更紧凑,减少冗余 |
| 训练阶段 | 可以高效学习离散动作表示 |
| 推理阶段 | 自回归解码仍有串行开销 |
所以,“FAST 推理慢”需要说明比较对象:**相比通过较少迭代生成整个动作块的连续动作专家,自回归解码可能具有更高延迟。
三、Hi Robot:高层负责拆任务,低层负责执行
3.1 核心架构
Hi Robot 使用分层结构:
| 层级 | 模型 | 主要职责 |
|---|---|---|
| 高层 | VLM | 理解用户意图、观察场景、生成子任务 |
| 低层 | VLA | 根据子任务、图像和机器人状态生成动作 |
例如,用户说:
“把桌子收拾干净,但这个杯子先留着。”
高层模型可以根据当前场景生成更具体的指令,例如:
拿起纸巾 → 扔进垃圾桶 → 拿起盘子 → 放进收纳箱
低层 VLA 再执行这些指令。
3.2 支持执行过程中的语言反馈
用户不仅可以在开始时下达指令,也可以在执行过程中插话。
例如,机器人准备丢弃一个物体时,用户说:
“那个不是垃圾。”
高层模型需要结合当前画面理解“那个”指代什么,并调整下一步指令。
3.3 如何理解它的局限?
分层系统需要解决两个问题:
- 如何维护长任务中的进度和历史信息?
- 高层生成的子任务,是否处于低层策略的能力范围内?
因此,比“高层完全没有记忆”或“高层完全不知道低层能做什么”更准确的表述是:
高低层分别建模时,需要额外关注任务状态维护,以及规划与执行能力之间的匹配。
四、π₀.₅ 的数据:异构数据共同训练
π₀.₅ 的核心思路之一,是把不同来源、不同监督形式的数据放在一起训练。
4.1 数据组成
| 类别 | 数据内容 | 主要作用 |
|---|---|---|
| MM:移动操作数据 | 移动机器人在真实家庭中执行家务,约 400 小时 | 学习目标机器人在家庭中的操作 |
| ME:多环境固定机器人数据 | 单臂或双臂机器人在不同家庭环境中操作 | 扩展环境与物体多样性 |
| CE:跨机器人形态数据 | 多种机器人在实验室等场景中的操作数据 | 扩展技能和机器人形态覆盖 |
| HL:高层子任务监督 | 为机器人观测标注子任务文本及相关边界框 | 学习下一步应该做什么 |
| WD:网页多模态数据 | 图像描述、视觉问答、物体定位等 | 提供视觉和语义知识 |
| VI:语言指导示范 | 人类逐步选择子任务指令,指导低层策略执行 | 改善高层决策,用于后训练 |
这里有两个容易混淆的地方:
- **高层文本与边界框标注,也可以来自机器人数据。**不能简单归为“无机器人数据”。
- **后训练新增的 VI 是语言指导示范。**不能由此推断普通遥操作数据只用于后训练。
此外,固定机器人虽然运动范围受限,但可以部署到多样的家庭环境中,不能直接等同于“场景简单”。来源:π₀.₅ 论文,第 IV-C、IV-D 节
4.2 为什么不同格式的数据能一起训练?
可以把这些数据组织为不同形式的多模态预测任务:
图像 + 问题 → 文本回答
图像 + 物体名称 → 边界框
场景 + 总体任务 → 下一条子任务
图像 + 状态 + 子任务 → 动作
它们可以共享模型,但不意味着所有数据都必须变成离散整数 token:图像通常编码为连续视觉嵌入,流匹配分支也处理连续动作表示。
五、π₀.₅ 的模型架构
5.1 输入变化:机器人状态进入 VLM
在 π₀ 中,机器人本体状态通过线性投影进入动作专家一侧。
π₀.₅ 则将本体状态离散化为 token,与图像和文本一起输入 VLM。
这使得 VLM 在生成高层子任务时,也能够利用机器人当前状态。
5.2 输出变化:文本、离散动作与连续动作
π₀.₅ 包含两条输出路径:
| 输出路径 | 输出内容 | 用途 |
|---|---|---|
| 自回归路径 | 文本及 FAST 动作 token | 高层子任务预测、离散动作学习 |
| 流匹配路径 | 连续动作块 | 低层动作控制 |
因此,可以这样理解它的设计:
用离散动作表示支持高效训练,用连续动作专家支持快速执行。
5.3 流匹配时间如何注入?
π₀.₅ 使用独立的 MLP 处理流匹配时间,再通过 Adaptive RMSNorm 将时间信息注入动作专家的每一层。
这里的“时间”指生成过程中的流匹配时间,并不是机器人动作序列中的第几个控制时间步。
5.4 注意力如何避免信息泄漏?
不同 token 之间并不是全部互相可见。
| token 类别 | 可以关注的信息 |
|---|---|
| 图像、指令、状态等前缀 | 前缀内部相互可见 |
| FAST 动作 token | 前缀,以及此前的 FAST 动作 token |
| 动作专家中的连续动作表示 | 前缀,以及动作专家内部的动作表示 |
关键限制是:
动作专家不能读取 FAST 动作 token。
否则,它可能从另一种动作表示中直接获得目标信息,形成信息泄漏。
同样,前缀也不能读取待预测的动作答案。因此,准确表述应为“前缀不能看到目标动作”,而不是“预训练不能见到机器人动作”。
六、训练:预训练走 FAST,后训练加入流匹配
6.1 预训练阶段
预训练主要使用自回归的 Next-token Prediction,学习:
- 文本输出;
- 物体位置等结构化输出;
- 高层子任务;
- FAST 编码的离散动作。
因此,预训练阶段已经在学习机器人动作,只是使用离散动作表示。
6.2 后训练阶段
后训练加入连续动作专家和流匹配目标,同时保留离散预测训练。
这一阶段使用经过筛选的成功操作数据,使模型更聚焦于家庭移动操作,并加入语言指导示范来改善高层子任务选择。
七、推理:先决定做什么,再生成怎么做
7.1 高层:预测下一条子任务
模型结合总体指令和四个相机的画面:
- 前向相机;
- 后向相机;
- 左腕相机;
- 右腕相机。
输出当前适合执行的子任务,例如:
“拿起枕头。”
7.2 低层:生成连续动作块
模型结合子任务、机器人状态,以及前向和双腕共三个相机的画面,通过动作专家执行 10 步流匹配迭代,生成包含 50 个时间步的连续动作块。
在 50 Hz 控制频率下,这对应约 1 秒的动作预测范围。
整个过程可以概括为:
总体指令 + 当前场景
↓
高层预测子任务
↓
子任务 + 图像 + 机器人状态
↓
动作专家生成连续动作块
↓
机器人执行并获得新观测
↓
继续控制,并按需更新子任务
这里的高层决策和低层控制由同一个模型体系承担。高层子任务的更新,也不应机械理解为每执行一个动作块就必须重新规划一次。
八、把几项工作的关系串起来
| 工作 | 主要关注的问题 | 核心思路 |
|---|---|---|
| π₀ | 如何让 VLM 学会连续机器人控制? | 引入流匹配动作专家 |
| π₀-FAST | 如何高效学习高频动作序列? | DCT、量化与 BPE 动作编码 |
| Hi Robot | 如何处理复杂指令和执行中的反馈? | 高层 VLM 与低层 VLA 分层协作 |
| π₀.₅ | 如何在陌生家庭中完成多阶段任务? | 异构数据共同训练、高低层统一建模、离散与连续动作结合 |
π₀.₅ 将这些思路结合起来:机器人既要从当前场景中判断下一步应该做什么,也要把子任务转化为连续控制动作。
它展示的进展,是将已有技能迁移到训练中未见过的家庭环境,并将这些技能组织成长任务;模型仍可能在高层判断和具体操作中失败。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)