深度⏱ ~2 min
枢纽
⭐ 为何重要

以 ~$20k 同构双臂 leader-follower 系统把 teleop 数据采集成本压到大众可及,配合 ACT(Action Chunking Transformer,一次预测一段动作而非单步,显著缓解 BC 的 compounding error)在精细双臂任务取得 SOTA。它的爆发直接催生 Mobile ALOHA、Vision Pro teleop 等一整条 teleop-as-data-collection 路线,是低成本遥操范式与 action chunking 思想的起点,被 pi0/GR00T 等后续 VLA 普遍继承。

机器人ALOHA 双臂(ViperX + 双指夹爪,~$20k)
数据集ALOHA 双臂 teleop demo
上真机
实时
输入模态vision,proprioception

论文:Zhao, Kumar, Levine, Finn. Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware. RSS 2023, Stanford University. arXiv:2304.13705. 🌐

一句话直觉

让机器人一次记下一长串动作,而不是走一步看一步。动作分块之于机器人模仿,就像速记员之于演讲。它一口气记下一长段,再统一整理。

是什么·为什么

要解决的问题:教双臂机器人学人演示的精细动作(开拉链、装电池、撕胶带)。

老办法神经网络看到画面就输出一个动作。双臂 14 维、又是多解,模型一学就崩。另外便宜的双臂数据采集平台也没有——传统工业臂百万美元起。

新办法(三件事打包):第一,一次并行预测未来 100 步动作,不是走一步看一步。第二,预测前先把"这段动作的意图"压成一个低维向量。再由它生成整段动作。第三,每个时刻都重新预测,把多份重叠预测加权平均。还配一套两万美元的双臂遥操硬件,让人便宜地录演示。

方法核心·意图向量:这是 ACT 最关键的设计。学名叫条件变分自编码器(CVAE)。同一个画面常有多种正确动作。撕胶带时左手先动或右手先动都行。若让网络直接从画面出动作,它会把多种解平均,得到谁也不像的废动作。ACT 的做法是先压一个"意图"向量 z。它只记"这次走哪条解"。整段 100 步动作再由 z 展开。z 维度低,专管挑多解分支;动作生成本身交给网络。训练时 z 学会区分不同解。推理时直接把 z 设成 0,输出就稳定不抖。这一招是为对付"多解"。同期的 Diffusion Policy 解同一类问题用的是"逐步去噪"。ACT 走的是"压一个意图向量"的另一条路。

为什么有用:一次记 100 步大大缩短了决策链,机器人不容易"一步错步步错"。意图向量让模型敢输出"任一种正确解",不被平均。每时刻重预测再加权平均,又把抖动抹平。

类比:动作分块之于机器人,就像速记员之于演讲。不是听一个字写一个字,而是一口气记下一长段再整理。意图向量像速记员先在脑子里定下"这段话的语气",再据此落笔。

怎么做

核心机制·条件变分自编码器策略学一个带隐变量的生成模型。引入一个隐变量 z,把"这次选哪个解"压进一个低维向量。📎 CVAE 就是"带隐变量的条件生成模型"。它和 diffusion 走不同路:用一个 z 隐式建模多模态,而不是迭代去噪。

训练目标:让重建准 + 把隐变量分布拉向标准正态。具体公式见下方深度部分。论文用 L1 作重建损失,KL 项的权重 β 把后验拉向先验。📎 ⚠️ 论文 §IV.C 明确写 L1(不是 L2/MSE)。Algorithm 1 的伪代码框里写成 MSE 是论文自身的不一致;正文叙述和官方代码都用 L1。β 是目标里的权重,论文 Table III 直接列 β=10(官方代码 default 也是 10,两者一致)。

架构:CVAE encoderBERT-style transformer,从 [CLS] token 预测 z 的均值方差。📎 decoder 是 transformer encoder-decoder。4 张 RGB 图过 ResNet-18 编码。decoder 一次并行解码出 100 步 × 14 维双臂关节位置。总参约 80M。

