Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

8.3 动作表示与解码(导言)

学习导航

  • 本章主题:8.3 动作表示与解码(导言)
  • 前置知识:建议先完成第 3-7 章对应先修内容。
  • 建议用时:69-89 分钟
  • 阅读顺序:先看概念框架,再看公式/代码,最后做自测。

前面在第 6 章我们已经从“机器人学”的视角讨论过关节空间、末端空间、Delta Pose / Velocity 命令等概念。到了 VLA 模型这一章,我们关心的是另一件事:如何把这些连续的控制量变成“token”,再用 Transformer 一类的大模型去“说出”动作序列

这一节可以理解为“动作的语言学”:

  • 8.3.1 解决“如何把连续动作变成离散 token(tokenization)”;
  • 8.3.2 解决“模型头(decoder head)如何按 token 生成动作”;
  • 8.3.3 讨论多步动作生成时的采样与剪裁;
  • 8.3.4 讨论把离散 token 再变回可执行、平滑、满足约束的轨迹。

8.3.1 动作离散化:tokenization 策略(关节空间 / 末端空间)

从控制角度看,机器人动作通常是连续向量(关节角速度、末端速度等);但从“语言模型”角度看,我们更希望它是有限词表上的离散 token。这一小节讨论如何从连续空间到 token 空间。

【图 8-7 占位:关节空间与末端空间动作离散化示意图。 左:每个关节角度 / 速度被均匀分成若干区间; 右:工作空间中末端位姿被划分为 3D 网格与若干离散朝向。】

8.3.1.1 逐关节离散

逐关节离散(per-joint / per-dimension discretization)是目前最经典、也最容易工程落地的一种方案:

1.确定每个动作维度的取值范围 例如 RT-1 中针对一台移动机械臂,将 7 维末端位姿(x, y, z, roll, pitch, yaw, gripper)、3 维底盘(x, y, yaw)以及一个模式选择变量统统视为动作维度,先在数据中统计它们的取值范围。(谷歌研究) 2.将每个维度量化为固定个数的 bin 常见做法是为每一维设定 128 或 256 个离散区间(bin),每个区间对应一个 token ID。例如 RT-1 采用每维 256 个 bin 的量化,构成统一的“动作词表”,使不同任务、不同机器人共享同一种离散表示。(谷歌研究) 3.量化策略:均匀 vs 分位数 +简单均匀量化:直接按区间长度均分整个范围;实现简单,但如果数据分布高度非均匀,会浪费很多 bin。 +分位数量化:先统计训练数据的分布,只在 [1%, 99%] 这样的高频区间内均匀划分,把极端异常值舍弃或单独处理,这也是不少 VLA 实践中常用的策略。(Research Square) 4.token 序列的结构 对于每一步动作,可以直接把“所有维度的 token 串联起来”视作一段短序列:

\[ a_t = [\text{tok}^{(1)}_t, \text{tok}^{(2)}_t, \dots, \text{tok}^{(D)}_t] \]

其中 \(\displaystyle D\) 是动作维度数。解码器可以选择并行预测所有维度(见 8.3.2.2),也可以把每个维度也放在自回归链上逐个生成(虽然这样通常没必要)。

逐关节离散的优点与不足:

+优点

  • 实现简单,和 LLM 的 token 概念天然对齐。
  • 各维度可独立量化,易于处理高维动作。
  • 对于不同机器人,只要做同样的量化,就能共享一部分“动作语言”。 +不足
  • 默认假设各维度近似独立,无法显式编码“某些组合更常见、更合理”的结构。
  • 多维联合空间仍然是连续的;如果每维都需要高分辨率,bin 数急剧膨胀。
  • 不能直接编码更高级别的语义,比如“沿桌面边缘平行滑动”这种空间模式。

近期的一些工作(如 FAST)开始探索用离散余弦变换(DCT)等压缩方式,把多维动作先映射到频域再量化,在保持精度的同时大幅压缩 token 数量,这类方法在高频、高维度的灵巧操作上很有优势。(arXiv)

