Octo:一个「什么机器人都能接」的通用机器人策略
🎯 为什么重要:通用机器人策略(GRP)卡在「接口僵化」
CV/NLP 早就是「一个预训练大模型 + finetune」的范式。机器人却一直卡着——核心不是模型不够大,而是接口太杂:
更别提最大的模型(如 RT-2-X 55B、RoboCat)都不开源——尽管同族的 RT-1-X(35M)已开源,但仍锁死接口、不能 finetune 到新传感器/动作空间。Octo 想做的就是:开源一个真正能「插件式」适配任意接口的 GRP。
💡 核心思想:一切皆 Token,输入输出即插即用
Octo 把策略重构成「统一的 token 进 → 统一的 token 出」的 Transformer。所有输入(图像、语言、本体感觉、目标图)都被各自的 tokenizer 转成 token 序列;所有输出(动作)通过一个 readout token + action head 解码。换接口 = 换 token,不动主干。
两个让「插座」真正好用的设计细节:
- Block-wise 注意力 mask:观察 token 只能看当前及历史时刻,readout 只能被动读取。这让缺失的输入(比如没有腕部相机的数据集)可以直接全 mask 掉,不需要补零或重新训练。
- Diffusion Action Head:动作用扩散头预测,能表达多模态分布(同一观察可有多解)——论文消融显示它显著优于 MSE 回归和离散动作分类。
🛠️ 训练配方:800k 轨迹 + 25 个数据集
| 组件 | 选择 | 关键理由 |
|---|---|---|
| 预训练数据 | Open X-Embodiment 子集,25 个数据集 / 800k 轨迹 | 当时最大的开源机器人操作数据集;多样性比单一数据集重要 |
| 模型规模 | Octo-Tiny 10M / Small 27M / Base 93M | 对标 ViT 梯队;规模越大 zero-shot 越好(Fig.6) |
| 语言编码器 | t5-base(111M),冻结 | 直接借用现成语义先验 |
| 视觉编码 | 浅 CNN patch + ViT 主干(「transformer-first」) | 消融显示:大数据集上 ViT > ResNet;小数据上反过来 |
| 动作头 | Diffusion(DDPM,K 步去噪,只跑一次主干) | 多模态 + 高精度,>> MSE / 离散 |
| finetune 配方 | 全参数更新,50k 步,cosine decay | 比「冻结部分」更好;同一配方跑所有下游 |
ViT 几乎不假设图像的局部性(patch 之间全靠 attention),所以表达力强但 sample efficiency 差。数据少时学不出 attention 结构,CNN 的「局部 + 平移不变」归纳偏置反而是免费的午餐。Octo 的结论很务实:数据规模到了,再去掉归纳偏置——这也是基础模型领域的通用规律。
📊 结果:开源模型打平 Google 闭源 55B
| 维度 | 数字(论文实验) |
|---|---|
| Zero-shot 跨 9 个机器人平台 | 4 个机构、单臂/双臂、语言/目标图任务 |
| vs RT-1-X(35M,开源 baseline) | 平均成功率高 29% |
| vs RT-2-X(55B 闭源) | 表现相当(Octo 只有 93M 参数) |
| 目标图条件 vs 语言条件 | 目标图高 25%(图像携带的信息比语言更具体) |
| finetune 后(~100 演示)平均成功率 | 72%(vs 训练-from-scratch 20%,VC-1 预训练 15%) |
| 相对下一最好的 finetune baseline | +52% |
| finetune 算力 | Octo-Base 5 小时 / 单卡 A5000(24GB) |
| 支持新接口 | 力-力矩本体感觉(Insertion)、关节位置控制(Pick-Up)、新机器人 embodiment(Coke/Bimanual) |
🌐 在领域中的位置
Octo 是通用机器人策略「开源化 + 接口可插拔」的里程碑。它直接催生了后续一批开源 VLA(OpenVLA、HPT 等),并把「diffusion action head + token 万能接口」确立为 GRP 的标配。关联线索:T06 VLA 谱系。
❓ 常见误区
Octo 是 VLA 吗?
是,但属于「low-level VLA」——它直接输出关节/末端动作,每步推理。它和 LLM-based VLA(RT-2、OpenVLA)的区别在于:Octo 没有内生的大语言模型,只用了 t5-base 编码语言。这让它轻得多(93M vs 7B+),也快得多,但牺牲了复杂推理。
Diffusion head 不会让推理很慢吗?
巧思在于:Transformer 主干只 forward 一次,输出一个 readout embedding;多步去噪完全发生在那个小 diffusion head 里。所以扩散的代价被限制在 head 内,不影响主推理。
800k 算「大」吗?
对机器人来说是当时最大的开源预训练集;但和 CV/NLP 的几十亿样本比还差好几个数量级。论文坦诚:模型在腕部相机(数据中只有 27%)和语言任务(只有 56%)上表现较弱——数据模态覆盖是瓶颈。
「finetune 到新动作空间」具体怎么做的?
替换 action head(比如 delta EE → 关节位置),加入新 head 的参数;主干 transformer 保留预训练权重一起更新。因为 readout token 是抽象嵌入,主干并不知道下游 head 长什么样——这正是「插座」设计的红利。