想象你走进一家热闹的餐厅后厨。新来的机器人帮厨不会炒菜,只会像打卡机一样执行预先写好的步骤。有一天,老板把一本巨大的《米其林菜谱》(互联网图文)和几段老师傅示范视频(机器人数据)交给它。它读完菜谱后,居然能听懂“把盐罐递给颠勺师傅”,并自己安排手臂动作:向左平移、张开夹爪、放下。这就是 RT-2 的魔法。它没有学会所有动作,而是学会了“把世界描述转成动作编号”的通用语言。RT-X 则像后厨行业协会,把上百家餐厅的后厨录像汇成一本《万能操作手册》,让新来的机器人帮厨能适应不同的灶台和锅铲。这篇文章,我们就用这套“后厨”比喻,拆解 VLA 模型 RT-2/RT-X 的来龙去脉。

岗位关联

学透 RT-2/RT-X,你就能看懂具身智能模型如何把“视觉理解”和“动作执行”放进同一个大模型,也会用“数据-模型-落地”框架判断一个机器人项目是否值得用 VLA 做。

目录
  1. 可视化演示
  2. 模型背景:从 RT-1 到 RT-2
  3. 架构设计:视觉-语言-动作一体
  4. 动作标记化:把动作写成 token
  5. 联合微调:网页知识与机器人数据
  6. 泛化能力:跨任务与涌现
  7. RT-X 聚合:跨本体共享
  8. 落地考量:技术可行性、成本与场景适配
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示RT-2视觉-语言-动作模型架构、7维连续动作到离散Token的量化过程、以及RT-X多机器人平台数据聚合训练通用策略。切换模式查看不同维度,拖动滑块调节量化精度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

RT-2视觉-语言-动作模型架构 多模态输入:图像+语言指令经视觉编码器与文本Tokenizer统一进入LLM 动作输出:LLM自回归生成动作Token,解码为7维连续控制信号 action = decode(LLM(vision, language)) VLA模型将机器人控制统一为语言模型生成任务

模型背景:从 RT-1 到 RT-2

餐厅里最早的老帮厨只认死命令:看到“01”就去拿盐罐,看到“02”就去端盘子。一旦菜单换成“把盐递给大厨”,它就懵了。这就是 RT-1 时代的尴尬:训练时见过的指令极其有限,换个说法、换个场景就失灵。

RT-2 换了个思路:与其为每个任务写死编号,不如让机器人读“菜谱”自悟。它把自然语言指令、摄像头画面、机器人动作全部放进同一个大语言模型里,让模型学着“看完图片和文字,输出下一步动作”。这类把视觉、语言、动作统一训练的模型,就是 VLA(Vision-Language-Action)模型。

具体来说,RT-2 以 PaLI-X-55B 等预训练视觉语言模型为骨干,再用机器人操作数据做联合微调。它不再把机械臂控制当作传统控制问题,而是当作“下一个 token 预测”问题:模型看完当前画面和指令,输出一串动作 token。这个改动看似简单,却让动作输出的空间被语言模型已有的语义知识“撑大”了。

用回比喻:老板不用再给老帮厨重写操作卡,只需要给他看海量菜谱和几段示范。新一代帮厨虽然还会手忙脚乱,但至少听得懂人话、认得清食材,这正是 RT-2 带来的质变。

架构设计:视觉-语言-动作一体

大厨接单后要同时看三样东西:顾客写的订单、锅里的食材照片、以及自己下一勺该往哪放。RT-2 也一样,输入是“摄像头图像 + 文字指令”,输出是“一串动作 token”。

为了让大语言模型能处理图像,RT-2 先把图像切成块并编码成视觉 token,文字指令编码成文本 token,动作则离散成动作 token。三类 token 拼成一个长序列,交给 Transformer 主干统一处理。

这种“输入输出都是 token”的设计,使得 RT-2 能直接复用互联网上训练好的知识。它不需要一个专门的动作输出头,而是在原有语言模型词汇表上追加动作 token,让模型把“拿、放、推、转”当作词来生成。

回到后厨:帮厨不用换一套全新工具,只是把“炒菜步骤”也写进了它熟悉的菜谱语言里。视觉、语言、动作共用一本“通用语言账本”,这是 VLA 架构的灵魂。

