枢纽
数据集Open X-Embodiment
上真机
实时
输入模态vision,proprioception

VQ-BeT:把「动作」先压缩成「词」,再用 GPT 风格 Transformer 生成

Seungjae Lee, Yibin Wang 等(纽约大学 + 首尔国立大学)。ICML 2024 · arXiv:2403.03181。 项目页 · 代码 · imitationlatent action 线索

🧠 一句话心智模型:人类写字前不会先想好每个像素——大脑先蹦出「词」,再写出来。VQ-BeT 让机器人也这样:把连续动作先压成一组离散「词」(用 Residual VQ-VAE 学一个 codebook),然后让 GPT 风格的 Transformer 像续写作文一样,给一段观察 → 吐下一串「动作词」 → 解码成真实动作。多模态、长时序、推理快——一个架构都搞定。

🎯 为什么重要:连续动作生成里,「扩散」和「Transformer」两条路还没合流

模仿学习里,处理「多模态动作分布」(同一个观察可能对应多个合理动作)有两条主流路:

核心矛盾Diffusion Policy 表达力强但多步去噪慢(10 步起步);Behavior Transformer(BeT) 用 k-means 把动作离散化 + GPT 单步预测,快但粗糙——k-means 在高维/长序列动作上「不收敛、不梯度」,簇数 $k$ 选不好就崩。VQ-BeT 的核心问题是:能不能把扩散的表达力 + Transformer 的速度,用「学习型 codebook」一次拿到?

💡 核心思想:Residual VQ-VAE 把动作切成「粗词 + 细词」

VQ-BeT 把模型拆成两阶段:先训一个 Residual VQ-VAE,把动作 $a_{t:t+n}$(或动作块)压成 $N_q$ 层 codebook 索引;然后训一个 GPT 风格 Transformer,预测这些索引 + 一个连续 offset。

VQ-BeT 两阶段:先学「动作词典」,再学「写作文」 Stage 1:训练 Residual VQ-VAE(无监督) 动作 $a_{t:t+n}$ 编码器 $\phi$ 第1层 VQ 主码(粗) 残差 → 第2层 VQ 副码(细) $z_q(x)=\sum_{i=1}^{N_q} z_q^i$,$N_q=2$ 够用 Stage 2:训练 VQ-BeT(监督) 观察序列 $o_{t-h:t}$ MinGPT Transformer 主码 + 副码预测头 Focal Loss Offset 头 L1 Loss $a=\psi(\sum e_{ij}\cdot\mathbb{I}[\zeta=j])+\text{offset}$ 为什么这个设计 work? · 主码(粗)决定「走哪个模态」(向左抓 / 向右抓)→ 解决多模态 · 副码 + offset(细)补回量化损失 → 保证连续动作精度
图 1:VQ-BeT 两阶段。Stage 1 用 Residual VQ-VAE 学一个「动作词典」(主码粗 + 副码细);Stage 2 冻结 encoder/decoder,只训 GPT Transformer 的 code 预测头(Focal Loss)和 offset 头(L1)。推理时单次前向就能出动作。

🛠️ 四个让「动作 Token 化」真正 work 的关键设计

设计心智为什么必要 / 怎么实现
① Residual VQ(残差量化) 第 1 层 VQ 吃原向量;第 2 层 VQ 吃残差 $x-z_{q1}$,递归 $N_q$ 层 单层 VQ 表达力不够(消融图 5 显示掉点明显);残差形式让 codebook 形成层次聚类:主码=粗粒度模态,副码=细粒度微调。实验中 $N_q=2$ 就够
② 主/副码非等权 Loss 里 $L^{code}=L^{focal}_{i=1}+\beta\cdot L^{focal}_{i>1}$,$\beta$ 加权副码 等权 $\beta=1$ 反而掉点——主码「选模态」的语义比副码「微调」更重要;非等权让模型聚焦多模态决策
③ Offset 头补回量化损失 额外预测一个连续 offset $\zeta_{offset}(o_t)$ 加到解码后的动作中心 纯离散 token 会有量化误差;offset 用 L1 损失监督,把「词的中心」精修到「真值」——保留 VQ 的多模态结构 + 拿回 MSE 级精度
④ 并行预测,非自回归 主码、副码、offset 在 Transformer 输出端并行预测(非 autoregressive) autoregressive 在 sim 任务上反而掉点(虽然真机因果预测略好);并行 = 单次前向 = 比 Diffusion Policy 快 32×(GPU)/ 25×(CPU)
🔮 直觉:为什么不用 k-means,非要用学出来的 codebook?
k-means 是非参数、无梯度的——它对 $\ell_2$ 距离敏感,对高维动作(比如 action chunk 把 16 步 × 7 维 = 112 维拼一起)会陷入「维度灾难」;而且 $k$ 是人工选的,调一次就要重训。Residual VQ-VAE 是参数化的神经网络,codebook 在端到端反向传播中自动调整,能学出「任务真正需要的语义聚类」。这就是 BeT → VQ-BeT 的核心升级。