关键设计·推理时确定性:名义上是 CVAE,推理时直接把 z 置为先验均值 0,等价于确定性策略。📎 训练时用 z 吸收多模态。推理时退化成确定性输出。这是 ACT 反直觉的关键。

关键设计·temporal ensemble:每个 timestep 都重新推理一次,多个 chunk 在时间上 overlap。📎 对同一时刻的多份预测按指数权重加权平均(越老的预测权重越高,$w_0$ 最大)。和滑动平均不同——它聚合的是同一时刻的多份预测,因此无偏。

ALOHA 硬件:4 个 ViperX 300 臂(2 个 leader 人操作 + 2 个 follower 同步跟随),约 2 万美元。📎 直接在关节空间记录动作,避免逆运动学误差。follower 能 1:1 复现 leader。

常见误区(先抛一个):"ACT 推理时也采样 z"——错。推理时 z=0,是确定性策略。📎 CVAE 只在训练时用,推理时退化成 transformer decoder 的确定性输出。

深度

精确训练目标(Algorithm 1 原文):📎

$$\mathcal{L}=\underbrace{\text{L1}(\hat a_{t:t+k},\,a_{t:t+k})}_{\mathcal{L}_\text{reconst}}+\beta\,\underbrace{D_{KL}\big(q_\phi(z\mid a_{t:t+k},\bar o_t)\,\big\|\,\mathcal{N}(0,I)\big)}_{\mathcal{L}_\text{reg}}$$

逐项读:$a_{t:t+k}$ 是未来 $k$ 步动作 chunk($k=100$);$\hat a$ 是重建;$\bar o_t$ 是关节位置观测(encoder 故意不看图像);$q_\phi$ 是 encoder 输出的对角高斯后验;$\mathcal{N}(0,I)$ 是先验。L1 项让重建准;KL 项把后验拉向先验,让 z 携带信息少、接近 deterministic。⚠️ Algorithm 1 的伪代码框里把重建项写成 MSE(â, a),这是论文自身的一处不一致;§IV.C 正文原话"we use L1 loss for reconstruction instead of the more common L2 loss",官方代码(tonyzhaozh/act)也用 L1。复现以正文 + 代码为准。📎

β 的作用:$\beta$ 是 KL 项的权重(§IV.B)。论文正文未给具体数值,原话只说"higher β will result in less information transmitted in z"(参考 β-VAE, Higgins 2017)。📎 β 大把 posterior 推向 prior,z 携带信息少——这是 ACT 在多模态不强时性能稳的关键。论文 Table III 直接列 β=10(官方代码 default 也是 10,一致;社区复现经验多在 1–10 区间)。

架构细节(§IV.C + Fig.11;层/维度/β/dropout 等参数论文 Table III(Hyperparameters of ACT)全部列出):📎

  • encoder:输入 $(a_{t:t+k},\bar o_t)$,前置 [CLS] token,序列长度 $k+2=102$。过 transformer encoder 后取 [CLS] 预测 z 的均值/方差。encoder 4 层。encoder 故意不看图像:关节位置本身已隐含任务阶段(开拉链 vs 装电池的关节轨迹差异远大于视觉差异),不看图像反而让 z 聚焦于"选哪条多解分支";省算力只是副效益。
  • decoder:4 张 $480\times640$ RGB 图 → ResNet-18 → 各 $15\times20\times512$ → flatten + 2D sinusoidal PE → $300\times512$ per image → 4 张图 concat 成 $1200\times512$。追加 2 个 token:关节位置(14D→512)+ style variable z(→512)。最终输入 $1202\times512$。decoder 7 层。
  • transformer decoder 用 cross-attention 接 encoder 输出。input sequence 是固定 PE,维度 $k\times512=100\times512$,输出 MLP 下投到 $k\times14$(双臂 14 DoF 绝对关节位置)。feedforward dim 3200,hidden 512,#heads 8。

