ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RT-2:视觉语言动作模型如何让机器人学会举一反三

RT-2:视觉语言动作模型如何让机器人学会举一反三

说实话,我第一次看到RT-2这篇论文标题时,第一反应是"又一个把大模型往机器人上硬套的工作"。但等我把它从头到尾读了两遍,又对照RT-1的实验设置仔细捋了一遍之后,才意识到这件事比表面看起来要有意思得多。做机器人操作的人应该都有这种体会:模型在固定场景里跑得再好,换一张背景、换一个没见过的物体颜色,成功率立刻跳水。RT-2这篇论文全名是Vision-Language-Action Models Transfer Web Knowledge to Robotic Control,它的核心野心就是解决这个"换个环境就失灵"的泛化难题——而且它走了一条跟我们习惯的路线完全不同的路:既然机器人的演示数据那么少,不如把互联网上图文的"常识"直接搬过来用。

这篇东西我会从模型思路、架构设计、数据配方、训练部署、实验结果、常见坑这么几个角度来拆,尽量用我能找到的最朴实的语言讲清楚,也会分享一些我实际调研和复现过程中觉得值得注意的细节。适合正在做机器人学习、多模态模型落地,或者单纯对"大模型到底能不能控制机械臂"感兴趣的朋友。

1. 先用一句话说清楚RT-2做了什么

1.1 传统机器人控制为什么总在"换场景"上翻车

传统机器人操作,不管是用运动规划还是模仿学习方法,本质上都在做同一件事:从有限的机器人状态里学一个从状态到动作的映射。这条路的瓶颈很直接——你训练的分布基本决定了能泛化的范围。我见过不少模仿学习项目,在训练时用红色杯子、固定光照、固定桌面纹理,模型成功率能做到95%以上;可一旦把杯子换成蓝色的、桌面换一块桌布、或者把相机角度稍微偏几度,成功率能掉到一半以下。

根本原因是模型缺少对"世界语义"的理解。它看到的是一堆像素,它不知道红色杯子和蓝色杯子是"同一类东西",也不知道"把杯子放到盘子旁边"这句话跟图像里的区域应该怎么对应。

这里的关键词是"语义"。传统控制方法里,语义理解往往是后加的——先做目标检测、再绑一个语言指令模板、最后让规划器去执行。链条一旦拉长,每个环节的误差都会累积,而且对没见过的新表达方式几乎束手无策。

1.2 把动作当成语言的token,是整篇论文最核心的一步

RT-2的做法,说实话是挺"暴力"的:它把一个视觉-语言模型(VLM)直接拿来当机器人控制器。模型输入的是相机画面和文本指令,输出的不是一段描述文字,而是一串"动作token"。这些动作token原本不属于自然语言,是论文自己定义的一组特殊符号,每个token对应机械臂某个维度的量化位置或夹爪的开合状态。

这个设计的妙处在于:既然大模型善于预测"下一个词",那如果我们把动作也表达成"词",那机器人的控制问题就变成大模型最擅长的next-token prediction问题了。模型不需要单独设计一个连续的回归头,不需要为动作单独搭一个策略网络,所有东西都在同一个transformer里,用同一个交叉熵损失训练。

这也是RT-2全名里Vision-Language-Action Models的由来:视觉、语言、动作三者统一到了一个序列建模的框架里。

1.3 和RT-1相比,RT-2到底改了什么

很多人一看到RT-2,以为它就是把RT-1的模型换大一点。实际上差别不是"量"而是"质"。RT-1本身是一个专门为机器人动作设计的Transformer,它只在机器人数据上训练,模型没有见过互联网图片,所以它学到的知识被严格限制在机器人演示数据集内部。RT-1能把见过的任务做得不错,但面对没见过的物体、没听过的语言表达,几乎没有还手之力。

RT-2的底座换成了在大规模图文数据上预训练好的VLM,比如PaLI-X和PaLM-E。这些模型早就"看过"无数张猫、狗、杯子、汽车、电视的图片,知道"可乐罐通常是红色圆筒状物体"、"香蕉是黄色的、弯的"这类常识。RT-2在保留这些知识的同时,把机器人的动作任务作为额外的微调目标重新训练一遍,相当于让一个见多识广的人去学开机械臂,而不是让一个从没出过家门的人从零学起。

