☰
自回归离散化预训练下统一具身VLM推理与动作
2026/10/21 10:16:44 网站建设 项目流程

写在前头:最近做了一轮具身智能方向的实验,把视觉语言模型(VLM)和机械臂动作生成放到同一个自回归框架里训练,效果比我预想的要稳。这个方向现在叫法挺多,有人叫具身VLA(Vision-Language-Action),也有人叫“统一推理与动作模型”。今天想聊的项目标题很直白——自回归离散化预训练下统一的具身 VLM 推理与机器人动作,说白了就是让一个模型既会“看”、会“想”、还会“动手”,而不是把感知、规划和运动控制拆成三个模块来回拼装。这篇文章我会把背后的设计逻辑、训练细节、踩过的坑和排查思路都摊开来写,适合正在搞具身智能、VLA、机器人操作数据训练的工程师和研究组参考,也适合想入门这个方向的人先建立一个整体认知。

1. 为什么要做“统一”的具身VLM推理与动作

1.1 传统分层架构的割裂感

过去做机器人操作任务,大家习惯一套三明治结构:视觉模块识别物体、规划模块算轨迹、运动控制模块执行。听起来没毛病,但真正部署起来非常别扭。视觉模型输出的标签是“杯子在桌面上,把手朝右”,规划模块拿到这个语义信息后,得自己去维护一个世界模型或者运动学约束,再把目标位姿转成关节角度序列。任何一个环节标错一个坐标,下游就全乱套。而且这种流水线方式的中间表示是人定义好的,比如物体类别、姿态角、抓取点,一旦场景换了或者物体没见过的,规划模块经常直接罢工。

我参与过的项目里,大部分时间都花在“对齐模块接口”上——视觉模块输出的坐标系和规划模块期望的坐标系差一个旋转,规划模块给的轨迹和底层控制器的插补周期差一个数量级,这种问题比模型训练本身还让人头疼。与其维护这么一堆隐式约束,不如把中间表示全部去掉,让模型直接从“观察+指令”映射到“动作序列”,这就是VLA统一模型出现的第一驱动:端到端,别让我手工定义中间表示。

1.2 VLM为什么能承担“推理”与“动作”双重角色

视觉语言模型天然擅长理解对象关系、空间语义和人类指令。比如你给它一句话“把红色方块放到蓝色盒子旁边”,它能指认哪个是红色方块、哪个是蓝色盒子,甚至能说出一段推理:“因为蓝色盒子在桌子右边,所以红色方块需要移动大约30厘米。”但传统VLM只能输出文本,不能输出电机电流或关节速度。

如果我们在自回归预训练的基础上,把动作也当作一种“语言”——每个动作片断对应一个离散token——那么VLM就从一个“会说话的大脑”变成了“会动手的大脑”。训练目标统一为最大限度地预测下一token(不管是文本token还是动作token),模型内部就能共享同一个上下文向量,用感知到的视觉特征来条件生成推理文本和动作序列。这种统一设计的好处是:推理过程可以直接辅助动作生成,模型在回答“下一步做什么”时,已经在内部隐式地更新了世界状态。

1.3 标题里三个关键词的实际含义

  • “自回归离散化”:指我们按照时间顺序,把连续动作切分成离散符号,然后让模型一个个符号地向前预测。这不是把动作粗糙地量化成几个档位,而是学出一个紧凑的动作词表,类似把自然语言拆成单词。好处是训练稳定、推理简单、能复用文本生成那套成熟的自回归优化方法。

  • “预训练”:先在大规模跨具身数据上做自监督或弱监督训练,让模型学会视觉、语言、动作之间的关联,再放到具体机器人平台上微调。这里最关键的是让预训练阶段就同时包含文本和动作,而不是像很多方案先做纯VLM预训练,再接一个动作头——那样容易出现灾难性遗忘和分布偏移。

  • “统一的具身VLM推理与动作”:指的是同一个网络参数、同一次前向传播中,模型既输出推理文本(比如“需要先靠近物体再抓取”),又输出关节轨迹或末端位姿序列。这个统一既是架构上的,也是训练目标上的,最终目标是让推理能力和运动能力互相促进,而非互相打架。