动作空间:双臂各 7 DoF = 14 维绝对关节位置(不是 delta)。📎 论文实测 delta 性能更差。不是 autoregressive:transformer decoder 一次性并行解码整个 100 步 chunk。

Temporal ensemble 精确公式(Algorithm 2 原文):设 timestep $t$ 的 FIFO buffer 里存了 $n$ 个预测 $A_t[0],\dots,A_t[n-1]$($i=0$ 最老,越新 index 越大)。加权平均输出:📎

$$a_t=\frac{\sum_i w_i\,A_t[i]}{\sum_i w_i},\qquad w_i=\exp(-m\cdot i)$$

$i=0$(最老的预测)权重最大($w_0=\exp(0)=1$);$i$ 越大(越新)权重越小——越老越信。$m$ 控制新观测吸收速度:小→反应快但抖,大→平滑但反应慢。和滑动平均不同——TE 聚合同一 timestep 的多个预测,因此无偏。只在推理时多算几次前向,训练零成本。

消融(数字读自 §VI / Fig.8a 的 scripted demo 曲线):📎

  • chunk size:$k=1$ 成功率 1%;$k=100$ 涨到 44%;$k=200/400$(接近开环)反而下降。$k=100$ 是 sweet spot。
  • CVAE:scripted demo 上没差别;human demo 上去掉 CVAE 成功率从 35.3% 掉到 2%——证明 CVAE 在多模态人类数据上是必要的。
  • temporal ensemble:显著提升 ACT 和 BC-ConvMLP,但对 VINN 反而掉点——不是万能 smoothing trick。

训练规模:80M 参数,单 11G RTX 2080 Ti 训 5 小时,推理 0.01s。📎 优化器用 Adam论文 Table III(Hyperparameters of ACT):lr=1e-5,batch size=8,#encoder layers=4,#decoder layers=7,feedforward dim=3200,hidden dim=512,#heads=8,chunk size=100,β=10,dropout=0.1。📎 官方代码 tonyzhaozh/act default 与 Table III 一致(lr=1e-5/batch=8/β=10/dropout=0.1)。⚠️ 别把 Table IV 当 ACT 超参——Table IV 标题是「Hyperparameters of BYOL, the feature extractor for VINN and BeT」,值是 lr=3e-4、batch size=128、epochs=100、momentum=0.9、weight decay=1.5e-6(momentum/epochs 这种字段 ACT 根本没有),跟 ACT 无关。

局限

  1. CVAE 表达弱:一个 z 维度建模多模态,强多模态任务不如 diffusion。[未确认]
  2. 不跨本体:单臂/双臂固定配置。Mobile ALOHA 加底盘才部分解决。🌐
  3. 无语言理解:后来 ACT + language(BridgeData 风格)/ Mobile ALOHA co-training 才补上。[未确认]
  4. 双臂数据采集仍有成本:AVP 采集(iDP3)、RGB 单目(HumanPlus)进一步压成本。[未确认]

研究者视角

图谱定位:ACT / ALOHA 是 T05 线索的另一半起点——和 Diffusion Policy 前后脚发表(DP arXiv 首发 2023-03,ACT 首发 2023-04,约 7 周;均被 RSS 2023 收录)、解同样两个问题(多模态 + 协变量偏移),但走 CVAE 路线。📎 算法 + 硬件打包,让"精细双臂模仿"从百万美元实验室专属变成社区可复现的范式。

与 Diffusion Policy 的平行收敛:两个独立团队前后脚给出 IL 的"双重创新"——多模态生成 + chunking🌐 一个走 diffusion,一个走 CVAE。这定义了后续 IL 的两条主路线。

ACT vs Diffusion Policy 核心权衡📎

维度ACT (CVAE)Diffusion Policy (DDPM)
多模态建模latent z 隐式高维动作空间显式采样
推理速度单次前向,快50–100 步去噪,慢
表达能力弱(一个 latent 维度)强(迭代去噪)
训练稳定性偶尔不稳
适用场景数据中等、多模态不极端数据稍多、多模态强