8.3.1.2 末端空间离散

和逐关节离散相比,末端空间离散(end-effector space discretization)是在更“几何直观”的空间中划分 token:

1.工作空间网格化

  • 在机器人可达的笛卡尔空间中建立 3D 网格(如 [x, y, z] 坐标的体素 grid),每个网格单元对应一个“粗略位置 token”。
  • 姿态(roll, pitch, yaw)可以单独以球面网格或预定义有限集合(例如若干典型抓取姿态)离散。 2.增量式末端命令 实际控制中更常见的是离散化Delta Pose
  • 例如对 \((x,y,z)\) 的每轴位移离散成 {−2 cm, −1 cm, 0, +1 cm, +2 cm};
  • 姿态变换则离散为若干固定的旋转增量。 这样 token 更像是“方向键”而不是绝对坐标,和 6.3 节中的增量命令思想相呼应。 3.通用性与跨机器人共享 末端空间离散的一个重要优势是比较容易在不同机械臂之间共享:不同机器人在位姿空间具有相似的语义(靠近桌边、朝向物体等),只要 IK 求解器能把末端命令映射到各自关节空间,就可以用同一套动作 token 控制多种形态的机器人。 4.挑战
  • 必须依赖逆运动学(IK)和碰撞检测来保证动作可执行;
  • 网格太粗会降低精度,太细又使词表爆炸;
  • 对于高度冗余机械臂,同一末端 token 会对应大量关节解,可能导致执行时姿态不稳定。

在大规模 VLA 实践中,末端空间离散往往与逐关节离散同时存在:例如用末端增量 token 处理大尺度运动,再用关节级连续控制或更细粒度 token 做微调。

8.3.1.3 经验设计 vs 学习生成

动作离散化有两条路线:经验设计(hand-crafted)学习生成(learned tokenization)

1.经验设计:Uniform / heuristic binning这类方法以 RT-1、RT-2 等工作为代表:

优点是可解释、易调参,不同实验室可以用相似规范复现;缺点是:

  • 人工设定每个维度的范围与 bin 数,通常是“每维 256 bin + 分位数裁剪”之类的规则。(谷歌研究)
  • Grounding Multimodal LLMs in Actions 中称这种方法为“Uniform Action Tokenization”:对每个连续维度进行均匀或分位数切分,再将每一步动作表示成一串 token。(arXiv)
  • 没有利用到数据的结构;
  • 为了兼容各种任务,往往需要牺牲一部分分辨率或压缩率。

2.学习生成:VQ / RVQ / Learned Codebook更近一步,可以把动作 token 看成“代码本(codebook)中的索引”,代码本则通过学习得到。典型思路是训练一个向量量化(VQ)或 VQ-VAE,用来压缩动作序列:(arXiv)

这样,每个 code 就是一个**“典型动作模式” token**,可以同时捕获多维之间的相关性,甚至可以直接在时间维做编码(一个 token = 一个短 action chunk)。

研究表明,基于语义对齐的动作 token 通常比简单回归或均匀量化取得更高的任务成功率。例如,针对 CALVIN 等长时操作基准时,学习到的 tokenization 在成功率上明显优于直接回归和 naive uniform binning。(ResearchGate)

这类方法的代价在于:

  • 编码器:将连续动作或短动作片段映射到一个潜在向量;
  • VQ 模块:在一个离散代码本中找最近的若干 code(或级联 Residual VQ 的多级 code);
  • 解码器:从 code 重构回原始动作。
  • 需要大量轨迹数据来训练 tokenizers(VQ-VLA 使用了比以往工作多两个数量级的合成轨迹数据);(arXiv)
  • tokenizer 本身增加了一层建模误差,需要保证重构精度足够高。

3.实践建议

  • 如果数据规模有限或系统原型阶段,优先考虑简单的逐关节均匀离散,避免在 tokenizer 设计上耗尽精力。
  • 当数据量很大、任务多样或需要长时规划时,可以引入学习型 tokenization(VQ / DCT 压缩等),把“动作词汇”当作一个需要预训练的模块,就像视觉 backbone 和语言 backbone 一样。