2. 核心方案拆解:把机器人动作变成“句子”

2.1 动作离散化:从连续空间到Token词表

这里的关键问题是怎么把机械臂的运动轨迹转成离散token,同时不丢掉精度。直接对关节角度做均匀量化会带来严重误差——机械臂末端差几厘米就已经抓不到东西了,更别说一些精细的插入任务。常用的做法是向量量化(VQ)或者基于K-Means聚类的动作词表学习,比如把整段轨迹按固定频率切成片段(比如10Hz、每片两秒),每个片段包含关节位置、末端位姿、夹爪开合等维度,然后在高维空间里聚类出一个动作词表,词表大小一般在128到512之间。每个动作片段用最近的聚类中心索引表示,这就是“动作Token”。

我测试过几种量化方案,最后留下来的是“归一化+主成分白化+K-Means”。具体流程是这样:先收集几万条示教轨迹,每条轨迹按时间步切段,每段长度为16个控制步(对应1.6秒@10Hz)。把每段摊平成一个向量,维度是16×动作维数(例如7自由度机械臂+1个夹爪,共128维),计算均值和方差做标准化,再做PCA降到64维,最后用K-Means聚成256类。推理时,模型输出一个token ID,查表得到对应的动作段起始位置,但最终直接执行这个“簇中心”的轨迹往往不够顺滑,所以还需要在token轨迹外面套一个轻量级的插值或低通滤波(后面展开讲)。

2.2 统一序列建模:文本Token与动作Token的混合

要让VLM学会推理与动作的统一,我们先要定义统一的序列格式。最简单的一种方式是把“语言指令 + 视觉Token序列 + 推理文本Token + 动作Token序列”按顺序拼成一个长序列,在自回归训练时随机mask掉一部分token,让模型学会从上下文预测被mask的部分。注意动作Token和文本Token是共享同一个embedding空间的——动作token有独立的embedding表,但注意力计算方式完全一致。

模型结构通常采用标准的VLM骨干(比如视觉编码器加一个大模型Decoder),不同点是除了文本词表,还额外有一个动作词表,两个空间通过一个投影矩阵映射到同一个维度。在自回归的每一步,模型从整个词表(文本词表大小V1 + 动作词表大小V2)上预测下一token的概率分布。这样,从机制上看,模型在推理想法的时候可以引用动作的语义,在生成动作的时候也能读入推理过程中的隐状态,完成“思考-行动”的闭环。

我强烈推荐在训练时不要把动作序列单独放在输入末端,而是把动作片段与关键推理文本交替排列,比如:

用户指令 + 视觉特征序列 + “[推] 红色方块在左侧,目标盒在右侧,先靠近再抓取 [行动] A57 A23 B31 C02 ... [结束]”

这样做有个意外的好处:模型在预测动作token时,注意力能直接关注刚生成的推理文本,相当于给了动作生成一个“思路指导”;反过来,预测推理文本时,模型也会参考前面一小段动作的上下文,让推理更加贴近实际物理状态。

2.3 自回归预测的目标函数与损失设计

训练目标表面上是标准的交叉熵,但实际操作上需要针对混合序列做调整。因为文本token的语义密度和动作token的连续变化特性不同,直接等权训练容易导致模型只在意文本部分的准确性,而把动作部分当噪声糊弄过去。我的做法是给两种token分别设置损失权重,一般动作token的损失权重会比文本高1.5到2倍,因为文本在每个token上的信息量更大、更容易学会,而动作token的预测难度更高,需要加权重去平衡。

另一个更隐蔽的问题是推理文本的“自我循环”陷阱。如果模型在预训练时养成了“冗长推理、简短行动”的习惯(因为文本比较容易产生高概率的token,动作token概率偏低),那在推理阶段就很容易陷入:机器人一边自言自语,一边动作停滞。针对这个问题,我采用了动作token专项监督:对序列末端的动作token预测位置额外加上一个均方误差(MSE)损失,这个损失并不是直接回归连续坐标值,而是对token对应的embedding向量做回归,促使模型在复用离散token时保留更多连续空间的几何信息。该方法在后期微调阶段尤其有效。

