CogACT:把「认知」和「动作」分开——给 VLM 配一个 DiT「运动皮层」
🎯 为什么重要:「直接复用 VLM 做动作」是有原罪的
大 VLA 的卖点:用互联网预训练的 VLM 当骨干,自带视觉语义泛化。但实际把 VLM 接到机器人上时,主流做法很粗暴:
| 旧做法 | 具体操作 | 问题 |
|---|---|---|
| 动作量化(RT-2, OpenVLA) | 把 7D 连续动作离散成 bin,当成下一个 token 让 VLM 自回归预测 | 不像图像/音频有专门 tokenizer,动作的「简单量化」丢精度、损失信息;自回归单步预测 |
| 回归头(RoboFlamingo + LSTM) | VLM 输出过 LSTM/MSE 回归出动作 | 忽略动作的多模态性——同一观察下可能有多种合理动作,回归会平均成四不像 |
| 小 diffusion 头(Octo) | transformer 骨干 + 3M 参数的微型 diffusion head | head 太小,学不到精确动作分布;且没用上 VLM 的互联网预训练 |
CogACT 的破法:把认知和动作彻底解耦。VLM 专注认知(看图、懂指令、推理),把它的输出当条件,送给一个专门的 diffusion transformer 去生成动作。这个动作模块可以是「大」的——最大 308M 参数(虽然跟 VLM 的 7B 比小,但对 7D 动作空间已经很大了)。
💡 核心思想:组件化三件套——视觉、语言、动作各司其职
三个互相支撑的设计:
① Cognition token 当桥梁——LLaMA-2 处理「视觉 token + 语言 token + 一个可学习的 [cognition] token」,最后这个 token 对应的输出特征 $f_c$ 编码了「当前该做什么动作」的语义,作为 DiT 的条件。
② DiT 多步动作扩散——输入 $f_c$ + 噪声动作 chunk $(a_t^i, ..., a_{t+N}^i)$,预测噪声;多步(N=15)一起预测保证时序一致。不是单步回归,而是真正建模动作分布。
③ Adaptive Action Ensemble——推理时,当前观察和过去 K 个观察都为「当前时刻 t」生成过预测。AAE 按余弦相似度自适应加权:$\hat a_t = \sum_k w_k \cdot a_t|o_{t-k}$,$w_k = \exp(\alpha\langle a_t|o_t, a_t|o_{t-k}\rangle)$。避免「把不同模态的动作硬平均成四不像」。
🛠️ 怎么做:组件 + 训练 + 推理三件套
| 组件 | 设计 | 关键决定 |
|---|---|---|
| 视觉编码 | DINOv2 + SigLIP 双流;特征图通道维拼接 → 线性投影 → 256 个视觉 token | 两条路径互补:DINOv2 强自监督特征 + SigLIP 强语义对齐 |
| 语言模块 | Prismatic VLM(LLaMA-2 + DINOv2/SigLIP,7B);端接 cognition token | 从 OpenVLA 同源预训练权重初始化 |
| 动作 DiT | DiT-Small(13M)/ Base(89M)/ Large(308M);context 长度 N+2=17 | $f_c$ 与噪声动作共同作为输入 token 拼接送入 transformer(自注意力实现条件化);扩散步 i 加正弦位置编码到 $f_c$ |
| 训练目标 | 标准 diffusion MSE:$L=\mathbb{E}\|\hat\epsilon_i - \epsilon\|^2$;视觉+语言+动作端到端训练 | 不是冻结 VLM,而是三件套一起 fine-tune |
| 训练数据 | OXE 数据集 25 个子集(22.5M 帧);不用 Language Table / DROID(分布差异大) | 跟 Octo / OpenVLA 用几乎相同的子集,确保公平对比 |
| 训练规模 | batch 256,8 diffusion steps,LR 2e-5,135k iter,16×A100,5 天,PyTorch FSDP | 8 步扩散(训练时)+ DDIM 10 步(推理) |
| 推理 | DDIM 10 步采样 + classifier-free guidance(CFG=1.5)+ AAE 时序融合 | CFG 1.5 在 1.0 和 3.0 之间取得最好折中 |
| AAE 窗口 K | 自适应:$K \times \text{std}(a)$ 跨数据集保持恒定(C=0.2) | 不同机器人/控制频率下「窗口跨度」一致,需要时变 K |
三个原因叠加:(1) 多模态动作——同一观察下可以有多种合理轨迹,扩散天然能建模分布,回归会平均;(2) 多步时序——预测未来 15 步而不是 1 步,模型被迫学「这一步对未来的影响」,时序一致;(3) 专门容量——308M 给到 7D 动作空间,相当于「每个自由度 4千万参数」,足够精细。论文消融:DiT-Large 比 MLP(3 层)多 14 个百分点(64.8% vs 50.6%)。
📊 结果:超越 OpenVLA +35%(仿真)/ +55%(真机);超 RT-2-X 55B +18%
仿真(SIMPLER,Google Robot / WidowX)
| 方法 | GR Visual Match | GR Variant Agg. | WidowX VM | 说明 |
|---|---|---|---|---|
| RT-1(仅 GR 训练) | 52.4 | 43.7 | — | 基线 |
| RT-1-X | 42.4 | 30.2 | 1.1 | OXE 训练 |
| RT-2-X(55B) | 46.3 | 54.4 | — | 大模型但量化动作 |
| Octo-Base | 11.0 | 1.2 | 17.5 | 3M 小 diffusion head |
| OpenVLA(7B) | 34.3 | 39.3 | 4.2 | 同 size 主竞品 |
| CogACT(7.6B) | 74.8 | 61.3 | 51.3 | 全面碾压 |
真机(Realman Robot,3 任务 / 多物体)
| 方法 | Pick(avg 3 obj) | Stack(avg 2 obj) | Place(avg 2 步) | 总平均 |
|---|---|---|---|---|
| Octo-Base | 8.3 | 0.0 | 6.3 | 4.9 |
| OpenVLA | 8.3 | 15.6 | 12.5 | 12.1 |
| CogACT | 70.8 | 82.3 | 60.4 | 71.2 |
真机泛化(Realman,未见场景)
| 泛化维度 | OpenVLA | CogACT |
|---|---|---|
| 未见桌子 + 未见干扰物 | 9.7 | 58.4 |
| 未见颜色 / 形状 / 类别 | 6.3 | 64.6 |
| Franka 机器人(Close/Open Oven, Pick Bowl/Brush) | 6.8 | 61.4 |
消融研究
| 维度 | 对比 | 结论 |
|---|---|---|
| 动作模块架构 | MLP-3L(50.6%)→ MLP-7L(52.5%)→ DiT-Small(58.5%)→ DiT-Base(62.5%)→ DiT-Large(64.8%) | 同等参数下 Transformer 显著优于 MLP;log(参数) 与成功率近似线性 |
| 多步预测 N | N=0(42.8%)/ N=3(55.5%)/ N=15(62.5%) / N=31(51.2%) | N=15 最优;太短欠规划,太长过拟合 |
| 推理融合策略 | Action Chunking(50.7%)/ Temporal Ensemble(58.9%)/ Adaptive Ensemble(62.5%) | 相似度加权避免跨模态平均 |
| CFG scale | 1.0(55.7%)/ 1.5(62.5%) / 3.0(62.7%) | CFG 1.5 已基本饱和,3.0 增益甚微 |
| 核心数字 | 提升 |
|---|---|
| vs OpenVLA(7B,size 相当) | 仿真 +35%、真机 +55% |
| vs RT-2-X(55B) | 仿真 +18% 绝对 |
| 真机未见场景 | vs OpenVLA:未见桌+干扰物 +48.7、未见颜色/形状 +58.3 |
| 跨本体(Franka) | 4 任务平均 61.4%(OpenVLA 6.8%) |
🌐 在领域中的位置
CogACT 是VLA 「组件化」路线的代表作。它把「VLM 当认知骨干 + 扩散当动作头」这个范式做扎实、做完整,并给出明确的规模曲线(log-size 线性)。这之后,π0、LAP、Cosmos 3 都继承了「专门动作头」这一思路——只是动作头换成了 flow matching。关联线索:与 Diffusion Policy(扩散做动作的鼻祖)、Octo(小型 diffusion head)形成对照。
❓ 常见误区
把 VLM 接上 diffusion head 听起来不复杂,为什么以前没人这样做?
其实有——Octo 就接了 diffusion head,但只有 3M 参数,太小。CogACT 的关键洞察是「动作头也要够大」。论文规模实验:DiT-Large(308M)比 MLP-3L(3M,类似 Octo)多 14 个百分点。原因是「连续、多模、时间相关、高精度」这四件事要同时建模,需要真正的容量。Octo 的 head 只能学到粗糙分布。
308M 相比 7B VLM 还是太小啊,怎么够?
论文 §1 脚注直接讨论了这点:7D 动作空间相比语言(词表 32000+)、图像(H×W×3)维度极低。给 7D 配 308M 参数,相当于「每维 4千万参数」,密度其实非常高。所以这个「小」是相对的——相对 VLM 小,相对动作任务的内在维度已经很大。这也是论文 favorable scaling 的来源。
Adaptive Action Ensemble 看起来很简单,真的有用吗?
实测有用。对比 ACT 原文的 Temporal Ensemble,AAE 在 GR-VM 上从 75.0% 变为 74.8%(基本持平),但 GR-VA 上从 59.9% 提升到 61.3%,WR-VM 从 41.9% 提升到 51.3%(多 9.4 个点)。直觉:动作可以属于不同模态,硬平均会落入「模态之间」的无效动作;按相似度加权,只融合相似预测,避免跨模态污染。公式只多了个 $\exp(\alpha\langle\cdot,\cdot\rangle)$,极简但有效。
N=15 步是不是太多了?真机控制频率跟得上吗?
15 步是训练时的预测步数(学一个动作 chunk),不是「执行 15 步才重新规划」。推理时每帧都会重新预测,AAE 把当前预测和历史预测融合。这个设计与 ACT、Diffusion Policy 的 receding horizon 一致。消融显示 N=15 是甜点:N=3 太短(55.5%),N=31 反而过拟合(51.2%)。
「组件化」跟端到端有矛盾吗?还是端到端训练的?
是端到端训练的——视觉、语言、动作三个模块的参数一起更新。组件化是指架构分工(每个模块有专门职责),不是「冻结分别训练」。论文明确说三个模块端到端 finetune。这种「架构上解耦、训练上联合」是现在的常见模式,参考 π0.5 的「knowledge insulation」、LAP 的「VLM + action expert 联合训练」。
CogACT 跟 π0 / LAP 比,谁的动作头设计更好?
CogACT 用 diffusion(DDPM 范式),π0/LAP 用 flow matching(更线性、推理快)。后者是更新一代。但 CogACT 的核心贡献不在「diffusion vs flow」,而在「把动作头做大、做专门」这一架构选择——这个选择被后续所有工作继承。可以把它看作「扩散动作头路线」的奠基之作。