8.3.2 动作解码头:自回归解码 vs 并行预测

有了动作 token,还需要一个“解码头”(policy head)将视觉–语言–历史状态的融合表示,转换为下一段动作 token 序列。这里的关键设计是:这些 token 是按顺序一个一个吐出来,还是一次性并行给出?

【图 8-8 占位:三种解码方式对比示意图。 左:自回归解码,按时间和维度逐个 token 生成; 中:并行解码,一次输出整个动作向量 / 短序列; 右:混合解码,先并行给出草案,再通过少量自回归 / diffusion 步骤细化。】

8.3.2.1 自回归解码

**自回归解码(autoregressive decoding)**是最接近传统语言模型的方式:把动作当作“句子”,下一个 token 的概率由“前文上下文 + 已生成的动作 token”共同决定。(Emergent Mind)

1.形式化 设当前时间步的动作序列为 \(a_t = (a_{t,1}, \dots, a_{t,L})\),则自回归模型建模:

\[ p(a_t | \text{obs}, \text{instr}, \text{history}) = \prod_{i=1}^{L} p(a_{t,i} | a_{t,<i}, \text{obs}, \text{instr}, \text{history}) \]

2.优点

  • 能自然表达多峰分布和复杂相关性,例如“如果前两个关节选择了某一组合,后面关节就自适应配合”。
  • 序列长度可以灵活,和语言 token 混在一起训练(如 RT-2 中同时生成文字和动作 token)。(arXiv)
  • 完全沿用 LLM 的训练管线,工程复用度高。 3.缺点
  • 推理延迟高:一个 token 一次前向。对于高频控制(>50 Hz)或长动作 chunk,这会成为关键瓶颈。
  • 错误累积(exposure bias):一旦前面某个 token 掉坑,后面整个序列都会围绕错误展开。
  • 在动作维度不多、依赖结构相对简单时,自回归有点“杀鸡用牛刀”。

因此很多机器人工作采用折中的做法:在时间上自回归,在同一时间步的各维度上并行输出,即一步生成所有关节 / 末端的 token,而不是逐维自回归。

8.3.2.2 并行解码

**并行解码(parallel decoding)**强调在一个前向中直接给出整段动作序列。典型例子包括:

1.Action Chunking Transformer(ACT / MT-ACT) ACT 把一段连续控制序列视为一个“chunk”,用条件 VAE 或 Transformer 一次性生成整段动作,而不是逐步滚动生成。多任务版本 MT-ACT 则结合了多摄像头、语言指令等模态,在 encoder–decoder 结构上一次性吐出多个时间步的动作。(Radek Osmulski)

  • 解码器输入是一组“时间查询向量”,输出是对应时间步的动作;
  • 从解码时看,这是一种时间维度并行解码:所有未来 H 步一起预测。 2.并行固定点解码(Parallel Fixed-Point Decoding) 近期有工作(如 PD-VLA 框架)把原本自回归的解码过程等价重写为一个非线性方程,再用并行迭代的方式求解,使得在不改网络结构的前提下也可以近似并行地预测所有动作 token。(arXiv) 3.离散 diffusion / mask-based refinement “离散 diffusion 到动作解码”的思路是:

这也是一种并行 + 迭代 refinement的解码方式,和图像生成中的 discrete diffusion 完全类似。

  • 从“全噪声”或“全 mask”动作序列开始;
  • 多轮迭代中,每轮并行更新所有 token(或一部分 token),逐渐从噪声收敛到可执行的动作序列。(arXiv)

并行解码的优势在于延迟极低、适合高频控制或长时 chunk;缺点是:

  • 需要专门的训练目标(如重构整个序列),对超长序列时可能不易收敛;
  • 在真正复杂的多步逻辑任务上,有时会暴露出“局部矛盾、不一致”的问题,需要配合后处理或额外约束(见 8.3.4)。

8.3.2.3 混合方式

在语言领域,已经出现大量半自回归(semi-autoregressive)、分组自回归等折中方案;这一思想同样可以迁移到动作生成:(MDPI)