与其说RT-2是RT-1的升级版,不如说它开启了一个新的模型家族:VLA(Vision-Language-Action Model)。

2. 模型结构拆解:VLM是怎么被改造成动作模型的

2.1 底座模型:PaLI-X与PaLM-E

论文里用了两个不同的VLM作为底座来做实验,一个是PaLI-X,另一个是PaLM-E。两个模型都是数十亿到上百亿参数级别的多模态大模型,但它们的架构路线略有不同。

PaLI-X走的比较典型的多模态路线,图像编码器负责把图片变成视觉token,然后跟文本token拼在一起送入一个大语言模型。PaLM-E则更强调"具身"这个概念,它直接把机器人状态、图像、文本全部当作token序列的一部分,让大模型统一处理。

RT-2的贡献在于,它在这些VLM的基础上加了一个新东西:动作token。动作token和普通文本token一样,有自己独立的embedding和输出映射,模型训练好之后,当输入序列里出现指令和图像,它就能在输出端生成对应的动作token序列。

这里我多说一句:选择VLM作底座不是随意的。如果直接用一个纯语言模型,模型根本没有视觉感知能力,你让它看图像它只能靠猜;如果用一个没经过互联网预训练的视觉模型,那它又缺乏语义常识。VLM正好两边都占——既懂图像、又懂文本、还背了一肚子世界知识,这三点恰好都是机器人操作泛化所需要的。

2.2 动作token是怎么塞进词表的

这是整个设计里最值得琢磨的部分。机械臂的动作通常是连续值,比如末端执行器的x坐标是0.312米,y坐标是-0.145米,夹爪开合度是1.0。大模型输出的是离散token,怎么把连续动作映射过去?

论文的做法是做量化。它会把每个动作维度的取值范围划分成若干个离散bin,模型预测的是bin的编号,而不是精确的连续数值。比如某个维度的范围是0到1米,如果划分成256个bin,那每个bin大概代表约4毫米的位移。把所有动作维度分别量化之后,每个维度对应一个或多个token,模型逐维输出,最后再反量化回连续值。

这个过程和图像生成里的VQ-VAE有异曲同工之处——把连续信号离散化,从而适配自回归模型的输出空间。代价是精度损失,但是换来的是模型可以在预训练的语义空间里做推理。

还有一点细节值得注意:动作token虽然被加进了词表,但模型仍然要能区分"生成自然语言"和"生成动作"这两种模式。论文的做法是让动作token带有一个特殊的前缀标记,比如输入序列中会出现一个动作起始符,告诉模型接下来要输出的是动作,不是文本。这样模型在推理时就能在合适的时机切换输出空间。

2.3 一次完整的输入输出长什么样

我们举个例子:让机器人执行"把红色杯子放到蓝色盘子里"这个任务。

输入部分包括:

  • 一张或几张来自机械臂相机的图像,图像被切成patch后经过视觉编码器变成视觉token
  • 一段文本指令,被分词器变成文本token,比如"把红色杯子放到蓝色盘子里"
  • 可能还有一小段最近的历史动作序列,帮助模型理解机器人当前的状态

这些token拼接在一起,形成一个很长的序列送入transformer。模型自回归地输出token,前几个token可能是动作起始符,然后是一个个动作维度的量化值。比如:

输入:[图像token] [把] [红色] [杯子] [放] [到] [蓝色] [盘] [子] [里] [动作起始符] 输出:[base_x=42] [base_y=37] [arm_x=120] [arm_y=64] [arm_z=88] [gripper=0] [结束符]

这里每个动作token对应一个离散bin编号。得到这一串token之后,控制程序会把它反量化成具体的动作向量,再下发到底层控制器执行。

这里我发现一件很有意思的事:因为模型是用文本生成的思路在做动作输出,它顺带获得了"多步推理后再动手"的能力。你可以在指令里告诉它"先关掉电源,再取零件",模型理论上会把这两步都编码进动作序列里。

3. 数据配方:网络常识和物理动作怎么混在一起

3.1 机器人演示数据从哪来

