下面这一节可以直接作为书稿的主体内容插进去(保留你原有的标题层级)。我会尽量用直观例子把概念讲清,同时避免和前面“任务建模与动作表示”等章节的重复。
8.3 动作表示与解码(导言)
前面在第 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)是目前最经典、也最容易工程落地的一种方案:
-
确定每个动作维度的取值范围 例如 RT-1 中针对一台移动机械臂,将 7 维末端位姿(x, y, z, roll, pitch, yaw, gripper)、3 维底盘(x, y, yaw)以及一个模式选择变量统统视为动作维度,先在数据中统计它们的取值范围。(谷歌研究)
-
将每个维度量化为固定个数的 bin 常见做法是为每一维设定 128 或 256 个离散区间(bin),每个区间对应一个 token ID。例如 RT-1 采用每维 256 个 bin 的量化,构成统一的“动作词表”,使不同任务、不同机器人共享同一种离散表示。(谷歌研究)
-
量化策略:均匀 vs 分位数
- 简单均匀量化:直接按区间长度均分整个范围;实现简单,但如果数据分布高度非均匀,会浪费很多 bin。
- 分位数量化:先统计训练数据的分布,只在 [1%, 99%] 这样的高频区间内均匀划分,把极端异常值舍弃或单独处理,这也是不少 VLA 实践中常用的策略。(Research Square)
-
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:
- 工作空间网格化
- 在机器人可达的笛卡尔空间中建立 3D 网格(如 [x, y, z] 坐标的体素 grid),每个网格单元对应一个“粗略位置 token”。
- 姿态(roll, pitch, yaw)可以单独以球面网格或预定义有限集合(例如若干典型抓取姿态)离散。
- 增量式末端命令
实际控制中更常见的是离散化 Delta Pose:
- 例如对 \((x,y,z)\) 的每轴位移离散成 {−2 cm, −1 cm, 0, +1 cm, +2 cm};
- 姿态变换则离散为若干固定的旋转增量。 这样 token 更像是“方向键”而不是绝对坐标,和 6.3 节中的增量命令思想相呼应。
- 通用性与跨机器人共享 末端空间离散的一个重要优势是比较容易在不同机械臂之间共享:不同机器人在位姿空间具有相似的语义(靠近桌边、朝向物体等),只要 IK 求解器能把末端命令映射到各自关节空间,就可以用同一套动作 token 控制多种形态的机器人。
- 挑战
- 必须依赖逆运动学(IK)和碰撞检测来保证动作可执行;
- 网格太粗会降低精度,太细又使词表爆炸;
- 对于高度冗余机械臂,同一末端 token 会对应大量关节解,可能导致执行时姿态不稳定。
在大规模 VLA 实践中,末端空间离散往往与逐关节离散同时存在:例如用末端增量 token 处理大尺度运动,再用关节级连续控制或更细粒度 token 做微调。
8.3.1.3 经验设计 vs 学习生成
动作离散化有两条路线:经验设计(hand-crafted) 和学习生成(learned tokenization) 。
- 经验设计:Uniform / heuristic binning 这类方法以 RT-1、RT-2 等工作为代表:
优点是可解释、易调参,不同实验室可以用相似规范复现;缺点是:
- 人工设定每个维度的范围与 bin 数,通常是“每维 256 bin + 分位数裁剪”之类的规则。(谷歌研究)
- Grounding Multimodal LLMs in Actions 中称这种方法为“Uniform Action Tokenization”:对每个连续维度进行均匀或分位数切分,再将每一步动作表示成一串 token。(arXiv)
- 没有利用到数据的结构;
- 为了兼容各种任务,往往需要牺牲一部分分辨率或压缩率。
- 学习生成: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 本身增加了一层建模误差,需要保证重构精度足够高。
- 实践建议
- 如果数据规模有限或系统原型阶段,优先考虑简单的逐关节均匀离散,避免在 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)
-
形式化 设当前时间步的动作序列为 \(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}) \]
-
优点
- 能自然表达多峰分布和复杂相关性,例如“如果前两个关节选择了某一组合,后面关节就自适应配合”。
- 序列长度可以灵活,和语言 token 混在一起训练(如 RT-2 中同时生成文字和动作 token)。(arXiv)
- 完全沿用 LLM 的训练管线,工程复用度高。
-
缺点
- 推理延迟高:一个 token 一次前向。对于高频控制(>50 Hz)或长动作 chunk,这会成为关键瓶颈。
- 错误累积(exposure bias):一旦前面某个 token 掉坑,后面整个序列都会围绕错误展开。
- 在动作维度不多、依赖结构相对简单时,自回归有点“杀鸡用牛刀”。
因此很多机器人工作采用折中的做法:在时间上自回归,在同一时间步的各维度上并行输出,即一步生成所有关节 / 末端的 token,而不是逐维自回归。
8.3.2.2 并行解码
并行解码(parallel decoding) 强调在一个前向中直接给出整段动作序列。典型例子包括:
- Action Chunking Transformer(ACT / MT-ACT)
ACT 把一段连续控制序列视为一个“chunk”,用条件 VAE 或 Transformer 一次性生成整段动作,而不是逐步滚动生成。多任务版本 MT-ACT 则结合了多摄像头、语言指令等模态,在 encoder–decoder 结构上一次性吐出多个时间步的动作。(Radek Osmulski)
- 解码器输入是一组“时间查询向量”,输出是对应时间步的动作;
- 从解码时看,这是一种时间维度并行解码:所有未来 H 步一起预测。
- 并行固定点解码(Parallel Fixed-Point Decoding) 近期有工作(如 PD-VLA 框架)把原本自回归的解码过程等价重写为一个非线性方程,再用并行迭代的方式求解,使得在不改网络结构的前提下也可以近似并行地预测所有动作 token。(arXiv)
- 离散 diffusion / mask-based refinement “离散 diffusion 到动作解码”的思路是:
这也是一种并行 + 迭代 refinement 的解码方式,和图像生成中的 discrete diffusion 完全类似。
- 从“全噪声”或“全 mask”动作序列开始;
- 多轮迭代中,每轮并行更新所有 token(或一部分 token),逐渐从噪声收敛到可执行的动作序列。(arXiv)
并行解码的优势在于延迟极低 、适合高频控制或长时 chunk;缺点是:
- 需要专门的训练目标(如重构整个序列),对超长序列时可能不易收敛;
- 在真正复杂的多步逻辑任务上,有时会暴露出“局部矛盾、不一致”的问题,需要配合后处理或额外约束(见 8.3.4)。
8.3.2.3 混合方式
在语言领域,已经出现大量半自回归(semi-autoregressive) 、分组自回归等折中方案;这一思想同样可以迁移到动作生成:(MDPI)
- 分组 / 分层解码
- 把动作序列分成若干组(例如每组 4 步或每组若干关节),组内并行生成,组间自回归;
- 或者先生成一个粗分辨率 的动作草图(低频、长时间步),再在每个时间插值点上用自回归 / diffusion 小网络做局部精细化。
- “草稿 + 校对”式解码
- 第一阶段用并行解码或 diffusion 生成一个候选动作序列;
- 第二阶段使用一个轻量自回归“校对头”检查并局部修改高风险区域(例如接触发生前后的几步)。
- 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,我们可以有多种采样选择:
-
贪心 / Argmax 解码(Greedy) 直接选取概率最高的 token:
\[ a = \arg\max_i p_i \]
- 优点:确定性强,行为可复现;
- 缺点:在多模态任务中容易倾向“平均动作”,比如抓取时输出“介于两个物体之间”的中庸轨迹。
-
温度缩放(Temperature Scaling) 将 logits 除以温度 \(\displaystyle T\):
- \((T < 1)\):分布变尖锐,更接近贪心;
- \((T > 1)\):分布变平滑,增加随机性。 机器人场景中通常选用 较低温度(如 0.1–0.5),保留一点探索以避免陷入坏局部解,但不过度随机。
-
Top-k / Nucleus(Top-p)采样
- Top-k:只在概率最高的 k 个 token 中重新归一化再采样;
- Top-p(Nucleus):在累积概率达到 p(如 0.8)的一组 token 中采样。 对动作生成来说,这可以防止模型偶尔抽到极不合理的尾部 token,从而减少“抽风动作”。
-
对连续动作的采样 对于使用 diffusion policy 等连续生成方式的模型,其“采样”体现为多步噪声注入 + 梯度更新过程 。这类方法往往天然具备多模态输出能力,能够处理高维连续动作空间,在实际机器人操作实验中取得了显著优势。(arXiv)
训练阶段还可以使用“教师强迫 + 抽样”的混合策略:一部分步长用专家动作监督,一部分步长从模型分布中采样,以减轻纯教师强迫带来的分布漂移。
8.3.3.2 长序列剪裁
VLA 模型在决策时通常不会只输出“下一步”,而是生成一个 长为 H 的动作序列,类似于 MPC(模型预测控制)中的预测地平线。
- 最大长度限制与 EOS token
- 在设计动作 token 序列格式时,可以加入类似文本中的 “” 终止符;
- 同时在训练和推理阶段限定一个 最大地平线 H,超过这一步就强制剪裁。 这样可以防止模型在长序列上“自言自语”过久,而不去接受新的感知信息。
- 滑动窗口与 receding horizon
常见做法是:
- 模型每次出一个 H 长度的序列;
- 实际只执行其中前 \(h \ll H\) 步;
- 然后重新观察环境,再由模型生成最新一段序列。 ACT / MT-ACT 一类 action-chunk 模型可以视作这种 receding horizon 策略在“chunk 级”的自然实现。(Radek Osmulski)
- 基于任务阶段的剪裁 对复杂操作可以人为拆成若干阶段(approach / grasp / lift / place 等),每一阶段对应一个较短的动作序列。阶段之间通过语言指令、状态条件或高层 planner 触发切换,从而避免在一次解码中生成特别冗长的序列。
8.3.3.3 平衡探索和确定性
和强化学习中相似,动作生成也需要在“探索多样性”和“** 执行可靠性**”之间平衡:
- 不同场景使用不同解码模式
- 离线数据增强 / 仿真探索:可以适当提高温度、用 top-k / top-p 增加多样性,得到多条略有差异的轨迹,用来扩充训练数据。
- 真实机器人执行:通常采用低温度甚至纯贪心解码,减少突发异常动作的概率。
- 不确定性感知与自适应采样
- 可以用输出熵、logits margin 等度量解码不确定性;
- 在不确定性高时:
- 生成多个候选序列,再用一个价值函数(例如预测成功率的网络)做重排序;
- 或者缩短预测地平线,让系统更快地重新观察和 replanning。
- 与安全约束结合
解码自主增加随机性必须和安全层配合:
- 例如即使模型采样到速度较大的 token,后处理层仍会限幅(见 8.3.4.2);
- 对高风险动作(接触、快速运动等)可以强制使用确定性解码。
8.3.4 动作后处理:插值、平滑、约束修正
到这里,VLA 模型已经输出了一串“动作 token”。但真实机器人并不能直接执行 token,它需要的是平滑、连续、满足动力学/安全约束的轨迹。本节可以视作“把离散句子翻译成电机指令”的步骤。
【图 8-10 占位:动作后处理整体流程图。 上:模型输出的离散 token 序列; 中:通过插值和平滑生成连续关节 / 末端轨迹; 下:加入关节限位、速度/加速度限幅和碰撞检查后的最终执行轨迹,同时标出执行监控的反馈回路。】
8.3.4.1 插值与平滑
离散 token 通常只对应稀疏时间点 上的动作(每 50–100ms 一个),而低层伺服控制需要 1kHz 级别的目标轨迹。因此必须进行插值和平滑处理:
-
线性插值(Piecewise Linear) 最简单的方案是在相邻两个动作之间做线性插值:
\[ a(\tau) = (1-\alpha)a_t + \alpha a_{t+1},\quad \alpha\in[0,1] \]
- 优点:实现简单、实时性好;
- 缺点:速度和加速度在关键点存在不连续,可能导致机械结构抖动。
-
多项式 / 样条插值(Cubic Spline, B-Spline) 使用三次样条或 B-spline 可以生成速度和加速度连续的轨迹; 一些最近的动作 tokenization 工作直接把动作表示为 B-spline 控制点的离散编码,在 token 层面就内置平滑轨迹先验,相当于“把平滑性学进 tokenizer 里”。(arXiv)
-
滤波与低通处理 对于关节速度、末端速度等指令,可以在插值后的轨迹上施加:
- 低通滤波器(如一阶滤波、Butterworth);
- 或 Savitzky–Golay 平滑滤波,在尽量不扭曲轨迹形状的前提下降噪。 这些操作可以视为在轨迹空间对高频成分限幅,从而避免激发结构共振或电机噪音。
实际系统会根据硬件约束和任务特点选择合适的插值方案:高速、刚性系统更依赖样条和平滑;慢速、柔顺系统可以接受略粗糙的线性插值。
8.3.4.2 约束修正
无论离散化和解码做得多精致,都不能保证输出动作天然满足所有物理和安全约束,因此需要在执行前做一次约束修正(constraint projection / correction) 。
典型的约束包括:
- 关节限位与软限位
- 对每个关节设置硬限位(物理极限)和软限位(安全范围);
- 对插值后的关节角度、速度、加速度进行逐点检查,若超出范围则进行裁剪(clipping)或缩放(scaling)。
- 速度 / 加速度限幅与轨迹重定时
- 原始轨迹在几何上合理,但速度峰值可能超出驱动能力;
- 可以通过“时间重缩放”(time scaling)的方法:延长执行时间,使得在任何时刻速度、加速度都不超阈值。 这和传统轨迹规划中的“时间参数化”完全一致,只不过这里的输入轨迹是 VLA 模型给的。
- 碰撞和可达性检查
- 在末端空间离散;某些 token 对应的末端位姿可能落在障碍物内部或超出可达域;
- 可在执行前对关键点(尤其是接近目标物体和环境边界的位置)调用快速碰撞检测;
- 对不可行的动作,可以:
- 就近投影到安全边界;
- 或直接标记该 token 无效,重新采样 / 重新解码。
- 与 tokenization 的联动
- 如果使用学习型 tokenizer(比如 VQ 或采用 B-spline 的 BEAST),可以把“物理可行性”作为重建损失和代码本学习的一部分,使多数 token 本身就对应“好轨迹”;(arXiv)
- 但在工程上,仍然需要显式的约束层做最后把关,避免“罕见失败”带来严重后果。
8.3.4.3 执行监控
最后,即便轨迹已经过插值和平滑、约束修正,在执行过程中也需要实时监控(execution monitoring),这部分相当于一个“安全监督者”和“现实检验器”。
- 跟踪误差监控
- 监控关节空间或末端空间的跟踪误差(误差超过阈值说明执行不如预期);
- 一旦误差持续高企,可以触发:
- 暂停执行并进入安全姿态;
- 向高层 VLA 请求重新规划;
- 切换到传统稳定控制(如一个保守的抓取/放置脚本)。
- 环境结果监控
- 利用视觉 / 触觉感知检查关键事件是否发生:例如抓取后物体是否真正离开桌面、放置物体是否稳定;
- 如果检测到“动作没有产生预期效果”(比如物体滑落),可以在语言层反馈(“抓取失败”)并重新发起局部操作。
- 安全监控与急停
- 监控力矩、电流、关节温度等指标,检测潜在碰撞或机械过载;
- 一旦检测到异常,优先触发硬件或软件急停,而不是继续执行后续 token;
- 在具备人机协作场景时,需要配合前面第 10.3 节的安全策略一起设计,形成从高层决策到低层驱动的多重防线。
从系统整体角度来看,本节介绍的动作后处理层可以视为 VLA 模型与传统机器人控制模块之间的“缓冲区”——上游是高维 token 序列,下游是电机电流和力矩指令,中间这一层负责:把“语言式的决策”翻译成“物理上合理、平滑、安全的动作” 。
本节完成后,读者应该能够从“动作作为 token”到“动作在机器人上真实执行”建立一条完整链路的直觉。在第 9 章中,我们会进一步从训练角度讨论:在有了这些动作表示和解码方式之后,如何设计行为克隆、强化学习、自监督目标,让模型在数据中习得高质量的动作分布。