经验结论:精细双臂首选 ACT;强多模态任务用 Diffusion Policy。这也是 LeRobot 默认推荐 ACT 上手的原因。[未确认]

最大产业影响是 ALOHA 硬件范式:低成本双臂 teleop 让"精细双臂数据采集"普及。后续 Mobile ALOHA、HumanPlus、甚至 π0 的数据采集都沿用 ALOHA leader-follower 范式。🌐 这比 ACT 算法本身影响更大。

思想回流 VLA:ACT 的"多 token 并行解码 + chunking"后来回流进 VLA。OpenVLA-OFT 把 ACT 的 chunking 塞回离散 token VLA,把 LIBERO 各 split 显著拉升(具体数字见原论文不同 split 差异较大)。🌐

后续演进

  • Mobile ALOHA(2024):加移动底盘,全机身模仿。🌐
  • ACT + language:把语言条件塞进 ACT。
  • OpenVLA-OFT(2025):把 chunking 回流进离散 VLA。🌐

Open problems

  1. CVAE 的表达力瓶颈:单 latent 维度难以刻画强多模态任务(比如多步骤、多路径装配)。能否换更强的生成头而保持推理速度,是开放方向。[未确认]
  2. 跨本体采集:ALOHA 的 leader-follower 范式绑定特定本体。一个跨本体的统一采集接口尚未出现。[未确认]
  3. 长程任务:固定 chunk 100 对需要长视野的任务不够。分层 ACT 是潜在方向。[未确认]

常见误区

"ACT 推理时也采样 z" —— 错。推理时 z 直接置为先验均值 0,等价于确定性策略。📎

CVAE 只在训练时用,推理时退化成 transformer decoder 的确定性输出。

"reconstruction 用 MSE/L2" —— 常见误传(很多人照 Algorithm 1 的伪代码框读成 MSE)。论文 §IV.C 正文原话"we use L1 loss for reconstruction instead of the more common L2 loss",官方代码(tonyzhaozh/act)也用 L1。📎

主模型用 L1。Algorithm 1 框里写 MSE 是论文自身的不一致,别把伪代码框当成主模型的损失。

"β 越大越好" —— 错。β 太大会让 z 失效(信息传不进去),退化为普通 deterministic autoencoder。📎 论文 Table III 给 β=10(官方代码 default 也是 10,一致)。

β 大让 posterior 贴近 prior,多模态建模能力变弱。

"chunk 越长越平滑" —— 错。chunk 太长(接近开环)失去 closed-loop 修正能力,性能反而掉。📎

$k=100$ 是消融甜点。配合 temporal ensemble 才是完整方案。

"ACT 就是 transformer BC" —— 错。少了 CVAE 和 temporal ensemble 这两个核心设计,性能会大幅下降(human demo 上从 35.3% 掉到 2%)。📎

ACT = CVAE + chunking transformer + temporal ensemble,三者缺一不可。

检查点

Q1

ACT 先把"这段动作的意图"压成一个低维向量 z,再由 z 生成整段动作。为什么非要加这一步 z?如果让网络直接从画面出动作,会出什么问题?

💡 参考答案

  • 核心:同一个画面常有多种正确动作(多解/多模态),撕胶带左手先动或右手先动都行。
  • 不加 z 的后果:网络直接从画面回归动作,会把多种正确解平均,得到一个谁也不像的废动作(动作被'平均掉')。
  • z 的作用:z 是个低维'意图'向量,专门负责记'这次走哪条解/哪个分支';整段动作由 z 展开,于是模型敢输出'任一种正确解'而不被平均。z 只挑多解分支,动作生成本身交给网络。
Q2

temporal ensemble 让每个时刻都重新预测、再把多份重叠预测加权平均。这比"只信最新一次预测"好在哪里?又比"一口气执行最早那份长预测"好在哪里?

