vla编码action方法
目前大致可以分成四条路线。
1. RT-2 / OpenVLA:固定离散 Token
RT-2 和 OpenVLA 不直接让模型预测连续的机器人动作值,而是先把动作离散化成有限的“动作编号”,再让语言模型像生成文字 token 一样生成这些动作编号。
假设机械臂某一维动作是连续值:Δx∈[−1,1]
模型先把这个范围划分成 256 个 bin: [−1,1]→{0,1,…,255}
例如: Δx=0.12→bin 143,于是模型不需要直接预测: 0.12,而是预测:143
这个 143 就作为一个 action token。
如果一个机器人动作包含 7 个维度: at=[Δx,Δy,Δz,Δrx,Δry,Δrz,g]
原始连续动作例如: [0.12,−0.31,0.05,0.02,−0.04,0,1]
经过离散化后可能得到:[143,88,134,130,122,128,255]
于是 VLA 的任务就从: (Image,Instruction)→Continuous Action
转换成: (Image,Instruction)→Action Token Sequence
模型生成这些 token 的方式和 LLM 生成文字完全类似。
也就是通过 next-token prediction 一个一个预测动作 token。
推理时,再执行相反过程: 143→bin 143→Δx≈0.12
因此完整流程是:
连续 Action→离散 Bin→Action Token→VLA预测→反量化→连续 Action→机器人执行
这里最关键的是:action token 本身并不天然具有机器人动作含义。
然后再利用大量机器人轨迹数据:(Image,Instruction)→Action Token
训练模型,使其学会:在什么视觉状态和指令下,应该输出哪个 action token。
这种方式最大的优点是简单,可以直接复用 LLM 已有的 tokenizer、Transformer 和自回归 next-token prediction 机制,把“生成语言”和“生成动作”统一成 token generation。
缺点是会产生量化误差,而且 token embedding 并不天然保留真实动作空间中的距离关系。例如两个物理上非常接近的动作可能对应两个不同 token;同时,逐维离散化对动作之间的联合结构和时间连续性建模也比较弱。
2、学习式 Action Tokenizer
学习式 Action Tokenizer 的核心思想是:不再像 RT-2 那样人工把连续动作切成固定 bin,而是让模型自己从大量机器人轨迹中学习“动作模式 → 离散 Token”的映射。
整体流程:
动作轨迹→神经网络学习 Action Embedding→可学习 Codebook→Action Token
同时还能反向解码:
Action Token→Action Decoder→Continuous Action
假设一段机器人动作轨迹为: A=[at,at+1,…,at+H]
首先通过 Action Encoder 得到连续动作表示: z=ϕenc(A)
其中 z 就是学习得到的 Action Embedding,用于表示这段动作的空间和时间特征。
接下来模型维护一个可学习的 Codebook: C={c1,c2,…,cK},
Codebook 不是人工提前定义好的动作字典,而是一组可训练参数,训练开始时进行初始化,之后根据大量机器人动作数据不断更新。这个思想来源于 VQ-VAE,VQ-VLA 等方法将其用于 Action Tokenization。
对于 Encoder 输出的动作表示 z,模型在 Codebook 中寻找距离最近的向量: ck
其中编号: k,就作为一个 Action Token。
例如: 一段“靠近物体→下降→抓取”的动作 经过编码后可能得到: z→c37
于是: Action Token=37
如果某个 Code 无法保留足够的动作信息,就无法正确重建原始动作,模型会继续调整 Encoder、Codebook 和 Decoder。
优点是可以自动学习动作的空间和时间结构,不需要人为规定离散边界;可以对一段 Action Chunk 整体编码,更容易表示抓取、移动、放置等连续运动模式;学习出来的 latent space 通常比固定 256-bin 更符合真实动作分布,也更容易得到平滑、连贯的动作。
缺点是需要额外训练:Encoder+Codebook+Decoder
系统更复杂、训练成本更高;Codebook 可能出现利用率低或 code collapse;学习到的动作词表可能依赖具体机器人和数据分布,跨 embodiment 泛化未必稳定;同时它本质上仍然是离散化,因此仍可能损失部分连续动作信息。
3、FAST:基于压缩的 Action Tokenization
FAST 的核心思想是:不再像 RT-2 那样把每个时刻、每个动作维度分别离散成 Token,而是先对一整段 Action Chunk 做压缩,再把压缩后的动作模式编码成 Token。
基本流程:
Action Chunk→DCT→Quantization→BPE→Action Tokens
假设一段动作轨迹是: [at,at+1,…,at+H]
FAST 先用 DCT(Discrete Cosine Transform)把这段时间序列从“逐时刻动作值”转换成“运动变化模式”: 动作轨迹→[整体趋势,较慢变化,快速变化,… ]
其中: 低频系数=整体运动趋势,高频系数=快速变化和细节
例如一段平滑动作: [0.10,0.12,0.14,0.16,0.18]
主要可以用少量低频信息描述,因此比逐个保存每个动作值更容易压缩。
DCT 后得到的仍然是连续数值,例如: [1.25,0.31,0.05,0.01]
然后做 Quantization,将其变成离散编号: [125,31,5,1]
接着使用 BPE。如果训练数据中某些编号组合经常一起出现,例如: [125,31,5]
BPE 会把它们合并成一个新的 Token: [125,31,5]→tokenA
于是原来需要多个 Token 表示的一段动作模式,现在可以用更少的 Token 表示。
优点是 Token 序列更短,能利用动作的时间连续性和整体运动趋势,更适合高频、灵巧操作,也能降低长序列自回归生成的成本。
缺点是编码与解码流程更复杂,需要 DCT、量化和 BPE;本质上仍然是离散化,因此仍存在量化误差;同时 Token 表示的是“压缩后的运动模式”,不如直接动作值直观。
4、连续 Action Generation
核心思想是:不把机器人动作离散成 Token,而是直接预测连续的动作值。
基本流程:
Image + Instruction→VLA Backbone→Action Head / Action Expert→Continuous Action
例如机器人动作: at=[Δx,Δy,Δz,Δrx,Δry,Δrz,g]
模型直接输出: a^t=[0.12,−0.31,0.05,… ]
而不是: [143,88,134,… ]
代表方法包括 π₀、OpenVLA-OFT 等。它们通常在 VLM 后增加一个专门的 Action Expert,通过连续生成方法(如 Flow Matching)或回归方式预测动作轨迹。
相比 Action Tokenization 方法,Continuous Action Generation 不需要将动作离散化,因此避免了量化误差,并且更符合机器人连续运动的特点,能够生成更加平滑的动作轨迹。
但其缺点是需要额外设计 Action Head/Expert,无法直接复用 LLM 的 next-token prediction 机制;同时连续动作建模更加复杂,训练难度更高。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)