RT-2使用的机器人数据主要是RT-1数据集,里面有十多万条真实机械臂演示轨迹,覆盖几百种桌面操作任务,比如抓放物体、打开抽屉、把物体放进碗里、叠毛巾等等。这些轨迹由远程操作员采集,每条轨迹都包含图像序列、文本指令和对应的机械臂动作。

但说实话,十几万条轨迹听起来不少,如果放到互联网图文数据的规模面前,连零头都算不上。一个在大规模图文上预训练过的模型,看到的图文对数量往往是十亿级别的,十几万条演示只是很小的一块补充数据。

这就带出了一个核心矛盾:机器人数据少且贵,网络数据多但跟物理动作没有直接关系。RT-2的解决方法非常务实——两个都要,混在一起训练。

3.2 网络数据解决什么问题

网络图文数据解决的是"语义理解"的问题。比如模型在预训练阶段看过无数张"锤子"的图片,知道锤子通常有一个金属头和木柄,可以在物体被卡住时用来敲击。当机器人任务变成"把钉子钉进木板"时,如果训练数据里没有出现过锤子,模型仍然可能通过语义关联推理出"应该去拿那个像锤子的工具"。

这正是RT-2与其他机器人学习方法最大的不同:它不要求演示数据覆盖所有物体,只要求底座模型在预训练时已经理解这些物体,机器人数据则负责教模型"理解如何把这些常识转化为动作"。

论文里的一组实验非常直观:让机器人执行"把罐子推到标有百事可乐标志的位置",这个任务在演示数据里完全不存在,但RT-2成功完成了,因为它知道百事可乐标志长什么样,并且知道罐子应该被推到标志处。这种能力只能用"知识从网络数据迁移到了动作控制"来解释。

3.3 混合训练的顺序和比例

RT-2没有采用"先预训练VLM、再单独在机器人数据上微调"的两阶段方案,而是把机器人数据和视觉问答、图文理解等任务数据放在一起联合训练。原因是它踩过灾难性遗忘的坑:如果只在机器人数据上微调,模型很快就会忘掉预训练阶段学到的语言和视觉知识,导致它在真实世界的语义理解能力急剧下降。

联合训练时,每个batch里既有机器人任务样本,也有视觉问答样本。模型在同一个优化过程中同时学习两种任务,语言知识被不断复习,机器人任务则负责教它动作输出。这个思路其实很像多任务学习,它的核心就是不让你为了学新技能把老知识全部丢掉。

对于混合比例,论文没有给一个"万能公式",但基本原则是机器人数据占比不能太高,否则语义知识会流失。具体比例往往需要根据机器人任务难度和底座模型的规模反复调整。

4. 训练、推理与部署的实操要点

4.1 训练流程可以分成两个阶段

严格来说,RT-2的训练可以拆成两个大阶段。

第一阶段是VLM的基础训练。PaLI-X和PaLM-E在海量的图文数据上进行预训练,学习图像与文本的对应关系。这个阶段成本极高,普通团队基本没有能力复现,通常是直接加载开源权重或调用已有API。

第二阶段是联合微调。在这个阶段,加载预训练好的VLM权重,加入动作token,把机器人数据和其他视觉语言任务数据混合在一起训练。值得注意的是,动作token的embedding是随机初始化的,模型一开始完全不知道这些token的含义,需要通过机器人数据的梯度信号一步步学到。

所以严格讲,RT-2不是"从零训练了一个动作模型",而是"把一个大VLM改造成了一个能输出动作的VLA"。这也是它能以小博大、用相对较少的机器人数据获得泛化能力的原因。

4.2 推理时如何从token还原成机械臂动作

推理时稍微有点讲究。模型输出的是离散token编号,代码要做的第一件事就是把每个token对应到该维度实际的物理值上。比如模型的输出层预测出"base_x=42",那就要查表,看第42号bin对应的实际位移是多少米,再把这个值传给控制器。

这里有两个细节比较容易踩坑。

第一,反量化后的动作通常是目标位置或者目标速度,不是关节力矩。RT-2是在任务层面给动作目标,底层还得靠一个传统PID或阻抗控制器去执行。换句话说,RT-2是"大脑",底层控制器是"小脑"。

