1. 先对齐概念:RT-2到底做了什么,解决了哪个老问题
1.1 机器人学习的老问题:数据太贵,场景太窄
我搞机器人模仿学习这几年,最头大的问题永远是同一个:模型在训练环境里像个战神,换到新场景就彻底失灵。换个颜色、换个摆放角度、换个背景,成功率直接腰斩再腰斩。原因大家都清楚,机器人数据太金贵了,一个熟练的遥操作员一天也采不了几百条演示,而深度学习偏偏是"数据越多越勇"的物种。一条真实机械臂轨迹,要人工遥控、清洗、标注、对齐时间戳,成本比互联网上随手一张图片高几个数量级。所以业界一直存在一个死结——想泛化就得海量数据,海量数据又贵得离谱。
RT-2这篇论文(Vision-Language-Action Models: Transfer Web Knowledge to Robotic Control)给出的思路很直接:模型不一定要在机器人数据里长大,可以让它先在互联网图文数据里接受通识教育,再到机器人数据里'实习',最后直接上岗操控机械臂。核心做法是把机械臂动作改写成语言模型能读懂的"词",让一个海量Web知识预训练出来的视觉语言大模型,在微调阶段顺手学会输出这些'动作词'。这样一来,互联网上那些"杯子是用来喝水的""石头比纸重""香蕉是黄色的"之类常识,就成了机器人决策的背景知识。
1.2 RT-2的答案:让模型用"互联网常识"来操作机械臂
RT-2 全称是 Vision-Language-Action Models,翻译过来就是"视觉-语言-动作模型"。它建立在 Google 之前两套技术上:一套是 RT-1,一个基于 Transformer 的机器人操作模型,证明了离散动作表示可行;另一套是 PaLI-X 和 PaLM-E 这类超大视觉语言模型,证明了互联网图文预训练能教会模型海量视觉语义知识。RT-2 的贡献在于把这两件事合并成一件:直接在 VLM 上长出一个"动作输出头",而且这个动作输出头不是外加的 MLP,而是 VLM 词表里新增的特殊 token。
这样做的好处是革命性的。以前的机器人模型,比如 RT-1,动作输出是专门设计的离散化分支,视觉特征和语义理解共享一个网络,但动作空间是独立的。如果想让模型"看一眼网上图片就理解没见过的物体",很难直接办到。RT-2 把动作变成 token 之后,整个系统就变成了一个纯粹的序列生成问题:输入图像加指令,输出动作 token。因为动作 token 和其他语言 token 共享同一套自回归生成机制,模型在预训练阶段积累的互联网知识就能顺理成章地被动作预测使用。这也是"Web Knowledge 迁移到 Robotic Control"这句标题的真正含义。
1.3 用一句话概括整套方法
如果你只想记住一件事,那就是:RT-2 = 海量互联网图文预训练的 VLM + 动作 tokenizer + 机器人数据和 Web 数据联合微调。
它不是在 VLM 后面接一个控制头,也不是把 VLM 当作感知模块单独调用,而是让 VLM 直接输出关节或末端执行器的动作。整个训练过程不引入任何新的网络结构,不设计特殊的动作回归损失,就用标准的 next-token prediction 交叉熵。这个设计选择让 RT-2 的复现门槛比想象中低——你不需要发明新的模型架构,只需要把数据格式转化做对,把一个词表扩展做对,然后把数据比例调好。接下来我会把这三件事逐一拆开讲。
2. 模型骨架:为什么"动作token化"是打通VLM和机器人控制的关键
2.1 动作tokenizer:把机械臂动作翻译成模型词表里的"词"
要理解 RT-2,首先要理解动作 tokenizer 的设计。机械臂的运动学动作通常是一个 7 维向量:末端执行器在三维空间的位置增量(x, y, z)、姿态增量(rx, ry, rz),外加一个夹爪开合状态。RT-2 的做法是把每个连续动作维度离散化成 8 个 bin,同时引入一个结束符。这样每一个控制步大致对应 8 个动作 token(6 个运动维度 + 1 个夹爪状态 + 1 个结束 token),token 的总取值范围被限制在一个很小的集合里。
这 8 个 bin 本身不是随便切的。RT-1 和 RT-2 的离散化都基于机器人数据里动作增量的分布,而不是均匀切分整个数值范围。原因是机械臂在实际操作中,大部分动作增量集中在小数值区间,比如一次挪动几毫米到几厘米;如果按最大最小值均匀切分,绝大多数采样点会落到同一个 bin 里,模型会退化成"只会输出平均动作"的复读机。离散 bin 的粒度直接决定了控制精度,bin 太少动作粗糙,bin 太多每个类别的样本量会稀疏化,8 个 bin 是在 RT-1 上经过实验验证的折中结果。
为了把动作塞进 VLM 的词表,RT-2 在原有词表上新增了一组特殊 token,论文里的实现大约扩展了 256 个 token。这些 token 不是语言符号,而是"动作符号",它们之间没有语义关联,模型学习它们的过程就是在学习"看到这样的图像和指令,下一个动作符号应该是什么"。值得注意的是,这个扩展不需要改动模型任何内部结构,只改了 embedding 矩阵的大小,这让所有现成的 VLM 代码库都能低成本支持。
2.2 输入输出序列:图像、语言和动作如何拼成一段文本
训练样本的格式大概是这样的:
Input: [IMG] current_view.jpg [TXT] "move the blue cube to the red bowl" Output: action_tok_1 action_tok_2 ... action_tok_8 [EOS]看起来就是一个标准的多模态序列到序列任务。输入部分由图像 token 和文本指令 token 拼接而成,输出部分则是一串动作 token。训练时,这串动作 token 通过交叉熵损失和机械臂真实执行的动作对齐;推理时,模型逐 token 自回归生成整串动作 token,然后解码成真实动作发给机械臂。
这里有一个关键细节:机器人控制本质上是一个时间序列决策问题,当前动作依赖历史观测。RT-2 的输入不能只有当前时刻的一张图,需要把最近几帧图像作为上下文一起送进去。在实际实现中,图像帧会被当作"交错输入"放进序列里,和指令文本交替排列,模型通过注意力机制在帧之间建立时序关联。这个能力来自 VLM 预训练时对多图的处理能力,PaLI-X 这类模型天然支持任意数量的交错图片输入,RT-2 几乎没有为机器人任务额外开发时序模块,完全是"白嫖"了 VLM 的既有能力。
2.3 为什么"动作即语言"这条路走得通
很多人第一次听到"把动作塞进语言模型"会觉得有点离谱,毕竟语言是离散符号,动作是连续物理量,它们怎么看都不像一回事。但换个角度想,语言模型本质上是一个"离散符号序列的条件概率估计器",它不关心符号本身是什么含义,只关心符号之间的统计关系。一个 bin 编号、一个 token id,本质上就是一个符号。机械臂动作被离散化成 token 后,在模型眼里和"apple"“红色”"下一个单词"没有本质区别。
这个设计最妙的地方在于,动作 token 和语言 token 共享了同一个高维语义空间。模型在预训练阶段已经学会了"物体的颜色、形状、用途、常识关系"这些概念在表示空间中的分布;微调阶段学习动作 token 时,动作 token 会被迫和这些既有表示建立联系。于是"把红色杯子放到盘子里"这个指令对应的图像特征,会自动激活和"红色""杯子""盘子""放置"相关的语义区域,动作 token 的预测就能利用这些语义信息。如果动作输出是一个独立的连续向量,它就无法享受这种"语义邻近性"带来的迁移红利。
3. 混合微调不是简单拼数据:co-fine-tuning的数据配方与防遗忘设计
3.1 1:1混合:机器人数据和Web数据到底怎么配
RT-2 训练里最容易被人忽略、但实际上决定成败的是数据配方。论文明确提到,联合微调阶段使用大约 50% 的机器人数据和 50% 的互联网图文数据。这个 1:1 不是拍脑袋定的,背后是一个朴素但重要的直觉:如果只喂机器人数据,模型会迅速学会动作,但会把 Web 知识忘掉;如果只喂 Web 数据,模型不会输出动作。1:1 是一种平衡点,让模型在学会"机械臂怎么动"的同时,保住"世界是怎么运作的"这套常识。
实际操作中,这个混合是在 batch 级别做的,也就是说每个训练 batch 里同时包含机器人样本和 Web 样本,而不是分两个阶段训练。为什么不能分阶段?因为分阶段训练会导致灾难性遗忘。如果先在大规模 Web 数据上预训练,再在机器人数据上单独微调,模型会把注意力全部放在拟合动作上,视觉语言表征会被大幅改写,之前学的常识快速流失。反过来,如果先学动作再学 Web,模型又会把动作忘了。只有混合在一个优化过程中,梯度更新才会同时兼顾两个目标,让模型找到一组"既懂世界又懂动作"的参数。
我在自己的项目里试过不同配比,发现 1:1 对 RT-2 这种超大模型是合理的,但对小模型未必适用。模型越小,容量越有限,Web 数据占比太高会导致动作学不扎实;占比太低又保不住知识。我的经验是从 1:1 起步,观察验证集上两类 loss 的下降曲线,再据此调整,而不是一股脑照搬论文比例。
3.2 防灾难性遗忘:为什么必须联合微调而不是两段式微调
RT-2 论文里有一个对比设置很值得深究:co-fine-tuned 版本(Web + 机器人数据联合微调)和 fine-tuned 版本(只在机器人数据上微调)。后者的动作成功率可能不低,但 Web 知识保留度明显下降,在需要常识推理的任务上远不如前者。这说明,灾难性遗忘对 VLM 微调是真实存在的威胁,而联合微调是缓解它的有效手段。
原理上,混合 Web 数据相当于给模型的表示空间加了一个"锚点"。每次梯度更新不仅要让动作 loss 下降,还要保证图文任务的 loss 不升高,这相当于对模型参数施加了一个隐式正则化。模型不能为了拟合机器人数据把所有特征都改掉,必须保留一部分特征来继续处理 Web 任务。最终学到的参数更平滑、更通用,而不是过度拟合某个特定机器人平台的数据分布。
这个思路对任何想用 VLM 做下游任务的人都适用。你不需要完全复刻 RT-2,但只要你想在 VLM 上微调一个非语言输出头,都应该考虑在训练数据里掺入原始预训练数据的一小部分样本,保住模型原有的能力。这是一个成本很低但效果显著的防遗忘技巧。
3.3 数据统一:把episode变成VLM的标准样本
训练数据的组织方式也是一个工程关键。一条机器人 episode 通常包含几十到几百个控制步,每个控制步有一张或多张相机图像、一个指令文本(在同一 episode 内通常不变)、一个动作向量。要把它变成 VLM 的标准训练样本,需要做一系列转化:
- 按固定频率抽取图像帧,减少冗余,控制序列长度。
- 把每个控制步的动作向量用 tokenizer 离散成动作 token。
- 将当前步的输入图像和指令文本拼成输入序列,动作 token 作为输出序列。
- 建立一条样本之间无重叠的滑动窗口,避免同一 episode 被过度重复采样。
图像帧在这里需要多说两句。一个控制步依赖历史信息,所以每个训练样本的输入往往包含当前帧和之前几帧的拼接。这个设计是模仿人类操作员的决策方式——你不可能只看一眼就决定机械臂下一步怎么动,你需要看到物体当前状态和之前状态的差异。RT-2 直接把多帧图像作为交错 token 放进序列,模型自己学习帧间关联,不需要显式引入状态估计器或者光流模块。
4. 涌现能力:符号、推理、多语言这些"意外之喜"是怎么测出来的
4.1 评测任务设计:645个真实机械臂任务想验证什么
评估 RT-2 时,团队不止想测"能不能完成训练过的任务",更想验证"没见过的任务能不能完成"。所以他们设计了一套包含 645 个真实世界任务的评测集,覆盖抓取、放置、堆叠、推动等多种操作类型。任务分了好几类,每类都有明确的泛化目标:见到的任务(训练分布内)、未见的颜色/物体组合、符号理解、常识推理、多语言指令、零样本泛化、干扰物鲁棒性等。
这套评测设计的思路特别值得借鉴:它把"泛化"拆成了多个可量化的维度,而不是笼统地评一句"效果好"。比如组合泛化测的是模型能否将已知的颜色概念和物体概念重新组合;符号理解测的是模型能否理解数字、字母、方向图标这些抽象符号;推理测的是模型能否利用常识做出物理世界中没有直接训练过的决策。这种"维度拆分"的评测思想可以平移到任何领域——你做一个分类模型,不能只测准确率,要分别测不同分布偏移下的表现。
评测环境本身用的是 Google 自家平台,单臂机械臂,顶部和腕部两个相机视角。所有任务都是语言指令驱动的,例如"把红色立方体放到黄色碗里""把香蕉拿到餐巾纸旁边"。相机图像作为模型输入,动作 token 解码后直接控制机械臂。整个过程是一条完整的闭环,从发指令、观察、推理到执行,没有任何人为干预。
4.2 四类涌现能力的拆解与结果
第一个惊艳的地方是组合泛化。训练数据里见过红色立方体和绿色三角锥,但没见过"绿色立方体";评测时让它抓取绿色立方体,RT-2 的成功率能到九成左右,而基线 RT-1 大约只有七成出头。这说明模型不是记住了"红色立方体=抓取目标",而是学会了"颜色"和"形状"这两个独立概念,以及它们和指令的语法组合方式。
第二个是符号理解。评测任务包括"把物体推到写着数字 2 的位置""移动到标签为星号的区域"。RT-2 能理解符号在物理空间中的位置指向,成功率大约在八成半左右。这种能力来自图像中文字、形状与空间位置的联合建模,预训练阶段海量的图文对教会了模型"2 是一个数字,它出现在图片某个位置",微调阶段学会了"指令要求我去那个位置"。
第三个是常识推理。最典型的例子是"我洒了饮料,请帮我清理一下",模型需要自己推理出"先用海绵擦拭"而不是模仿训练数据里的固定行为。还有一类是"拿一个可以用来压纸的东西",模型在石头、胶带、香蕉之间选择了石头。RT-2 在推理类任务上的成功率大约九成,这几乎是纯靠 Web 知识撑起来的,因为机器人演示数据里几乎不可能覆盖这么多样化的常识决策。
第四个是多语言指令。训练数据大部分是英文指令,但评测包含了中文、西班牙语、法语等多语言指令。RT-2 在没有见过这些语言和机器人控制关联的情况下,成功率从基线的不到两成提升到六成以上。这就是大模型预训练的价值:它在互联网上见过海量多语言文本,知道"把苹果放在盘子里"和"put the apple on the plate"表达的是同一个语义,这个语义理解能力被动作 token 完整保留下来了。
4.3 数字背后的信息:Web知识到底迁没迁过去
从结果能很清楚地看到,Web 知识确实迁移过去了,但迁移程度和模型规模强相关。RT-2 论文对比了两个底座:PaLI-X 55B 和 PaLM-E 12B。在常识推理、符号理解这类依赖世界知识的任务上,55B 版本明显优于 12B 版本。这说明知识迁移的质量受限于模型的容量和预训练质量——小模型装不下那么多常识,硬塞动作 token 之后,原本的知识表示会被挤压变形。
另一个值得注意的结论是 zero-shot 能力。论文揭示了 RT-2 甚至可以在不经过任何机器人数据微调的情况下输出合理的动作 token,也就是零样本控制机械臂。当然,纯 zero-shot 的成功率不如联合微调后的版本,但它证明了:只要动作 token 设计合理,在大规模图文数据上训练出来的 VLM 天然就能生成动作序列。这个现象背后的逻辑是,模型已经把"物理世界的因果结构"内化到了参数里,动作生成只是这一内化知识在符号空间的映射。你可以把动作 token 想象成一种"方言",模型学会了普通话之后,听懂方言只需要极少的额外示例。
5. 从论文到工程:复现RT-2类方案要注意的细节和坑
5.1 第一个拦路虎:数据管道
RT-2 论文没有开源完整代码和权重,这给复现带来很大阻力。但我在实际搭建自己的 VLA 数据管道时,发现真正的坑比想象中多。首先,机械臂执行动作和采集图像之间天然存在时间延迟,如果不对齐时间戳,模型就会学到"图像和动作之间的错位关系",训练 loss 看着在降,实际执行时动作总是慢半拍。我的做法是记录每个控制指令发送的精确时间戳和每帧图像到达的时间戳,用最近邻匹配建立同步关系,而不是简单按序列下标对齐。
其次,动作增量方向的统计特性很重要。同一个任务的不同 episode 可能起始位置差异很大,如果直接对绝对动作值做离散化,数据的分布会非常分散,bin 的利用率极低。RT-1/RT-2 的做法是用动作增量(相对上一个控制步的变化量),这能极大地压缩动作空间的范围,让 8 个 bin 更有区分度。我见过不少复现项目在这里偷懒,最后模型生成的动作要么抖动严重,要么停留在一个位置不动。
再次,指令文本的多样性直接决定泛化能力。如果所有 episode 都绑定同一句指令,模型会退化成"看图猜动作",完全忽略语言部分。需要做指令增强,比如把"把红色杯子放到盘子里"改写为"请将杯子移到盘子上面""红色杯子的目标是盘子"等变体,让模型学会真正把语言和动作绑定起来。
5.2 action tokenizer的粒度、动作空间和推理延迟
动作 tokenizer 的粒度是复现时很微妙的问题。8 个 bin 意味着每个动作维度只有 8 个等级,这对高精度操作显然不够,但离散 bin 数增加会带来两个连锁反应:一是每个类别的训练样本变稀疏,模型更难学;二是词表扩展的 token 数成倍增加,embedding 参数和输出头的计算量都上涨。RT-2 选 8 是平衡了控制精度、训练难度和计算成本。如果你的任务需要毫米级精度,可以考虑用 16 或 32 个 bin,但建议同时增加机器人数据的采样量。
推理延迟也是一个绕不开的问题。55B 参数的 VLM 每步自回归生成多个动作 token,在 GPU 上也许能跑几百毫秒,但在真实机器人上,这个延迟已经超过了常规伺服控制的周期。RT-2 在部署时主要针对"每隔一两秒发一条高层动作指令"的场景,而不是高频力控。如果你要做精细操作,需要把动作频率和模型推理频率解耦:高层用 VLM 做规划,底层用一个快速 PID 或阻抗控制器执行插值。
我对动作空间归一化的建议是:不要用机械臂原始关节角直接离散化,优先用末端执行器的笛卡尔空间增量。关节角空间的分布很不均匀,不同关节的变化范围差异巨大,离散化效率低;笛卡尔空间的物理意义更明确,更容易归一化到统一的数值范围。RT-1 系列用的都是末端执行器位姿表示,这不是偶然,而是踩过坑之后的选择。
5.3 给小团队的复现路径:先别碰55B
如果你没有 Google 级别的算力和数据采集能力,我建议分三步走,而不是直接复现 55B 版本:
第一步,选一个小规模 VLM 底座(7B 到 13B 的开源模型),先跑通动作 tokenizer 和联合微调的数据管道。这个阶段的目标不是刷效果,而是验证整个系统的正确性:图像 token、指令文本、动作 token 能不能被正确拼接;推理时动作 token 能不能被解码成合法的机械臂指令;batch 混合采样逻辑有没有 bug。
第二步,用一个仿真环境做闭环验证。在仿真里,你不需要遥操作员也能大规模生成演示数据(用脚本策略),可以快速迭代模型结构、bin 数量、数据配比。仿真环境的噪声鲁棒性测试能帮你发现模型的动作输出是否平滑、是否出现抖动。
第三步,再上真实机器人采集少量数据做微调。真实场景和仿真之间的 domain gap 是不可避免的,但如果你前三步跑得扎实,这个 gap 只会影响最后的绝对成功率,不会推倒重来。我遇到最多的翻车现场是:仿真里表现完美,一到真机发现相机内参标定有偏差,图像和机器人坐标系没有对齐。所以真机实验前务必要验证图像标注和动作标签的空间一致性。
另外,不要试图从零训练一个 VLM 底座。直接使用开源的视觉语言模型权重,把动作 token 加进词表,然后微调。预训练成本太高,而且 RT-2 之所以能迁移 Web 知识,靠的就是底座本身的预训练质量,这一点你无法绕过。
6. RT-2之后:它在VLA路线里的位置,以及我的一些判断
6.1 从RT-2到OpenVLA、π0:动作头设计的进化
RT-2 奠定了"动作即语言"这条路线,但后来的工作并没有完全沿用它。OpenVLA 基本继承了 RT-2 的思路,使用更大的视觉骨干和语言模型,仍然用动作 token 作为输出,只是把数据规模做得更大、底座换成开源模型。而 π0、RDT 这类工作则走了另一条路:保留 VLM 作为语义理解部分,但动作输出换成了 diffusion policy 或 flow matching,因为连续动作生成在精细操作上比离散 token 更有优势。
这个演进过程的核心争议在于"离散 token 是否够表达精细动作"和"语言模型的语义能力与连续动作生成能否共存"。RT-2 的价值在于证明了它们能共存,而后续工作在具体共存方式上做了更精细的工程改良。理解了这个谱系,你在选型时就不必盲目跟风——如果任务以高层语义操作为主,动作 token 方案更简单稳定;如果任务需要高频连续控制,可以试试动作专家头加 VLM 的混合架构。
社区里还有一个重要变化是评估方式。RT-2 的 645 个任务评测把泛化维度拆得非常细,后来的工作普遍继承了"seen / unseen / emergent"这一套评测分类法。如果你在写自己的机器人学习论文,非常建议沿用这套框架:只报一个平均成功率,你会很难说清楚模型的泛化能力到底强在哪。
6.2 我个人看过的复现和实测后的体会
我花了一段时间在自己项目里仿真和真机并行复现 RT-2 的思路,最深的体会是:这个工作的技术难度并不主要在模型结构,而在于数据工程和评测设计。动作 tokenizer 本身不复杂,几百行代码就能搞定;VLM 微调也有成熟的框架支持。真正需要花费大量时间的是把机器人数据转换成干净的序列样本,并在评测时设计出能反映模型泛化能力边界的问题集。
还有一点我特别想提醒做机器人学习的同行:不要只盯着动作成功率这一个指标。RT-2 之所以有说服力,是因为它证明了"Web 知识保留度"和"机器人任务成功率"可以同时优化。在自己的项目里,我养成了一个习惯:每次微调完模型,先跑一遍图文常识任务验证知识没有丢失,再上机械臂实验。这个习惯帮我提早发现了好几次数配比失衡导致的灾难性遗忘。
最后分享一个选题上的建议。如果你正在考虑做一个 VLA 方向的研究,RT-2 这篇论文是最值得精读的起点之一,但不是终点。它的数据配方、tokenizer 设计、评测方法都有很强的启发性,而它的局限性——时间序列建模不足、推理延迟高、真机数据依赖大——恰好是下一代工作可以发力的方向。把基础论文读扎实,再针对具体问题做出差异化的改进,比盲目堆数据有效得多。