X=[v1,…,vN,w1,…,wM,a1,…,aT]\displaystyle X = [ \mathbf{v}_1, \dots, \mathbf{v}_N, w_1, \dots, w_M, a_1, \dots, a_T ]
这个公式表示一次完整的“眼-脑-手”输入输出序列。
  1. 图像块编码把摄像头画面切成 $N$ 个小块,每块变成一个向量 $\mathbf{v}_i$,相当于大厨先看一遍食材照片。
    vi=Embedimage(patchi)\displaystyle \mathbf{v}_i = \mathrm{Embed}_\text{image}(\text{patch}_i)
  2. 语言指令编码把订单文本拆成 $M$ 个词,每个词映射成向量 $w_j$,相当于大厨读订单。
    wj=Embedtext(wordj)\displaystyle w_j = \mathrm{Embed}_\text{text}(\text{word}_j)
  3. 动作序列编码把机器人要执行的 $T$ 步动作也写成 token $a_t$,并入同一个序列,相当于把“下一勺”变成菜牌编号。
    at∈{0,1,…,K−1}\displaystyle a_t \in \{ 0, 1, \dots, K-1 \}
  4. Transformer 统一建模$X$ 被送进 Transformer,模型在每一步预测下一个 token,最终生成动作序列。

动作标记化:把动作写成 token

告诉大厨“火大一点”,他需要知道具体到灶台旋钮的刻度,而不是抽象的词。RT-2 也是这样:机械臂真正执行的是连续的角度、速度、开合度,但大模型更擅长输出离散的单词。于是它把连续动作“切成编号”。

论文里对动作 token 的处理类似“量化”:把某维动作(比如夹爪开合、机械臂平移)的取值范围分成 $K$ 个格子,任何连续值都落到离它最近的格子里。这样动作空间从无限连续变成有限离散,动作 token 就进入了语言模型的词汇表。

执行时,模型输出 token 后再反离散化成连续命令,交给底层轨迹规划或 PID 控制器,完成真实运动。因为 token 格子数量有限,模型学到的其实是“动作词汇表”,每个 token 代表“往左再一点”“夹爪松开 30%”这类离散语义。

后厨里的大厨从不说“把火开到 273.15 度”,而是说“四档火”。动作 token 就是机器人的“四档火”,让语言模型能像说话一样生成动作。

atok=⌊acont−amin⁡amax⁡−amin⁡×(K−1)+0.5⌋\displaystyle a_{\text{tok}} = \left\lfloor \frac{a_{\text{cont}} - a_{\min}}{a_{\max} - a_{\min}} \times (K-1) + 0.5 \right\rfloor
连续动作值,被“按刻度四舍五入”成一个整数 token;推理时再把 token 映射回连续值。
  1. 平移分子$a_{\text{cont}} - a_{\min}$ 把动作最小值对齐到 0,相当于把灶台旋钮从 0 刻度开始量。
    Δ=acont−amin⁡\displaystyle \Delta = a_{\text{cont}} - a_{\min}
  2. 归一化分母除以 $a_{\max} - a_{\min}$,把动作范围压到 $[0, 1]$,相当于“旋钮转到的百分比”。
    p=Δamax⁡−amin⁡\displaystyle p = \frac{\Delta}{a_{\max} - a_{\min}}
  3. 放大到格子乘上 $(K-1)$,把百分比映射到 0 到 $K-1$ 的刻度区间。
    s=p×(K−1)\displaystyle s = p \times (K-1)
  4. 四舍五入取整加 0.5 后向下取整,就把连续值落到最近的格子编号上,得到动作 token。
    atok=⌊s+0.5⌋\displaystyle a_{\text{tok}} = \lfloor s + 0.5 \rfloor

联合微调:网页知识与机器人数据

光会读菜谱的大厨不一定颠得动锅。RT-2 既要保留互联网图文带来的“常识”,又要学会真实机械臂的操作习惯。它采用“联合微调”:同一轮训练里,既喂模型网页文本,也喂机器人演示数据。

联合微调比“先读菜谱、后学做菜”更稳。如果先练满互联网数据再单独练机器人数据,模型容易忘记前面学到的知识,这就是灾难性遗忘。把两类数据混在一起,模型每次更新都在兼顾“世界知识”和“操作技巧”。