💡 参考答案

  • 比'只信最新一次':最新一次预测可能偶发抖动/误差;多份重叠预测加权平均能把抖动抹平,更稳。
  • 比'一口气执行最早那份长预测':长预测越往后越容易跑偏(开环、失去边做边修正);每个时刻都重新预测等于不断用最新观测修正,保持 closed-loop。
  • 本质:TE 聚合同一时刻的多份预测取平均,既稳又留修正能力——既不是'只听最新的'也不是'死守最早的'。
Q3

名义上 ACT 有隐变量 z(看起来带随机性),但推理时它的输出却很稳、不抖。这是怎么做到的?

💡 参考答案

  • 核心:推理时直接把 z 设成固定值 0(先验的均值),而不是从分布里随机采样 z。
  • 结果:z 一固定,给定画面的输出就唯一确定,所以输出稳定不抖——等价于确定性策略。
  • 对照:训练时 z 是用来吸收多解的(学'给定 z 走哪条解');推理时退化成取均值,拿走随机性换稳定。
Q4

"一次记 100 步"比"走一步看一步"好在哪?反过来,如果把段长拉到接近"一口气执行完不再看画面",为什么反而会变差?

💡 参考答案

  • 比'走一步看一步'好在哪:一次记一长段大大缩短了决策链,机器人不容易'一步错步步错'(缓解错误累积/协变量偏移)。
  • 段太长为什么变差:段太长就接近开环——一口气执行完不再(或很少)回头看画面修正,一旦中间有微小偏差无法及时纠正,性能反而掉。
  • 结论:chunk 不是越长越好,要配合'每时刻重预测'(receding horizon / temporal ensemble)才有 closed-loop 修正能力。
Q5

ACT 和 Diffusion Policy 都为"多解"而生。一个用"意图向量 z",一个用"逐步去噪"——请用大白话说说这两条路子的根本差别。

💡 参考答案

  • ACT(意图向量 z):先把'走哪条解'压成一个低维向量 z,再由 z 一次性展开整段动作。用一个 z 隐式表达多模态。
  • Diffusion Policy(逐步去噪):从一团噪声出发,一步步迭代去噪、修出一段动作。用迭代过程在动作空间里显式采样多模态。
  • 根本差别:ACT 是'一次解码 + 一个 latent 选分支'(快、单次前向,但表达力受 z 维度限制);DP 是'迭代去噪逐步逼近某种解'(表达力强,但推理慢、要跑多步)。两者是同年解同一类问题的两条主路线。

FAQ

Q1:ACT 推理真的不采样 z 吗?

是的。推理时 z 直接置为先验均值 0,相当于 deterministic decode。📎 训练时用 z 是为了让 decoder 学会"给定 z 输出哪种 mode",推理时取均值就稳。

Q2:为什么 reconstruction 用 L1 而不是 MSE?

论文 §IV.C 明确用 L1(原话"we use L1 loss for reconstruction instead of the more common L2 loss"),官方代码也用 L1。📎 Algorithm 1 伪代码框里写成 MSE 是论文自身的不一致。复现以正文 + 代码为准,别被伪代码框带偏。

Q3:temporal ensemble 的权重 m 怎么选?

论文正文未给 m 具体值,官方代码 default m=0.01。📎 注意权重方向:永远是最老的预测($w_0$)权重最大。$m$ 小→权重趋均匀、新观测吸收快(反应快但抖);$m$ 大→最老的 $w_0$ 主导、新观测几乎被忽略(平滑但反应慢)。

Q4:ALOHA 硬件能不能自己做?

可以。论文 BOM 完全开源,4 个 ViperX 300 臂约 2 万美元。📎 官方代码 tonyzhaozh/act 含硬件清单。LeRobot 的 ACT 实现最易上手。

Q5:ACT 能不能加语言指令?

原版 ACT 不行。后续工作(Mobile ALOHA co-training、ACT + language 等)把语言条件塞进 ACT。[未确认] 想做语言条件操作也可考虑直接用 VLA(OpenVLA-OFT 把 ACT 的 chunking 回流进 VLA)。