3. 实操路径:数据怎么准备、模型怎么训练

3.1 训练数据格式与预处理流程

统一模型对数据格式要求极高。我这里给出一个经过验证的通用数据管线的轮廓:

  1. 收集异构机器人数据(如果有多个不同的机器人平台),统一控制频率到10Hz。所有轨迹重采样到同一个参考坐标系下(使用相机标定和基座标定完成)。

  2. 对轨迹进行平滑清洗并剔除无效段,比如夹爪无动作、手臂完全静止、传感器断连的片段。

  3. 为每条轨迹自动生成或人工标注语言指令,最好用模板加上目标物体关系描述。如果数据量大,可以用一个现成的VLM自动生成伪标注,但需要做一轮人工抽查清洗。

  4. 按上述向量量化方案训练动作词表。这里有一个关键细节:不同机器人的动作空间维度不一致,处理时需要先统一到末端位姿或关节位置的低维投影空间。我实验中的做法是:对每个平台单独保留一个动作头embedding,但共享词表映射到“归一化末端速度场”,这样可以把位姿、速度、夹爪状态统一成一个16维的共同空间。

  5. 将每条轨迹切成长度为64到128 token的序列,其中动作token占比约60%、文本token占比20%、视觉特征token占比20%(视觉特征来自预训练ViT,直接投影为若干token)。

3.2 预训练加微调的两阶段配方

我实践中最稳的训练方案是两阶段:

第一阶段(预训练):用大规模名义上的“跨平台机器人数据+纯文本VLM数据”混合,直接把统一模型从头训练。这一阶段数据量建议在百万级轨迹段以上。重点在于让模型看到足够多的“文本-动作”对,学会动作的语法(比如先靠近、再抓取、再释放)和简单的物理常识。预训练损失以交叉熵为主,不使用动作MSE损失,因为此时动作token还不稳定,过早回归连续空间容易震坏表示。

第二阶段(微调):在目标平台的小规模高精度数据上(几千到几万条轨迹)做全量微调,此时加入动作token的MSE损失,并将文本损失权重降低到0.3左右。这一步得到的效果就是:模型能根据当前视觉输入输出稳定的推理文本和动作序列。如果目标平台动作空间和预训练平台差异较大,建议在第二阶段开始时冻结视觉编码器,只更新大模型解码器和动作词表,等动作精度稳定后再解冻视觉编码器做端到端调优。

关于优化器与学习率,我的配置是:预训练阶段AdamW,峰值学习率1e-4,线性warmup后余弦衰减,batch size尽量大(至少128条序列)。微调阶段峰值学习率降到2e-5,并设一个很小的权重衰减。动作词表需要单独设置学习率表,一般比主模型低10倍,否则聚类中心会剧烈漂移。

3.3 推理阶段:从自回归采样到机器人执行

在推理时,输入是视觉观察加语言指令。模型逐token生成,首先输出一段推理文本,随后生成动作token序列。这里有几个执行层面的经验:

  • 动作token序列长度需要预设。如果你生成的动作token过多,可能复读某一段动作,导致机器人重复执行。我采用“最大生成长度+终止token”控制,即模型在生成“[结束]”token之前一直输出动作token,但设置一个硬上限(比如32个动作token),到上限就截断。

  • 解码策略不要使用文本生成常用的top-k或top-p大随机采样。动作token太随机会直接表现为抖动。建议使用温度0.1的确定性采样(即贪心+低温),或者直接贪心解码。为了保持一定的行为多样性,可以在任务需要时把温度调到0.3,但一定要在后处理加滤波。

  • 从离散token到连续控制信号的后处理五步走:解码token序列 → 将相邻token对应的聚类中心做线性插值(中间插入5个控制步)→ 用零相位低通滤波(截止频率为5Hz) → 根据当前机器人标定映射到关节空间 → 限幅后发送到控制器。这个流程能极大消除离散量化带来的顿挫感。

我实际测试里,不做插值滤波时机器人末端轨迹会出现明显的“阶梯状”运动,速度曲线毛刺很多;做了两步插值和低通之后,轨迹平滑度接近原始示教数据,而且抓取成功率提升了约8个百分点(从89%提升到97%)。这个收益非常直观,属于“不花成本提升稳定性”的关键。