RT-2 用大量互联网视觉-语言数据做预训练,再用机器人操作数据做联合微调。这样模型背过的“菜谱知识”会在生成动作 token 时被唤醒,比如看到“半熟的鸡蛋”知道接下来可能需要翻面,而不是死记硬背某个固定轨迹。

大厨学徒期每天上午读菜谱、下午练颠勺,而不是先背三年书再碰三年锅。联合微调让两种训练同时发生,才培养出“既有常识又会上手”的机器人帮厨。

L(θ)=Lweb(θ)+λ Lrobot(θ)\displaystyle \mathcal{L}(\theta) = \mathcal{L}_{\text{web}}(\theta) + \lambda\, \mathcal{L}_{\text{robot}}(\theta)
总损失由网页知识损失和机器人动作损失加权相加,$\lambda$ 决定“实操课”的分量。
  1. 网页损失$\mathcal{L}_{\text{web}}(\theta)$ 衡量模型在互联网图文上的预测错误,相当于菜谱阅读考试失分。
    Lweb=−∑log⁡p(xt∣x<t;θ)\displaystyle \mathcal{L}_{\text{web}} = -\sum \log p(x_t \mid x_{<t}; \theta)
  2. 机器人损失$\mathcal{L}_{\text{robot}}(\theta)$ 衡量模型在真实机器人示范数据上的动作预测错误,相当于颠勺实操考试失分。
    Lrobot=−∑log⁡p(at∣image,instruction;θ)\displaystyle \mathcal{L}_{\text{robot}} = -\sum \log p(a_t \mid \text{image}, \text{instruction}; \theta)
  3. 权重系数$\lambda$ 调节两类损失的比重;太大会让模型只会照搬演示,太小则学不会真实动作。
    λ∈[0,1]\displaystyle \lambda \in [0, 1]

泛化能力:跨任务与涌现

顾客说“把红色方块放进绿色碗里”,大厨虽然只练过“拿方块”和“放碗里”,他却能组合这两个动作。RT-2 的泛化能力就来自语言模型把任务拆解、组合的能力。

RT-2 在真实机器人数据集上微调后,面对训练时没见过的指令组合,成功率明显高于 RT-1。它不再只是匹配“图像-动作”模板,而是先做语义理解:认识物体、理解空间关系、推断意图,再转成动作 token。

这种能力被称为“知识迁移”和“涌现”:模型在互联网上见过的物体、场景和动作描述,与机器人的操作目标发生交叉激活。比如它看过“杯子”的图片和“倒水”的文字,就可能把“倒掉杯子里的水”这类新指令拆成可执行步骤。

老板最惊喜的正是这一点:不需要为每个新菜品单独做培训,帮厨会自己“举一反三”。当然,这种泛化不是无限的,它建立在训练数据覆盖的组合成分之上,这也正是下一节 RT-X 强调数据规模化的原因。

RT-X 聚合:跨本体共享

各家餐厅的灶台、锅铲、抽油烟机都不一样,A 店的帮厨经验未必能直接去 B 店。RT-X 项目想做的事,就是把这些“不同后厨”的经验汇成一本通用手册。

RT-X 基于 Open X-Embodiment 数据集,聚合了来自多家机构、多种机械臂、不同摄像头视角的百万级机器人操作数据。它为不同机器人定义了统一的数据格式和动作归一化方式,最后训练出可跨本体执行的操控策略。

跨本体策略共享的关键不是“一份数据喂给所有机器人”,而是数据多样性让模型学到机械臂、夹爪、视角变化下的不变特征。比如 A 店用七轴臂、B 店用单臂加吸盘,模型仍能学到“靠近物体、抓取、移动”的通用模式。

后厨协会的成功之处,不是让每家餐厅改用同一口锅,而是让帮厨在混乱的厨房里也能找到共性。RT-X 让数据规模化成为可能,是 VLA 从实验室走向通用机器人的加油站。

