Q1:ACT 推理真的不采样 z 吗?
是的。推理时 z 直接置为先验均值 0,相当于 deterministic decode。📎 训练时用 z 是为了让 decoder 学会"给定 z 输出哪种 mode",推理时取均值就稳。
论文: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 encoder 是 BERT-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)全部列出):📎
动作空间:双臂各 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 曲线):📎
训练规模: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 无关。
局限:
图谱定位: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 差异较大)。🌐
后续演进:
Open problems:
"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,三者缺一不可。
ACT 先把"这段动作的意图"压成一个低维向量 z,再由 z 生成整段动作。为什么非要加这一步 z?如果让网络直接从画面出动作,会出什么问题?
💡 参考答案
temporal ensemble 让每个时刻都重新预测、再把多份重叠预测加权平均。这比"只信最新一次预测"好在哪里?又比"一口气执行最早那份长预测"好在哪里?
💡 参考答案
名义上 ACT 有隐变量 z(看起来带随机性),但推理时它的输出却很稳、不抖。这是怎么做到的?
💡 参考答案
"一次记 100 步"比"走一步看一步"好在哪?反过来,如果把段长拉到接近"一口气执行完不再看画面",为什么反而会变差?
💡 参考答案
ACT 和 Diffusion Policy 都为"多解"而生。一个用"意图向量 z",一个用"逐步去噪"——请用大白话说说这两条路子的根本差别。
💡 参考答案
是的。推理时 z 直接置为先验均值 0,相当于 deterministic decode。📎 训练时用 z 是为了让 decoder 学会"给定 z 输出哪种 mode",推理时取均值就稳。
论文 §IV.C 明确用 L1(原话"we use L1 loss for reconstruction instead of the more common L2 loss"),官方代码也用 L1。📎 Algorithm 1 伪代码框里写成 MSE 是论文自身的不一致。复现以正文 + 代码为准,别被伪代码框带偏。
论文正文未给 m 具体值,官方代码 default m=0.01。📎 注意权重方向:永远是最老的预测($w_0$)权重最大。$m$ 小→权重趋均匀、新观测吸收快(反应快但抖);$m$ 大→最老的 $w_0$ 主导、新观测几乎被忽略(平滑但反应慢)。
可以。论文 BOM 完全开源,4 个 ViperX 300 臂约 2 万美元。📎 官方代码 tonyzhaozh/act 含硬件清单。LeRobot 的 ACT 实现最易上手。
原版 ACT 不行。后续工作(Mobile ALOHA co-training、ACT + language 等)把语言条件塞进 ACT。[未确认] 想做语言条件操作也可考虑直接用 VLA(OpenVLA-OFT 把 ACT 的 chunking 回流进 VLA)。