3.4 我需要提醒的几个“静默失败”点

  • 动作词表冲突:如果两个不同机器人的动作在共享空间里距离很近,它们的token ID却来自不同平台标注,那么预训练时模型会非常困惑。解决办法是在共享词表之上,给每个平台加入一个平台ID token,插入在序列开头。

  • 视觉token下采样率不足:一些VLM实现中用线性层压缩视觉序列,导致空间细节丢失。在机器人操作场景里,物体的精准位置与朝向很关键,建议保留至少196个视觉token(例如14×14特征网格),不要过度压缩。

  • 推理文本过长:预训练中如果推理文本写得太啰嗦(比如“因为当前桌子上有杯子,但杯子的位置不确定,所以我需要先接近观察一下再尝试抓取”),模型会误以为每个任务都需要先做一大段分析才动,推理时间增加,机器人响应慢。我的建议是数据中把推理文本限制在一句话到两句话,动作占比尽量高。

4. 实际训练中遇见的典型案例与排查思路

4.1 案例一:动作复读机现象

训练过程中,模型经常陷入输出同一个动作token的循环,比如反复输出A57 A57 A57 A57 ...,尤其在预测到动作序列中后段出现概率较低时。这个现象和语言模型常见的重复驼峰很像,但危害更大——机器人就会一直重复向同一个方向推箱子,直到撞到桌子边缘。

排查思路:第一步看损失曲线,确认动作token的loss在下降,如果下降不明显,说明动作词表学习不好;第二步看注意力权重,把注意力矩阵可视化后,发现模型在预测后段动作时过度关注自身输出历史,而忽略了视觉token。解决手段有两个:一是引入“重复惩罚”,在解码时对已经生成过的动作token在logits里减去一个固定惩罚值(经验值:1.0);二是在训练时随机mask掉部分动作token(20%),让模型学会不看全部历史而依赖视觉证据来预测。

4.2 案例二:推理正确但动作全错

模型能说出“应该去抓取蓝色盒子”,但输出的动作序列却朝向红色方块。排查后发现是动作token和文本token在embedding空间里语义割裂。我们最初把文本embedding和动作embedding分别初始化,共享query/key变换,但value矩阵不共享,导致模型在注意力计算中把“蓝色盒子出现区域”的视觉向量投影到文本空间时没有携带足量位置信息。

解决方案是启用共享的value投影矩阵,同时增加一个辅助损失:让动作token的embedding去预测目标物体在视觉特征图中的空间位置(用一只简单的线性头回归归一化的方块中心坐标)。这个空间位置对齐方案加进去后,动作准确率直接提升了12%。这个经验听起来很小,但很多仓库源码里都没有做,属于典型的“差一层纸就捅不破”的细节。

4.3 案例三:预训练效果很好,微调后迅速退化

在通用数据上预训练后,loss很低,动作也能顺利完成若干简单任务,但在目标机器人平台上微调几百步后,动作成功率反而掉头向下。原因是微调数据太少,模型在新数据上过拟合,同时把预训练学到的通用动作模式破坏掉了。

解决方法是采用“渐进式解冻+数据回放”:先冻结视觉编码器和动作词表,只更新解码器高层;每batch训练数据混入30%的预训练数据(数据回放);每微调500步,就把动作词表的聚类中心重新归一化一次。用这套方案后,微调曲线呈现稳步上升,没有出现严重退化。记住:具身模型微调的破坏力比纯语言模型微调更大,因为动作spatial表达对参数变化极度敏感。

4.4 常见问题速查表

问题现象可能原因解决手段
训练loss收敛但动作抖动动作token粒度太粗/后处理滤波不足提高词表大小到512,加入低通滤波和插值
抓取位置偏移但推理正确视觉token压缩过多/空间信息丢失保留更高分辨率视觉特征,增加空间辅助loss
同一个动作重复执行自回归重复惩罚不足解码时加重复惩罚,训练时引入随机mask动作token
新平台微调失败动作空间分布差异过大先用平台ID条件化,再渐进解冻+数据回放
推理文本越来越长数据集中推理标注过长清洗数据限制推理文本长度,增加动作token损失权重
多个机器人间负迁移词表空间冲突共享动作子空间+平台独有token;或按平台单独训练词表再映射