DRT-X=⋃e=1EDe\displaystyle \mathcal{D}_{\text{RT-X}} = \bigcup_{e=1}^{E} \mathcal{D}_e
RT-X 的数据池是 $E$ 个不同机器人数据集之并集,让一种机械臂学到另一种机械臂的经验。
  1. 机器人本体编号$e=1,\dots,E$ 表示参与共享的 $E$ 种或 $E$ 台机器人,相当于各家后厨的编号。
    e∈{1,2,…,E}\displaystyle e \in \{1, 2, \dots, E\}
  2. 单个数据集$\mathcal{D}_e$ 是第 $e$ 种机器人的操作示教数据,记录“当前画面、指令、动作”。
    De={(oi,li,ai)}i=1Ne\displaystyle \mathcal{D}_e = \{(o_i, l_i, a_i)\}_{i=1}^{N_e}
  3. 取并集$\bigcup$ 把数据合并,模型在混合数据上训练,学会不同机器人形态下的共同操作规律。
    DRT-X=D1∪D2∪⋯∪DE\displaystyle \mathcal{D}_{\text{RT-X}} = \mathcal{D}_1 \cup \mathcal{D}_2 \cup \dots \cup \mathcal{D}_E

落地考量:技术可行性、成本与场景适配

老板看完演示很心动,但真要换帮厨,得算一笔账:新设备能不能适配我的后厨?训练和部署要花多少钱?它做的菜是否值得投入?RT-2/RT-X 落地同样要审慎。

技术可行性上,当前 VLA 模型推理仍需较高算力,输出频率往往不足以直接充当底层伺服控制器,通常只输出高层动作目标,再由传统控制器平滑执行。部署成本包括数据采集、模型训练、GPU 推理、安全冗余等。场景适配则要看任务是否属于“视觉-语言-操作”能覆盖的范畴。

常见风险还包括:真实动作分布超出训练数据太多时性能骤降;长尾场景需要持续采数据;以及大模型推理延迟带来的安全风险。因此落地时建议先选“高频、标准、容错高”的场景,比如物流分拣、上料取放,再逐步扩展。

聪明的老板不会因为大厨是米其林大厨就立刻高薪雇佣,而是先看自家菜单是否需要他。RT-2/RT-X 的价值在于通用性,但通用性也需要数据、算力和场景匹配来兑现。

ROI=年节省成本−年部署维护成本年部署维护成本\displaystyle \text{ROI} = \frac{\text{年节省成本} - \text{年部署维护成本}}{\text{年部署维护成本}}
用投资回报率公式提醒:VLA 不是越强越要上,而是算清收益是否覆盖成本。
  1. 年节省成本机器人替代重复人工、减少误操作带来的年收益,相当于省下的帮厨工资和打碎盘子赔偿。
    S=节省人力+减少损耗\displaystyle S = \text{节省人力} + \text{减少损耗}
  2. 年部署维护成本算上硬件、GPU 算力、数据标注、算法团队和现场运维,等于改造后厨的总账单。
    C=Chardware+Ccompute+Cteam+Cops\displaystyle C = C_{\text{hardware}} + C_{\text{compute}} + C_{\text{team}} + C_{\text{ops}}
  3. 比值判断ROI 大于 0 才说明项目值得推进;小于 0 则说明技术能力与业务需求错配。
    ROI=S−CC\displaystyle \text{ROI} = \frac{S - C}{C}

AI 应用场景

仓储物流混合分拣

阶段:模型微调与推理部署

解决的问题:传统分拣需要针对每个 SKU 写视觉抓取模板,换新品要重新标定;RT-2 用自然语言指令“把蓝色易碎品放到缓冲箱”,结合视觉和动作 token 直接输出抓取动作,实现新商品零编程适应。

具体案例:某电商仓有上千种小商品,使用 RT-2 的简化版本在高频货架前做视觉拣选,模型从演示数据和商品图文描述联合微调,分拣员可用语言随时下发新任务。

多形态机械臂数据托管与共享

阶段:数据治理与跨本体训练

解决的问题:不同品牌机械臂的数据格式、坐标定义不同,导致单一场景数据无法复用;RT-X 提供统一的动作归一化和数据格式,让移动底盘、单臂、双臂、吸盘等不同本体共享经验。

具体案例:某智能制造联盟把车间里 20 台不同机械臂的操作片段统一格式,训练一个共享策略,新产线机械臂第一天即可完成“上料、翻转、装配”的基本操作。

