RT-2技术解析:视觉语言模型如何将机器人动作变成token
发布时间:2026/10/16 19:10:46 锦皓数字建站

1. 项目概述一句话理解 RT-2 在做什么先把结论摆在前面RT-2 做的事情就是让视觉语言模型VLM的输出层不再只吐“自然语言 token”而是把机器人的动作也当成 token直接混进同一个词表里做自回归。换句话说以前的机器人策略模型是“视觉输入 → 动作输出”中间夹着一个专门设计的动作头RT-2 把这个动作头干掉了改成“视觉输入 语言指令 → token 序列”其中一部分 token 对应文本另一部分 token 对应机器人关节角度或末端位姿。这个思路最直接的好处是整个模型变成一个统一的 Transformer结构上极度干净不需要再去考虑“该用 MLP 还是 LSTM 当动作头”“动作头要不要单独训”这类问题。凡是能建模文本依赖的架构就能建模动作依赖因为 token 序列的语言规律和动作规律本质上都是条件概率分布的学习问题。这篇博文的受众我默认是对多模态大模型有基本了解、想深入理解机器人基础模型Robot Foundation Model设计逻辑的研究者或工程师。如果你只是听说过 RT-2 这个名字想搞懂“为什么一个会聊天的模型能控制机械臂”这篇文章正好合适。我会从为什么用 VLM 做机器人控制、动作怎么 token 化、数据怎么组织、训练怎么设计到推理时动作如何涌现一步步拆开讲清楚。对于已经跑过 RT-1 或类似模仿学习项目的同学这篇文章能补上从“专用策略模型”到“通用视觉语言动作模型”的关键一步。对于刚入门的新手我也尽量把前置知识铺垫到位。2. 用 VLM 做机器人控制这步棋背后到底图什么2.1 从 RT-1 到 RT-2架构升级的底层动机先回顾一下 RT-1。RT-1 用的是 ImageNet 预训练的 EfficientNet 提取视觉特征然后接一个 Transformer输入是视觉 token 和语言指令 token输出是离散化的动作 token。注意RT-1 的动作 token 是模型自己训出来的一个离散动作词表和语言 token 不是一回事——语言 token 是预先定好的 SentencePiece 词表动作 token 是另外学的。这种设计在当时已经能实现不错的多任务模仿学习但有一个结构上的硬伤动作空间和语言空间是两套独立的词表模型必须学习在两种模态之间做“翻译”而因为两套词表的分布差异巨大这个翻译过程异常难学——本质上是在问模型“这段视觉特征对应哪个离散动作码”而动作离散码之间没有任何语义平滑性。RT-2 直接把这个翻译过程取消了。它把语言词表和动作词表合并成同一个词表视觉 token 照旧用视觉编码器产出语言和动作都从同一个词表里采样。这样一来模型只需要学一个简单的映射视觉语言上下文 → 下一个 token这个 token 可能是文本也可能是动作。用一句大俗话总结RT-1 是让模型在两本词典之间翻来翻去RT-2 是给它一本大词典让它按需查词。后者的学习压力显然小得多尤其是在数据量有限的情况下这种架构上的简化能带来实打实的泛化能力提升。2.2 为什么偏偏是 VLM而不是从头训一个多模态模型一个很自然的疑问是既然要做“视觉语言动作”为什么不从头设计一个新的多模态架构非要拿现成的 VLM 改答案是数据效率和泛化能力的双重考量。自监督预训练的 VLM比如 PaLI-X、PaLM-E 这类在海量互联网图文数据上见过数亿级的“图文”配对已经具备非常强的视觉语义理解能力能够识别物体、理解空间关系、推理隐含状态。而机器人的真实操作数据非常贵——一条机器人轨迹数据要真机采集动辄几秒到几分钟的时长且每个场景都要人工布置数据量级和互联网图文数据根本不在一个量级。如果从头训一个模型等于放弃了互联网数据带来的先验知识纯靠 Tweets 级别的机器人数据去硬学效果可想而知。RT-2 最本质的贡献就是证明了VLM 里的视觉语义理解能力可以被“嫁接”到动作生成上。它不需要从头学视觉语义它只需要学一件事从“语义理解”到“动作落点”的映射。更关键的是这种嫁接不需要改变 VLM 的任何结构只需要改变训练数据的格式和输出层词表的含义。2.3 “谈虎色变”的机器人数据困境在 RT-2 里是怎么绕过去的网上很多讨论把 RT-2 的成功归因于“数据量大”但仔细看论文会发现真正的重点不是数据的量而是数据的组成方式。RT-2 用的机器人数据其实还是 RT-1 那批约 130k 条真正多出来的是大量的互联网“图文”和“图文文本”数据。模型在做训练时是同时在这些混合数据上做标准的 next-token prediction——机器人轨迹数据教它动作互联网数据教它语义。这带来一个非常聪明的副作用当模型在互联网图片上看见“桌子上的红色杯子”时它学到的是视觉语义和语言符号之间的绑定当它在机器人数据上看见“机械臂把红色杯子从桌子A挪到桌子B”时它学到的是视觉语义和动作符号之间的绑定。因为两者共享同一个视觉编码器和同一个词表语义绑定和动作绑定之间会互相促进——语言描述帮助模型识别“红色杯子”动作标签则帮助模型理解“挪”这个动词在物理世界中到底意味着什么。所以 RT-2 实际上不是在“用机器人数据硬凑”而是在“用互联网数据打底用机器人数据点拨”。这种混合训练策略几乎是目前所有机器人基础模型的标配思路但 RT-2 是把这个思路做得最彻底、也最有代表性的一个。3. 核心细节拆解动作 token 化没有想象中那么玄乎3.1 动作到底是怎么变成 token 的这是 RT-2 最容易让人犯迷糊的地方也是面试中被问烂的问题。直接说结论RT-2 把动作表示成一个 7 维向量然后逐维离散化再把这个向量整体映射成一个 token。具体来说这 7 个维度是机械臂末端执行器的 6 自由度位姿三维位置 三维旋转再加上一个夹爪开合维度。论文里没有用那种“把多维动作压成一维再分桶”的粗暴做法——那种做法会把不同维度之间的耦合信息丢掉。RT-2 用的是离散化查表的方式预先定义每维的取值范围然后按固定间隔分割成 256 个 bin7 个维度一共是 256^7 种组合。如果老老实实把这 256^7 都塞进词表那词表直接爆炸训练也根本训不动。所以 RT-2 的做法是为每个维度单独生成一个 token也就是动作输出的时候不是一次吐一个 token而是连续吐 7 个 token一个维度一个 token每个 token 的取值是 0 到 255 的整数对应那个维度的 bin 索引。可能有人会问那这不就是和语言词表共用一套映射吗其实这里有个细节——RT-2 不是让动作 token 和文本 token 共享同一个嵌入表而是在现有 VLM 词表的末尾追加了 256 个特殊 token专门表示“这个位置的数值是某个 bin 索引”。这样做的好处是模型原有的语言能力完全不受影响动作生成时可以复用 Transformer 对数字 token 的建模能力。动作序列的生成因此和生成一段文本在工程上完全一致解码时采样到了动作特殊 token就把它解析成 bin 索引再做逆映射得到连续动作值。3.2 协调变换与旋转表示没处理好这里精度会直接崩掉动作 token 化的第一步不是直接离散化原始关节角度而是先把动作转换到末端执行器坐标系下。这是很多人忽略的一个细节。RT-1 时代的做法是直接对关节角度做离散化但 RT-2 换成了末端执行器的位姿——位置部分直接用三维坐标旋转部分用的是相对于机器人基座的轴角表示。旋转表示的选择非常关键。欧拉角有万向锁问题四元数虽然是连续的但四个分量之间有限制条件直接离散化容易产生无效旋转。RT-2 选择轴角表示即旋转向量因为它的三个分量在机器人控制里是最直观的物理量而且离散化后即使有误差也不会让姿态变得非常离谱。工程上如果你自己要复现建议也用轴角不要自己发明四元数离散化方案血泪教训。还有一个重点你从 ROS 或者机器人 SDK 里拿到的末端位姿通常是在世界系或基座系下的这个没问题但要注意如果你的训练数据和推理数据的坐标系定义不一致哪怕差一点点模型学出来的策略都是一纸空谈。RT-2 的做法是统一用基座坐标系并且做了归一化确保所有维度都落在 [-1, 1] 或者类似的固定区间里再分桶。这个区间设置很重要如果你某一维数据的实际分布只有 [-0.2, 0.2]但归一化区间设成 [-1, 1] 并按 256 等分那等效分辨率只有大约 50 多个 bin 在发挥作用精度损失非常严重。实际项目中我习惯先统计训练数据的每维 min/max再留 10% 的余量设置边界。3.3 推理阶段的“动作解码”从 token 到真实指令的最后一公里训练完成后推理时模型的输入是“当前图像 文本指令”输出是若干 token。其中语言指令的 token 很好解析直接送进分词器反解码成文本动作 token 则需要做一次“翻译”命中到动作特殊 token 后把它的索引 i 映射成数值value min i × (max - min) / 255。这 7 个数值就构成当前时刻的 7 维动作向量。这里的采样策略也值得说说。RT-2 的推理阶段如果想更平滑地控制机器人一般可以加一个滑动窗口滤波比如把最近 3 个时间步预测的动作做加权平均防止出现抖动。论文里没有把这事儿写得很细但自己做部署时这个细节几乎必踩坑——Transformer 在推理时是逐 token 生成的相邻帧之间的动作预测会有微小跳变直接下发到底层控制器会让机械臂像帕金森一样抖。我当时做类似项目时先用指数移动平均EMA然后把 7 个维度的差分都 clamp 了一下效果立竿见影。另外要注意RT-2 的推理频率和底层控制频率通常是不匹配的。RT-2 从输入图像到输出动作整个前向传播在 A100 上大概几十毫秒到一百多毫秒但机械臂的底层控制周期通常只需要几毫秒到几十毫秒。中间一般要加一个插值器RT-2 输出一个目标位姿插值器在时间上做平滑过渡底层控制器再去跟踪这个插值轨迹。4. 从“看懂”到“做到”两阶段训练与思维链的隐式涌现4.1 阶段一从现成 VLM 热启动不浪费一点预训练知识前面的内容反复提到 RT-2 是从 VLM 初始化来的但这一步到底怎么做很多人还是不太清楚。RT-2 有两种规格的模型大号的 RT-2-55B 是在 PaLI-X 的基础上继续训练小号的 RT-2-5B 是在 PaLM-E 的基础上继续训练。中间的视觉编码器和语言模型部分原封不动地继承权重只是把输出头改了一下原本 VLM 的输出层是一个映射到词表大小的线性层RT-2 只需要在词表维度上追加动作 token 对应的嵌入向量其他权重全部冻结。这里面的关键决策是“到底冻结哪些层”。RT-2 论文里明确说明不是全部冻结而是把 VLM 的全部参数都放开一起做微调。为什么因为模型要学的“动作”本质上是一种新的输出分布如果只训输出头模型无法在内部特征层面把视觉语义和动作语义融合得足够好。但全参数微调有风险——如果机器人数据占比太小模型可能快速遗忘语言能力。RT-2 用的是大约 1:1 的图文数据和机器人数据混合配比并且用较小的学习率相对预训练阶段在保证语义能力不崩塌的前提下学习动作映射。实操层面我强烈建议你复现时不要一上来就全参微调。先在机器人数据只调动作 token 相关的层比如输出头和最后几层 Transformer确认动作 loss 在掉再解冻更多层。全参微调的不确定性太大尤其是你没有 256 块 TPU 的情况下翻车率极高。4.2 阶段二到推理CoT 是显式加的但“隐式思维链”是训出来的如果你仔细读过 RT-2 论文的附录会发现推理时有一个非常关键的改动在输入里拼接“思维链提示”。比如说用户指令是“把红色杯子放到蓝色盘子里”模型实际接收的是“用户说把红色杯子放到蓝色盘子里。思考过程我应该先找到红色杯子然后移动到蓝色盘子最后释放。”后面再接“动作”作为输出的起点。这就是论文里说的 CoTChain-of-Thought提示。它的作用是激发 VLM 在预训练阶段学到的推理能力让模型在生成动作之前先“想”一遍从而大幅提高复杂任务的成功率。论文里的数据很清楚没有 CoT 提示时RT-2-55B 在见过和没见过的任务上的成功率会掉 10 到 15 个百分点。更有意思的是论文提到在 CoT 提示引导下模型在内部表征中表现出一种“隐式规划”的现象——即使你不给它显式的思维链提示模型在生成动作 token 之前内部注意力也会先聚焦在任务相关的物体上再转移到目标位置。这说明模型在训练中已经学到了“先理解、再规划、后执行”的隐式链路CoT 提示只是把这个过程显式化让模型更容易调动这种能力。我自己的理解是这个机制的底层逻辑和人类类似当我们去端一杯水时我们是先“看见”水杯在哪、路径上有无障碍物然后才协调肌肉去完成动作。对外人来说这个过程是瞬时的但对大脑来说这其实是一个完整的推理链条。RT-2 的 CoT 提示就是把这个链条摆到了模型面前让它别跳步。4.3 训练数据的样本组织一个被忽略但决定成败的细节RT-2 的训练数据可以分为三大类第一类是机器人操作数据每条样本长这样一张当前摄像头图像一段语言指令一串动作 token。第二类是视觉问答数据VQA比如图片里有什么物体、物体是什么颜色这些数据帮助模型保持视觉语义能力。第三类是纯文本数据用来维持模型的通用语言能力和世界知识。你可能会疑惑机器人数据和问答数据在一条样本里怎么共存答案是本质上它们都是一样的——都是“多模态输入 → token 序列输出”。在训练时RT-2 把所有这些数据混合在一起全部当作 next-token prediction 任务来处理。机器人数据的 label 是动作 token问答数据的 label 是文本 token混合训练。这个设计的微妙之处在于数据配比。如果机器人数据太多模型会在语言问答任务上退化变得只会做动作不会说话如果机器人数据太少模型又学不好动作。RT-2 论文给了两个配比参考55B 模型用的是大约 50% 机器人数据 50% VQA/文本数据5B 模型更倾向于多一些机器人数据大约 58%。实际效果没有绝对优劣取决于你最终要部署的场景。如果你要做的是纯机器人控制可以把机器人数据比例提到 70% 以上牺牲部分的“聊天能力”换取动作准确率。5. 实操复现路线从零搭建一个“VLMAction Token”的最小工程5.1 选定基座模型与硬件量力而行RT-2 的原始实现依赖 Google 内部超大集群和 TPU普通团队在不做任何裁剪的情况下直接复现 55B基本不可能。但如果只是想复现核心机制完全可以缩小规模。我建议从 3B 级别的开源 VLM 入手比如 LLaVA 系列、Qwen-VL 或者 InstructBLIP 的权重作为基座在公开的机器人操作数据集上做微调。硬件上一张 80GB 显存的 A100/H100 起步或者两张 48GB 的 L40S 做数据并行。数据方面可以用 RoboMimic、RLBench 这类仿真数据也可以从 BridgeData V2 这类真实机器人数据集中取一小部分做初测。预算有限的情况下还有一个更省钱的调法冻结 VLM 的视觉编码器和语言骨干只训练一个“动作适配器”模块类似 Lora 的思路。代价是动作精度会下降但工程成本大幅下降适合第一次跑通流程。5.2 最小复现的四个主要步骤第一步是准备数据。不管你用仿真还是真机数据统一做这几件事用相机内参和外参把图像做标准化resize 到模型输入尺寸、归一化像素值把机械臂末端位姿转换到基座坐标系下然后按实际范围做离散化映射生成 7 个 0-255 的整数标签。第二步是改模型词表和输出层。在 VLM 的 tokenizer 里追加 256 个特殊的动作 token例如ACTION_0到ACTION_255重新初始化这 256 个 token 的 embedding其他 embedding 保持预训练权重不动。同时把模型配置里的词表大小改成原词表大小 256。第三步是设计训练损失。和标准语言模型一样只对输出部分的 token 计算交叉熵损失。具体实现时把文本指令部分的 label 设为 -100忽略动作 token 和 CoT 文本部分正常计算损失。如果你加上 CoT 训练还要把 CoT 生成的文本 token 也纳入损失计算。第四步是推理部署。输入图像和文本指令让模型自回归生成遇到动作特殊 token 后停止文本生成解析成动作向量下发到控制器。注意加滤波和插值否则机械臂动作会很生硬。5.3 用开源框架把工程量再降一档完全从零写这套代码需要不少时间。目前社区里已经有一些开源项目做了部分工作比如 OpenVLA基于 Prismatic VLM 微调的动作模型、OpenX-Embeddings 处理多数据集统一格式等。OpenVLA 和 RT-2 思路一脉相承都是把动作搞成离散 token只是基座模型不同数据格式有些差异。拿它当参考实现再去改造成自己的任务会比从零开始少踩一半的坑。我自己的体会是千万别一上来就研究“如何把 RT-2 原版代码跑起来”先看 OpenVLA 这类简化版是怎么实现动作 token 化、怎么组织数据、怎么训练和推理的把这个流程吃透再回去读 RT-2 论文里的细节很多之前看不懂的地方一下就通了。6. 实际项目里最容易翻车的几个细节6.1 相机标定与坐标系不统一精度问题的头号元凶这是我自己和很多复现者踩过最深的一个坑。RT-2 训练时用的是基座坐标系下机械臂末端位姿但真机部署时如果你用眼在手上的相机图像对应的坐标系是随时在变的如果相机的安装位置和训练数据采集时有任何偏移模型看到的视觉特征和它学到的动作映射就对不上控制精度会显著下降。解决方法是在训练数据准备阶段就把所有图像变换到统一的虚拟相机视角下RT-2 的做法之一或者在部署阶段做一次手眼标定把当前图像对齐到训练时的观察视角。前者需要大量的图像重投影计算后者需要标定精度足够高都不简单。但只要你跳过这一步后面无论怎么调参效果都会卡在瓶颈上不去。6.2 动作 token 的分布不均衡模型偏爱输出“中间值”离散化一个连续动作空间时大概率遇到一个现象某些 bin比如中间值附近出现的频率远高于其他 bin。这会导致模型学成一个“均值回归器”——不管输入是什么它都倾向于输出中间的数值因为训练时这么做的损失最小。我在实际训练里碰到过这个问题典型表现是模型在慢速任务上表现不错但一旦需要精确移动到某个角落位置就会失败。原因就是边界 bin 的样本太少模型压根没学会边界输出。解决方案有几种一是对动作标签做重采样或加权让每个 bin 的样本数尽量均匀二是减小 bin 数量比如从 256 降到 128让每个 bin 的样本密度上升三是用分类损失加上一个辅助的回归损失头让模型同时学习“这个动作落在哪个区间”和“这个动作的精确值是什么”。第三种方式工程上复杂一些但效果最好。6.3 训练和推理时 CoT 的使用不一致导致效果大幅掉点论文里有个细节很容易被忽略RT-2 在做机器人数据训练时不是只给模型喂“图像指令 → 动作”而是同时要求模型输出 CoT 文本和动作。也就是说训练数据的 label 是“CoT 文本 token 动作 token”拼接而成的完整序列。如果你训练时只学习动作 token推理时却加上 CoT 提示模型会非常不适应因为它从来没有学会“先说话再动手”的模式。反过来说如果你的训练数据量不够大强行让模型学习生成 CoT 反而会稀释动作学习的容量。我的建议是复现时先跑通“不加 CoT”的版本确认机器人控制链路本身稳定再逐步引入 CoT 数据。对很多小规模项目不加 CoT 可能反而效果更稳因为生成的 CoT 文本一旦有误会误导模型后续的动作生成。7. 常见问题速查表几个经常被私信问到的问题集中整理在下表里方便大家对照排查。问题可能原因解决方案模型输出动作有严重抖动未做时序平滑或滤波增加指数移动平均或对动作差分做 clamp动作总是偏向中间值训练数据 bin 分布不均对动作 label 重采样或降低 bin 数量有 CoT 时效果下降训练数据中没有 CoT 标签确保训练和推理的 CoT 使用方式一致或去掉 CoT推理速度太慢跟不上控制频率模型过大、无批处理减小模型尺寸或加入插值器降频控制换了一个相机位置后效果暴跌坐标系/视角不一致统一训练和部署的相机视角重新标定语言能力退化成“机器人复读机”机器人数据占比太高降低机器人数据比例补充 VQA 和纯文本数据夹爪开合控制不精准夹爪自由度数值范围没对齐检查夹爪开合的归一化区间单独做标定模型成功率高但动作轨迹不自然缺少轨迹级平滑约束在 token 解码后加轨迹优化或用 MPC 跟踪目标位姿补充一个小技巧如果你在训练日志里看到动作准确率不升反降不要急着调模型结构先检查数据管线的 label 对齐有没有问题——这是我见过的最常见翻车原因没有之一。手动挑两条训练样本把图像、指令、动作 label 逐项打印出来跟数据采集时的真实值比对一遍很多时候一下子就发现问题了。8. 我的实操体会与后续扩展思考RT-2 这个工作最让我印象深刻的不是它刷了多少 benchmark 分数而是它把一个极其复杂的问题——“机器人怎么从视觉输入决定动作”——拆解成了一个极其朴素的框架所有东西都是 token一切都做 next-token prediction。这种“暴力但优雅”的简化是很多后续工作的精神源头。如果你已经复现成功并且准备往更深处扩展我个人觉得有几个方向值得探索。一个是把动作 token 的粒度从“末端位姿”扩展到“关节力矩”让模型能直接输出力控信号另一个是引入更细粒度的时序建模比如用 action chunking一次预测未来多步动作来缓解自回归生成的误差累积还有一个是替换离散化为连续回归头做混合架构既保留 VLM 语义能力、又获得连续控制的精度。这些方向目前都有论文在推进但工程上都还远未成熟正是自己做实验的好时机。最后分享一个小经验做这类多模态模型的落地项目团队里一定要有一个懂机器人底层控制的人不然哪怕模型训练得再好真机上那一下“机械臂猛地甩出去”的瞬态冲击也够你调一两个月。模型只是一部分系统链路里每个环节都会成为瓶颈——这是 RT-2 这类项目绕不开的真相。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。