📊 关键结果:5/7~6/7 sim 任务排第一,真机长程任务比 Diffusion Policy 高 73%

维度数字(来自原文 Table 1-6)
仿真任务覆盖8 个 benchmark:PushT、Image PushT、Kitchen、Image Kitchen、UR3 BlockPush、BlockPush、Multimodal Ant、nuScenes
无条件生成(Tab.2)PushT IoU 0.78(DiffPolicy-T 0.74, BeT 0.39);Multimodal Ant 3.22(DiffPolicy-T 2.90);BlockPush 1.79(BeT 1.67)——7 个任务中 5 个最佳
目标条件生成(Tab.1)7 个任务中 6 个最佳;PushT IoU 0.39(CFG-BESO 0.25, C-BESO 0.30);Kitchen 3.78(C-BESO 3.75)
nuScenes 自动驾驶(Tab.4)L2 误差 0.73(部分信息模型中最低,超过专门为自驾设计的 Agent-Driver 0.74);碰撞率 0.29
真机短任务(Tab.5)5 个单/双阶段任务:VQ-BeT 47/50 vs DiffPol-T 45/50 vs BC 29/50 vs BC-w-Depth 27/50
真机长程任务(Tab.5 下半 + Tab.6)2-4 个连续子任务(30 次试验):VQ-BeT 19/30 vs DiffPol-T 11/30——相对提升 73%,且 DiffPol-T 在 Task 3 末段崩到 2/10(Tab.6 子任务明细)
推理速度RTX A4000 GPU:18.06 ms(DiffPol-T 573.49 ms,32× 提升);4 核 Intel CPU:207.25 ms(DiffPol-T 5243.82 ms,25× 提升
消融(Fig.5)去掉 Residual 层 / 去掉 offset / 等权 $\beta=1$ 都明显掉点;Residual VQ + offset + 非等权是「必需三件套」
关键洞察:VQ-BeT 不是在某个任务上刷新 SOTA——它是在 8 个差异很大的任务上一致接近或超过 Diffusion Policy,同时推理快 25-32 倍。这种「通用 + 快」的组合,让它成为真实机器人(CPU 部署、长程任务)的实用选择。

🌐 在领域中的位置

MLP-BC(单模态回归) BeT / C-BeT(k-means tokenization) VQ-BeT(Residual VQ-VAE tokenization)⭐ Diffusion Policy(去噪生成) π0 / FAST(tokenized 动作 + 大模型)

VQ-BeT 和 Diffusion Policy 是 2023-2024 动作生成的两条平行路:Diffusion 表达力强但慢,VQ-BeT 快且通用。它的「token 化动作」思路后来被 FAST(Flash Attention Tokenizer)π0 继承,成为 VLA 模型的动作头候选方案之一。关联线索:latent action / tokenized policy / 模仿学习。

❓ 常见误区

VQ-BeT 是 RL 还是模仿学习?

模仿学习(行为克隆)。两阶段都是监督学习:Stage 1 用 Residual VQ-VAE 自监督重建动作;Stage 2 用 focal + L1 损益预测 code 和 offset。没有 reward、没有环境交互。

它和 VQ-VAE 的关系是什么?

VQ-VAE 是图像/音频领域的「离散表示学习」经典工具(van den Oord 2017)。VQ-BeT 把 VQ-VAE 搬到动作空间,且升级为 Residual VQ-VAE( cascaded $N_q$ 层),让动作被切成「粗-细」两层词。这正是 NLP 里 BPE(byte-pair encoding)的「字符→词根→词」思路在连续动作上的对应。

为什么「主码粗、副码细」能解决多模态?

主码 codebook 通常很小(实验中各任务 $k\in\{8,10,16\}$,见 Table 13),强制把动作分布切成 $k$ 个「大类」——每类对应一个模态(向左抓 / 向右抓 / 等等)。Transformer 通过 focal loss 学会「在当前观察下选哪一类」。副码再在每类内部做精细调整。这种分层正是离散表示擅长多模态的本质。

32× 加速是怎么算出来的?

Diffusion Policy 推理时需要 K 步去噪(典型 K≈10,DDIM),每步都要过一次完整网络;VQ-BeT 是单次前向:Transformer 出主码+副码+offset,decoder 解一次,结束。论文 Table 7 给出:A4000 GPU 上 VQ-BeT 18.06 ms vs DiffPol-T 573.49 ms(≈32×)。在真机 CPU 部署上这个速度差更关键(5243 ms vs 207 ms ≈ 25×)。注:摘要里 "5×" 指仿真单步对比(Table 3),真机闭环比值更大。