1.分组 / 分层解码

  • 把动作序列分成若干组(例如每组 4 步或每组若干关节),组内并行生成,组间自回归;
  • 或者先生成一个粗分辨率的动作草图(低频、长时间步),再在每个时间插值点上用自回归 / diffusion 小网络做局部精细化。 2.“草稿 + 校对”式解码
  • 第一阶段用并行解码或 diffusion 生成一个候选动作序列;
  • 第二阶段使用一个轻量自回归“校对头”检查并局部修改高风险区域(例如接触发生前后的几步)。 3.chunk 级别自回归 ACT 的一个视角是:在 chunk 级别自回归,在 chunk 内部并行生成。即 policy 不是一步一步走,而是按宏观步骤(chunk)推进,每个 chunk 由专门的解码器一次生成。(Radek Osmulski)

对实际系统而言,“混合方式”最大的价值在于: 同时兼顾决策延迟、序列一致性和网络复用,而且容易和后续的轨迹优化、约束投影(8.3.4)结合。


8.3.3 多步动作生成与剪裁(temperature、top-k 等)

一旦采用类似语言模型的解码方式,就不可避免要面对“如何从分布中采样动作 token”的问题。本节从采样策略、长序列剪裁、以及探索–确定性平衡三个角度展开。

【图 8-9 占位:不同采样策略对 token 分布的影响。 图中展示同一 softmax 分布下:贪心、不同 temperature、top-k、top-p 的选取差异,以及对生成动作轨迹的影响。】

8.3.3.1 取样策略

给定解码器输出的 logits,我们可以有多种采样选择:

1.贪心 / Argmax 解码(Greedy) 直接选取概率最高的 token:

\[ a = \arg\max_i p_i \]

  • 优点:确定性强,行为可复现;
  • 缺点:在多模态任务中容易倾向“平均动作”,比如抓取时输出“介于两个物体之间”的中庸轨迹。 2.温度缩放(Temperature Scaling) 将 logits 除以温度 \(\displaystyle T\):
  • \(T < 1\):分布变尖锐,更接近贪心;
  • \(T > 1\):分布变平滑,增加随机性。 机器人场景中通常选用较低温度(如 0.1–0.5),保留一点探索以避免陷入坏局部解,但不过度随机。 3.Top-k / Nucleus(Top-p)采样 +Top-k:只在概率最高的 k 个 token 中重新归一化再采样; +Top-p(Nucleus):在累积概率达到 p(如 0.8)的一组 token 中采样。 对动作生成来说,这可以防止模型偶尔抽到极不合理的尾部 token,从而减少“抽风动作”。 4.对连续动作的采样 对于使用 diffusion policy 等连续生成方式的模型,其“采样”体现为多步噪声注入 + 梯度更新过程。这类方法往往天然具备多模态输出能力,能够处理高维连续动作空间,在实际机器人操作实验中取得了显著优势。(arXiv)

训练阶段还可以使用“教师强迫 + 抽样”的混合策略:一部分步长用专家动作监督,一部分步长从模型分布中采样,以减轻纯教师强迫带来的分布漂移。

8.3.3.2 长序列剪裁

VLA 模型在决策时通常不会只输出“下一步”,而是生成一个长为 H 的动作序列,类似于 MPC(模型预测控制)中的预测地平线。

1.最大长度限制与 EOS token

  • 在设计动作 token 序列格式时,可以加入类似文本中的 “” 终止符;
  • 同时在训练和推理阶段限定一个最大地平线 H,超过这一步就强制剪裁。 这样可以防止模型在长序列上“自言自语”过久,而不去接受新的感知信息。 2.滑动窗口与 receding horizon 常见做法是:
  • 模型每次出一个 H 长度的序列;
  • 实际只执行其中前 \(h \ll H\) 步;
  • 然后重新观察环境,再由模型生成最新一段序列。 ACT / MT-ACT 一类 action-chunk 模型可以视作这种 receding horizon 策略在“chunk 级”的自然实现。(Radek Osmulski) 3.基于任务阶段的剪裁 对复杂操作可以人为拆成若干阶段(approach / grasp / lift / place 等),每一阶段对应一个较短的动作序列。阶段之间通过语言指令、状态条件或高层 planner 触发切换,从而避免在一次解码中生成特别冗长的序列。