第二,如果模型一次输出多个动作维度,解码时要注意对齐顺序。动作token的顺序必须和训练时完全一致,否则输出的动作可能张冠李戴。我在调研时看到有人把维度顺序搞错,结果机械臂动作完全混乱,折腾了很久才发现是token对应关系写错了。

还有一点,RT-2的自回归推理速度相对较慢。大模型每生成一个token都要过一遍transformer,生成一整个动作序列可能要几百毫秒甚至几秒。对需要高频反馈的精细操作来说,这个速度是不够的。实操中常见做法是降低RT-2的推理频率,比如每秒只推理1到3次,底层控制器在两次推理之间做插值平滑。

4.3 部署环节的速率问题和low-level控制器

实际部署时,RT-2很少直接高频控制机械臂,更多是作为决策层给出阶段性目标,再由一个高速底层控制器来执行。这个分层思路我在很多机器人项目里都用过,它本质上是在"模型智能"和"控制实时性"之间做折中。

你可以把RT-2想成一个"每隔一段时间看一眼全局、给出下一步方向"的指挥官,而底层控制器是那个"每秒执行几百次精确动作"的执行官。指挥官不需要事无巨细地管到每一毫秒,执行官的决策空间很小但响应速度要快。

如果你打算在真机上复现类似的VLA方案,我建议先把底层控制接口写好,确认底层接受的是位置增量还是速度指令,再让模型输出对齐到这个接口上。

4.4 计算资源的大致需求

RT-2论文里的模型规模是几十亿到上百亿参数,训练用的算力一般是几十到几百块TPU或GPU。这个量级对个人开发者来说基本没法完整复现,所以我建议有条件的团队先做"缩小版RT-2"的验证:用一个中等规模的VLM底座,比如7B到13B级别的开源模型,只在部分动作token上做联合微调,在仿真环境里跑通整个流程后,再决定要不要上更大规模。

另外,现在开源社区已经有不少VLA相关的项目和权重,直接拿来在模拟器或者小型真机上做二次开发,比从头训练要划算得多。我这里特别想强调:不要一开始就追求复现论文的完整效果,先把数据管线、动作token编解码、推理链路这三件事跑通,后面换模型底座只是换个backbone的问题。

5. 实验结果:那些能证明"知识真的迁移了"的瞬间

5.1 未见过物体上的泛化

RT-2的评估包含了很多"训练时完全没见过"的物体和任务。比如训练数据里有一堆"移动罐子"的样本,但评估时会换成不同颜色、不同标签的罐子,甚至换成香蕉、苹果这些完全没在机器人演示里出现过的物体。

结果让人印象深刻的不是那些训练过的任务,而是在没见过的任务组合上,RT-2的表现明显比RT-1高出一大截。按论文报告的数据,RT-2在涌现任务上的成功率相比RT-1有接近一倍的提升。RT-1面对没见过的物体组合时基本靠"瞎猜",而RT-2能靠着语义理解猜个八九不离十。

这说明互联网知识确实被转移到了动作决策上。模型看到了一个可乐罐,虽然它从没见过"可乐罐应该被推到这个位置"这样的机器人演示,但它理解"可乐罐是一种饮料容器"、"饮料和标志存在关联"这些常识,所以能推理出正确的动作方向。

5.2 涌现能力不是玄学

RT-2论文里最出圈的其实是那组"emerging capabilities"实验。比如给机器人一个"把橙色物体放到蓝色物体旁边"的指令,但训练数据里根本不存在颜色匹配类任务。模型需要自己在图像里识别出哪个是橙色、哪个是蓝色,然后生成对应的动作序列。

这种能力在经典模仿学习里几乎不可能出现。传统方法需要你预先定义好"颜色"这个属性,再单独训练一个颜色分类器。但RT-2不需要,因为底座VLM在预训练阶段早就学会了颜色和物体之间的对应关系。

另一个很典型的例子是多语言指令。模型能听懂英文、中文甚至混合语言的指令去执行同一类任务,这在单语种机器人数据集上是学不出来的,只能来自预训练阶段的语言知识。

我读论文时最大的感受是:所谓"涌现能力",说白了就是底座模型本来就会的东西,只不过换了一个输出通道,从"说"变成了"做"。

5.3 和基线方法的对比怎么看