Python 演示

python49 行
import math class ActionTokenizer:    def __init__(self, min_val=-1.0, max_val=1.0, num_bins=8):        self.min = min_val        self.max = max_val        self.bins = num_bins     def encode(self, value):        norm = (value - self.min) / (self.max - self.min)        norm = max(0.0, min(1.0, norm))        token = int(math.floor(norm * (self.bins - 1) + 0.5))        return token     def decode(self, token):        ratio = token / (self.bins - 1)        value = self.min + ratio * (self.max - self.min)        return value  class ToyRT2:    def __init__(self, lam=0.1):        self.lam = lam        self.tokenizer = ActionTokenizer(num_bins=8)        self.total_loss = 0.0     def web_loss_placeholder(self, score=1.5):        return score     def robot_loss_placeholder(self, score=0.4):        return score     def cofinetune_loss(self, web_score=1.5, robot_score=0.4):        self.total_loss = web_score + self.lam * robot_score        return self.total_loss     def ask(self, instruction, joint_value):        token = self.tokenizer.encode(joint_value)        action_value = self.tokenizer.decode(token)        return instruction, token, action_value  if __name__ == "__main__":    policy = ToyRT2()    for a in [0.12, -0.45, 0.83, -0.02, 0.99]:        inst, token, action = policy.ask("move to target", a)        print("joint=%+.2f -> token=%d -> value=%+.2f" % (a, token, action))    loss = policy.cofinetune_loss(1.5, 0.4)    print("co-finetune loss: %.3f" % loss)
目的:用一个小型动作标记器和联合微调损失,模拟 RT-2 把连续动作离散成 token、再反离散化执行的过程。
  1. norm = (value - self.min) / (self.max - self.min)把连续动作值归一化到 0 到 1 之间。
  2. token = int(math.floor(norm * (self.bins - 1) + 0.5))四舍五入得到离散动作 token。
  3. value = self.min + ratio * (self.max - self.min)反离散化,把 token 恢复到真实动作刻度。
  4. self.total_loss = web_score + self.lam * robot_score联合微调损失,网页损失加权重后的机器人损失。
  5. print("joint=%+.2f -> token=%d -> value=%+.2f" % (a, token, action))打印量化前后的变化,方便观察离散化误差。

常见误区

误区我以为 RT-2 就是让机械臂的每个电机直接输出连续力矩,大模型越强,控制越丝滑。

正解RT-2 输出的不是连续力矩,而是离散的动作 token;token 需要反离散化后再交给底层控制器。大模型负责“决策下一步”,不负责“电流环”。就像大厨只决定“放半勺盐”,真正把盐撒均匀的是手。

为何常见:因为“大模型”听起来像是万能的,容易忽略机器人控制链路中模型决策与底层执行的分工。

误区动作 token 和单词 token 含义相同,所以机器人真的“理解”了自然语言。

正解动作 token 只是放进语言模型词汇表的离散编号,模型自回归预测它时并不具备人类语义;它依赖联合训练中的视觉-语言表征来完成关联。token 像“菜牌编号”,服务员知道“5号菜”对应什么,但不等于懂美食。

为何常见:因为 VLA 把动作写成 token,会让人误以为模型在“说话”。

误区RT-X 只要把全世界机器人数据堆在一起训练,任何机器人立刻全能。

正解数据要先统一格式、归一化动作、筛选质量,而且不同本体差异很大时策略未必直接迁移。RT-X 的意义是让“共享经验”成为可能,不是自动万能。

为何常见:“数据规模越大越好”的直觉,忽略了跨本体的格式与语义鸿沟。

误区落地 RT-2 只要调用大模型 API,机器人和现有产线不用大改。

正解真实部署要考虑推理延迟、算力成本、安全机制和数据闭环。VLA 通常只生成低频高层动作,还需要传统控制器兜底。像请米其林大厨还要改造厨房,不是换个人就行。

为何常见:大模型 API 的成功经验,让人低估了具身系统软硬耦合的复杂度。

面试题

Q1. RT-2 最核心的架构创新是什么?

单选题 · easy

  • A.增加机械臂关节数
  • B.将动作做成语言token← 正确答案
  • C.用强化学习做预训练
  • D.去掉视觉输入通道