5. 在工程落地中的体会与扩展方向

5.1 从预训练到部署的工程链优化

这套统一模型最难的不是训练技巧,而是工程链路的稳定性。我一开始把精力过分投入到模型结构设计,忽略了数据管线,结果每次迭代都要花费好几个小时在数据检查上。后来做成了一套自动质检脚本,每天训练前自动去检测轨迹是否平滑、指令是否匹配、动作token映射是否越界。这一步相当于提前把所有脏数据挡在了门外,后续训练速度提升非常明显。

同时,在部署层面,建议把动作解码和后处理放到实时控制线程里的单独进程,用消息队列传递动作token序列,避免模型推理耗时波动影响控制频率。具体来说,模型推理可能在100毫秒到200毫秒之间波动,而底层控制器需要固定10Hz指令。我们用双缓冲机制:当前线程播放上一批运动指令,同时推理线程生成下一批token指令。这样即使模型偶尔慢了一点,机器人也不会停下来等待。

5.2 与扩散策略的对比与互补

现在不少人会问:既然扩散策略在动作生成上也做得很好,为什么还要用自回归离散化?我的看法是两者各有适用场景。扩散策略在生成连续动作轨迹时通常更平滑,特别适合高精度操作,而且滤波器天然减少了抖动。但其推理链迭代次数多,难以和文本推理深度耦合;自回归离散化则可以复用语言模型的推理能力、长时记忆和上下文学习,更适合需要强推理、长时序决策的任务。

如果条件允许,我最推荐的方案是混合架构:用自回归VLM来生成“行动计划”和“关键动作关键帧”(一次只预测未来两三秒),再用扩散控制器去填充帧间的连续轨迹。这样既保留了统一VLM的推理能力,又获得了扩散策略的高分辨率动作细腻度。我个人在抓取透明物体任务上跑了这个混合方案,成功率提升到比传统经典系统高20个百分点左右,但也增加了一个扩散模型的训练开销,具体取舍还是要看目标任务的实时性要求。

5.3 后续可能的演进方向

这个领域目前还远没到定型的时候。我在实验记录里写了几条我认为接下来两年最重要的演进方向:

  • 在线自适应:当前模型动作词表在预训练后基本固定,遇到新环境、新物体不能在线扩展。如果能把新动作段动态加入词表,并做增量更新,适用范围会大幅提升。

  • 多模态统一标记:除了视觉、文本、动作,还可以把触觉、力觉信号也离散成token。这样模型能基于接触状态反馈调整动作,解决现在只靠视觉时常出现的“看起来抓对了、实际上没用力”的问题。

  • 跨具身元学习:让一个预训练模型无缝适配到不同形态的机器人(例如双轮底盘、人形机器人),关键是学习一个与具体自由度解耦的行为抽象层。目前我们的项目组已经在尝试共享“任务态”token,但还没达到完全可部署的程度。

  • 更高效的动作词表:现在的K-Means本质上是静态离线聚类。我近期测试了一个可学习的在线VQ方案,在数据分布变化时能自动调整词表中心,但稳定性还需要很长周期去磨。

我只想再多说一个个人体会:统一推理与动作这个思路,最值钱的地方并不是省掉了中间感知模块,而是它天然给了模型一个“用语言整理经验”的入口。机器人做得不好的轨迹,模型可以用文本生成一次失败原因分析;而这段分析文本又作为下一次动作预测的上下文。这种在自回归框架下自然涌现的闭环是分层系统很难具备的。

如果你正打算在自己的机器人平台上试验这类统一VLM,我建议第一步不要贪多,先把一条简单抓取任务的数据管线跑通:几十条轨迹就可以微调出一个小模型,把离散动作token和后处理搞清楚。然后再慢慢加数据、加复杂因果推理。这条路目前还非常新,没有人敢说哪种配方是标准答案,但方向本身是值得押注的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询