8.3.3.3 平衡探索和确定性

和强化学习中相似,动作生成也需要在“探索多样性”和“执行可靠性”之间平衡:

1.不同场景使用不同解码模式 +离线数据增强 / 仿真探索:可以适当提高温度、用 top-k / top-p 增加多样性,得到多条略有差异的轨迹,用来扩充训练数据。 +真实机器人执行:通常采用低温度甚至纯贪心解码,减少突发异常动作的概率。 2.不确定性感知与自适应采样

  • 可以用输出熵、logits margin 等度量解码不确定性;
  • 在不确定性高时:
    • 生成多个候选序列,再用一个价值函数(例如预测成功率的网络)做重排序;
    • 或者缩短预测地平线,让系统更快地重新观察和 replanning。 3.与安全约束结合 解码自主增加随机性必须和安全层配合:
  • 例如即使模型采样到速度较大的 token,后处理层仍会限幅(见 8.3.4.2);
  • 对高风险动作(接触、快速运动等)可以强制使用确定性解码。

8.3.4 动作后处理:插值、平滑、约束修正

到这里,VLA 模型已经输出了一串“动作 token”。但真实机器人并不能直接执行 token,它需要的是平滑、连续、满足动力学/安全约束的轨迹。本节可以视作“把离散句子翻译成电机指令”的步骤。

【图 8-10 占位:动作后处理整体流程图。 上:模型输出的离散 token 序列; 中:通过插值和平滑生成连续关节 / 末端轨迹; 下:加入关节限位、速度/加速度限幅和碰撞检查后的最终执行轨迹,同时标出执行监控的反馈回路。】

8.3.4.1 插值与平滑

离散 token 通常只对应稀疏时间点上的动作(每 50–100ms 一个),而低层伺服控制需要 1kHz 级别的目标轨迹。因此必须进行插值和平滑处理:

1.线性插值(Piecewise Linear) 最简单的方案是在相邻两个动作之间做线性插值:

\[ a(\tau) = (1-\alpha)a_t + \alpha a_{t+1},\quad \alpha\in[0,1] \]

  • 优点:实现简单、实时性好;
  • 缺点:速度和加速度在关键点存在不连续,可能导致机械结构抖动。 2.多项式 / 样条插值(Cubic Spline, B-Spline) 使用三次样条或 B-spline 可以生成速度和加速度连续的轨迹; 一些最近的动作 tokenization 工作直接把动作表示为 B-spline 控制点的离散编码,在 token 层面就内置平滑轨迹先验,相当于“把平滑性学进 tokenizer 里”。(arXiv) 3.滤波与低通处理 对于关节速度、末端速度等指令,可以在插值后的轨迹上施加:
  • 低通滤波器(如一阶滤波、Butterworth);
  • 或 Savitzky–Golay 平滑滤波,在尽量不扭曲轨迹形状的前提下降噪。 这些操作可以视为在轨迹空间对高频成分限幅,从而避免激发结构共振或电机噪音。

实际系统会根据硬件约束和任务特点选择合适的插值方案:高速、刚性系统更依赖样条和平滑;慢速、柔顺系统可以接受略粗糙的线性插值。

8.3.4.2 约束修正

无论离散化和解码做得多精致,都不能保证输出动作天然满足所有物理和安全约束,因此需要在执行前做一次约束修正(constraint projection / correction)

典型的约束包括:

1.关节限位与软限位

  • 对每个关节设置硬限位(物理极限)和软限位(安全范围);
  • 对插值后的关节角度、速度、加速度进行逐点检查,若超出范围则进行裁剪(clipping)或缩放(scaling)。 2.速度 / 加速度限幅与轨迹重定时
  • 原始轨迹在几何上合理,但速度峰值可能超出驱动能力;
  • 可以通过“时间重缩放”(time scaling)的方法:延长执行时间,使得在任何时刻速度、加速度都不超阈值。 这和传统轨迹规划中的“时间参数化”完全一致,只不过这里的输入轨迹是 VLA 模型给的。 3.碰撞和可达性检查
  • 在末端空间离散;某些 token 对应的末端位姿可能落在障碍物内部或超出可达域;
  • 可在执行前对关键点(尤其是接近目标物体和环境边界的位置)调用快速碰撞检测;
  • 对不可行的动作,可以:
    • 就近投影到安全边界;
    • 或直接标记该 token 无效,重新采样 / 重新解码。 4.与 tokenization 的联动
  • 如果使用学习型 tokenizer(比如 VQ 或采用 B-spline 的 BEAST),可以把“物理可行性”作为重建损失和代码本学习的一部分,使多数 token 本身就对应“好轨迹”;(arXiv)
  • 但在工程上,仍然需要显式的约束层做最后把关,避免“罕见失败”带来严重后果。

8.3.4.3 执行监控

最后,即便轨迹已经过插值和平滑、约束修正,在执行过程中也需要实时监控(execution monitoring),这部分相当于一个“安全监督者”和“现实检验器”。

1.跟踪误差监控

  • 监控关节空间或末端空间的跟踪误差(误差超过阈值说明执行不如预期);
  • 一旦误差持续高企,可以触发:
    • 暂停执行并进入安全姿态;
    • 向高层 VLA 请求重新规划;
    • 切换到传统稳定控制(如一个保守的抓取/放置脚本)。 2.环境结果监控
  • 利用视觉 / 触觉感知检查关键事件是否发生:例如抓取后物体是否真正离开桌面、放置物体是否稳定;
  • 如果检测到“动作没有产生预期效果”(比如物体滑落),可以在语言层反馈(“抓取失败”)并重新发起局部操作。 3.安全监控与急停
  • 监控力矩、电流、关节温度等指标,检测潜在碰撞或机械过载;
  • 一旦检测到异常,优先触发硬件或软件急停,而不是继续执行后续 token;
  • 在具备人机协作场景时,需要配合前面第 10.3 节的安全策略一起设计,形成从高层决策到低层驱动的多重防线。

从系统整体角度来看,本节介绍的动作后处理层可以视为 VLA 模型与传统机器人控制模块之间的“缓冲区”——上游是高维 token 序列,下游是电机电流和力矩指令,中间这一层负责:把“语言式的决策”翻译成“物理上合理、平滑、安全的动作”


本节完成后,读者应该能够从“动作作为 token”到“动作在机器人上真实执行”建立一条完整链路的直觉。在第 9 章中,我们会进一步从训练角度讨论:在有了这些动作表示和解码方式之后,如何设计行为克隆、强化学习、自监督目标,让模型在数据中习得高质量的动作分布。

本章小结与自测

三行小结

  1. 本章是 VLA 架构设计核心:输入、融合、动作解码。
  2. 重点在多模态对齐与条件策略建模。
  3. 学完后应能比较不同 VLA 架构的设计权衡。

检查题

  1. 用你自己的话总结本章最核心的一个公式/机制。
  2. 给出一个“如果要落地到项目里,你会怎么用”的具体例子。

常见误区

  1. 盲目堆模型参数。
  2. 忽略动作空间定义与约束。
  3. 多模态融合后不做可解释性检查。

公式到代码(最小示例)

# 多模态特征拼接最小示例
vision = [0.1, 0.2, 0.3]
language = [0.5, -0.1]
state = [0.0, 1.0]
fusion = vision + language + state
print(fusion)

本章外部参考(集中)

  1. 谷歌研究
  2. Research Square
  3. arXiv
  4. arXiv
  5. arXiv
  6. ResearchGate
  7. Emergent Mind
  8. arXiv
  9. Radek Osmulski
  10. arXiv
  11. arXiv
  12. MDPI
  13. 本章其余链接可在正文中按上下文继续查阅。