答案:B。RT-2 的突破在于把动作离散成 token 并纳入语言模型输出空间,从而复用语言模型的语义知识。选项 A、C、D 都不是 RT-2 的核心贡献。

Q2. RT-2 输出的动作 token 属于哪种形式?

单选题 · easy

  • A.连续力矩指令
  • B.离散整数编号← 正确答案
  • C.图像像素坐标
  • D.自然语言句子

答案:B。RT-2 将连续动作量化成有限格子的整数编号,类似“菜牌编号”,再和其他 token 一起交给 Transformer 生成。

Q3. 动作标记化时,连续动作值为何要除以动作范围?

单选题 · mid

  • A.增大动作噪声
  • B.将数据归一化到0-1← 正确答案
  • C.让模型更快过拟合
  • D.降低机械臂速度

答案:B。除以 $(a_{\max} - a_{\min})$ 是为了把动作值压到 0 到 1 之间,方便后续映射到离散格子,和过拟合、速度无关。

Q4. 联合微调公式中的 lambda 主要控制什么?

单选题 · mid

  • A.学习率衰减速度
  • B.机器人数据损失的权重← 正确答案
  • C.图像分辨率大小
  • D.机械臂运动速度

答案:B。总损失是网页损失加 lambda 倍的机器人损失。lambda 越大,模型越重视真实操作数据,类似学徒越重视颠勺实操。

Q5. RT-X 数据集的核心价值是什么?

单选题 · mid

  • A.只用同一家机器人数据
  • B.聚合跨本体操作数据← 正确答案
  • C.消除所有视觉输入
  • D.替代底层PID控制

答案:B。RT-X 的核心是融合多种机器人形态的操作数据,让策略学到跨本体通用的规律,而不是只服务单一机械臂。

Q6. 为什么 RT-2 通常不直接输出电机电流环的连续控制信号?

单选题 · hard

  • A.电流环不需要反馈
  • B.语言模型更擅长离散token生成← 正确答案
  • C.电流环是视觉问题
  • D.机械臂没有电机

答案:B。大语言模型天然以离散 token 为输出空间,直接回归连续电流既不符合建模优势,也容易引入不稳定。实际中由底层控制器完成高频执行。

Q7. 以下哪种场景最不适合优先引入 VLA?

单选题 · hard

  • A.高频且动作标准的产线分拣← 正确答案
  • B.需要语义理解的新任务
  • C.低频容错率高的取放料
  • D.长尾多变但数据稀少的装配

答案:A。高频且规范化强的产线分拣用传统视觉和控制方案更稳定便宜;VLA 的推理延迟和算力成本反而成为短板。D 虽然数据少,但 VLA 的语义泛化可能提供帮助。

Q8. RT-2 提升泛化能力的原因包括哪些?

多选题 · mid

  • A.基于预训练语言模型← 正确答案
  • B.动作与文本共享token词汇← 正确答案
  • C.使用海量互联网图文知识← 正确答案
  • D.完全放弃真实机器人数据

答案:ABC。RT-2 借助预训练语言模型、共享 token 词汇和海量图文知识实现跨任务迁移,但绝不是放弃真实机器人数据;没有操作数据,模型学不会实际执行。

Q9. 部署 VLA 项目时要考虑哪些要素?

多选题 · hard

  • A.推理延迟与算力成本← 正确答案
  • B.数据采集和持续更新闭环← 正确答案
  • C.底层控制器的安全兜底← 正确答案
  • D.只依赖宣传效果

答案:ABC。VLA 落地要同时看技术指标、数据运维、算力开销和控制安全。只看宣传效果会让技术能力与业务需求错配,是常见的失败原因。

Q10. 关于 RT-X 跨本体数据,下列说法正确的是?

多选题 · hard

  • A.不同机器人的动作需归一化← 正确答案
  • B.数据融合能提升通用性← 正确答案
  • C.数据集必须来自同一厂家
  • D.模型可学到形态无关特征← 正确答案

答案:ABD。RT-X 需要统一动作格式和归一化,让不同机器人的数据可以混合训练,从而学到与具体机械臂无关的通用特征。它恰恰欢迎不同厂家的数据参与。