看实验结果的时候有一点要特别小心:RT-2在"已见任务"上的成功率不一定会比专门训练的RT-1高。这是正常的。RT-1只在机器人数据上训练,任务模式高度专一,在"背题"这件事上自然更擅长;RT-2要同时兼顾多个任务和语义理解,相当于一个全科生去跟单科生比单科成绩,被反超并不奇怪。

所以评估VLA模型时不能只看"见过的任务",一定要看"没见过的任务组合"和"语义理解类任务"。这才是这类模型存在的意义。

如果把RT-1比作一个练熟了固定套路的人,那RT-2就是一个读过很多书、能举一反三的人。前者在熟悉的流程里又快又准,后者面对新情况时的处理能力明显更强。做机器人落地时,你要根据场景需求去权衡这两者。

6. 我觉得最值得注意的坑

6.1 灾难性遗忘,远比想象中常见

很多人以为用VLM底座再微调一下机器人任务就完事了,结果训练到后面发现模型在机器人任务上表现还行,但在原本的视觉问答上彻底崩了。这就是灾难性遗忘。

RT-2用联合训练缓解了这个问题,但并没有完全消除。实操中如果只给机器人数据、不混其他任务,模型多训几个epoch之后语言能力依然会退化。我见过一些开源复现项目在机器人任务上效果不错,但一问到开放词汇指令就答非所问,多半就是遗忘问题没处理好。

解决思路是跟论文一样做混合batch,并在训练过程中定期抽几个"旧任务"样本做验证。一旦发现旧能力下降明显,就要降低机器人数据的采样比重。

6.2 离散化带来的动作精度问题

动作token化虽然让模型输出变得简单,但也牺牲了精度。划分bin的粒度直接决定了动作分辨率。bin太多,输出类别数太大,分类任务变难;bin太少,动作精度不够,机械臂很难做精细插入这类任务。

如果做的是拧螺丝、插拔连接器这类高精度操作,纯离散token的方式会非常吃力。一个可行的折中方案是"两阶段输出":先用RT-2类模型预测一个粗略目标,再用一个连续回归的小模型或传统控制器做精细修正。这也是很多落地项目实际采用的做法。

6.3 模拟器里一切正常,真机上却翻车

我见过不少项目在仿真环境里VLA模型跑得很顺,一上真机就各种问题。原因主要有三个:一是仿真图像分布和真实相机图像分布差异太大;二是真机的执行延迟导致动作token解码后"过期";三是底层控制器的响应特性没有建模进训练数据。

解决第一个问题,最好在采集真机数据之前先做相机标定和图像预处理,让输入分布尽量接近训练分布。解决第二个问题,可以把模型推理时间考虑进控制循环里,提前补偿延迟。解决第三个问题,最简单的方法是让底层控制器在训练阶段就固定下来,推理时不要随意换控制器参数。

6.4 复现RT-2时最容易忽略的细节

最后分享几个我在调研复现过程中最容易忽略的小细节。

第一,动作token的词表不能乱扩容。如果加进去的token数量太多,模型在预训练阶段学到的输出分布会被大幅干扰,初期训练会非常不稳定。

第二,图像的分辨率和输入方式必须和底座模型的要求一致。很多VLM有自己固定的图像预处理流程,你如果直接resize到别的尺寸,视觉token的信息量会发生不可预期的变化。

第三,历史动作序列的编码方式要统一。RT-2在部分设置里会利用动作历史来稳定输出,历史序列的格式一旦和训练时不符,模型会非常困惑。

第四,也是最重要的:训练时如果发现loss不降,先别急着调模型结构,回头检查动作token和目标token对不对齐。这类问题通常不是模型学不会,而是数据管线的编码错误。

真要说我对RT-2最大的感受,倒不是它的模型设计有多精巧,而是它重新定义了"机器人数据"和"互联网知识"的关系。以前我们觉得,让机器人学会一个新技能,就必须采集这个技能对应的演示数据;但RT-2证明了一件事——只要底座模型理解世界,少量机器人数据只需要充当"翻译官",把理解翻译成动作。

如果你现在准备入门VLA方向,我建议先从复现动作token的编解码和联合训练这两块入手,不要一上来就冲大模型。先把数据管线吃透,再谈模型效果,这个顺序能帮你省掉大量冤枉时间。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进