☰
统一理解、生成与动作:VLA模型如何重塑机器人操作
2026/10/19 5:37:03 网站建设 项目流程

机器人操作这两年最热的词就是 VLA(Vision-Language-Action),也就是把视觉、语言和动作决策揉进同一个模型里。以前我们做操作任务,基本是“感知一个模块、规划一个模块、控制一个模块”,每次换场景、换物体、换机械臂,都要重新调一轮。VLA 的思路完全不一样:它想让你直接输图像和自然语言指令,模型端到端地输出动作序列。最近公告出来的 InternVLA-A1 这条工作,标题非常直白——“Unifying Understanding, Generation and Action for Robotic Manipulation”,也就是把理解、生成、动作这三件事统一到一个框架里。这篇博文我就基于标题、公开摘要和这类模型常见的实现路径,把这条工作的核心逻辑拆开讲清楚,包括它解决了什么痛点、架构大概长什么样、训练和推理的关键环节是什么,以及我们这些做落地的人能从里面借鉴什么。

这篇文章适合两种人看:一种是刚开始接触 VLA、想快速搞清楚这类模型为什么能火的同学;另一种是自己已经在练机器人和仿真环境、正准备上大模型方案的工程师。我会尽量把原理讲到“为什么”这一层,不光是罗列结构。

1. 从“感知-规划-执行”分层到VLA一体模型,这一步到底卡在哪

1.1 传统操作管线的三个断点

早几年做机械臂操作,最标准的套路是“感知-规划-执行”三层架构:先用目标检测或分割模型找到物体位姿,再交给运动规划库去算轨迹,最后用底层控制器把轨迹跑起来。听起来很合理,但实际用起来有三个很明显的断点。

第一个断点是感知和规划之间的信息丢失。检测模型输出的是“物体类别+包围框+分割掩码”,但规划器需要的往往是“物体朝哪个方向、能不能抓、抓了以后会不会碰撞”。这些信息不是简单多输出几个参数就能补上的,有时候需要为每个物体单独训练位姿估计模型,换一个物体就要重新采集数据。

第二个断点是语言指令无处安放。传统管线里,语言指令通常被解析成固定的 API 调用,比如“把红色方块放到蓝色区域”会被拆成“找到红方块→找到蓝区域→执行 move 命令”。这种规则式解析非常脆,换个说法就失效了,更别说处理“把离我最远的那个杯子拿过来”这种带空间推理的指令。

第三个断点是中间表示是人工设计的,比如三维包围盒、语义地图、抓取点,每种表示都要人去定义和标注。设计表示的过程其实就是把任务知识硬编码进去,一旦任务超出了预设范围,整套系统就失灵了。

这三个断点本质上是同一个问题的三种表现:感知、理解、动作被拆成了互相不通信的黑盒。每个模块只对自己接口负责,谁也不关心下游到底需要什么。

1.2 现有VLA模型的“两头强、中间弱”

VLA 模型的出现就是为了消掉这些人工设计的中间接口,让模型直接从“像素+语言”映射到“动作”。理想情况下,模型自己决定该看哪里、该理解什么、该输出什么动作。

但如果你真去复现或者使用过早期的 VLA 工作,会发现它们普遍存在“两头强、中间弱”的问题。所谓两头强,是指视觉编码和语言理解都直接继承了成熟的 VLM(视觉语言模型)能力,看图表和你聊任务都没问题。所谓中间弱,是指把视觉语言表征“翻译”成动作序列的这层映射不够稳。

具体表现有几个:第一,动作预测经常出现抖动,明明目标物体没动,输出的末端坐标却在小幅漂移;第二,泛化能力集中在“训练时见过的物体和背景”上,换一个颜色相似但形状不同的物体,成功率直线下降;第三,长时间序列的任务容易“跑偏”,前几步走对了,越往后越偏离目标。

为什么会这样?其中一个很常见的原因是把动作分支做得太简单,比如只在语言模型的最后一层接一个 MLP 或者一个小型 transformer 来输出动作。这样做的潜台词是:动作信息已经完整包含在 VLM 的特征里了,只需要一个轻量头把它读出来。但实际操作里,动作序列涉及时序连续性、空间精度和物理约束,这些信息并不能完全靠“最后一层 token 的隐状态”压缩住。

1.3 InternVLA-A1给自己设定的目标

InternVLA-A1 的标题里最关键的是 “Unifying” 这个词,统一。它想做的不是“VLM + 一个动作头”这种拼接式方案,而是让理解、生成、动作三者在同一个模型内部共享计算、互相增强。

我可以这样理解它的目标:模型既要能看懂当前画面里发生了什么(理解),又要能根据指令生成合理的自然语言反馈或任务解释(生成),还要能输出真正可执行的机械臂动作(动作)。这三种能力不应该各自独立,而是共享一套多模态表征。比如“理解”到了物体之间遮挡关系,“生成”环节才能用语言描述任务状态,“动作”环节才能避开遮挡物去抓取目标。

这听起来像是把三个任务放进一个多任务学习框架,但难点在于这三个任务的输出形态完全不一样:理解的输出是标签或对齐关系,生成的输出是离散 token,动作的输出是连续的高频控制信号。要让它们在一个模型里和谐共存,就必须解决好表征共享和梯度冲突的问题。后面的架构部分我会详细拆解。

2. 架构解剖:如何把视觉理解、语言生成和动作输出放在同一个前向里

2.1 输入侧:不只有图片,还有历史帧、深度与关节状态

大多数 VLA 模型的输入都不只是一张当前帧的 RGB 图像。如果你只在单帧画面里做决策,很多关键信息是缺失的,比如物体的运动趋势、机械臂当前关节角度、目标是否被遮挡。InternVLA-A1 这类工作沿用的是多模态大模型的输入范式,但输入范围明显比纯 VLM 更宽。

常见做法是这样组合输入:

  • 当前帧图像:往往是来自相机视角的 RGB 图,用于识别物体、场景和指令相关的实体。
  • 历史帧图像:取前几帧或关键帧,帮助模型理解动态变化,比如物体是否在移动、机械臂是否已经接近目标。
  • 机械臂状态:包括关节角度、末端位姿,有时候还有夹爪开合状态。这些数值会被编码成文本或者向量 token,与视觉 token 一起进入模型。
  • 自然语言指令:任务的语义描述。这是 VLA 与普通视觉运动策略最大的区别,指令可以复杂到包含空间关系和顺序约束。

这里有一个大多数博客不会提的细节:多视角输入的处理。很多真实操作场景里,相机会有手眼(装在机械臂上)和固定视角两个位置。手眼视角能看到细节但视野窄,固定视角能看到全局但容易被遮挡。把两个视角的图像都塞进模型,需要模型自己学会“何时看哪里”。这一类视角融合本身就可以写成一篇论文,InternVLA-A1 这类统一模型的做法通常是把不同视角的图像各过一遍视觉编码器,然后在 token 序列拼接时加上视角标记,让模型通过注意力自己去权衡用哪个视角。

2.2 主干:复用视觉-语言预训练,动作头作为第三种解码出口

这一节是全文的核心,我尽量讲清楚。

VLA 模型的骨干网路通常直接复用大规模视觉语言预训练模型的权重,这是它能“理解世界”的底气。InternVLA-A1 的名字里带 “Intern” 前缀,大概率也是继承了相关视觉语言基础模型的那套能力。具体到实现,输入图像先被视觉编码器切成 patch token,语言指令被分词成文本 token,两类 token 拼接后送入一个 decoder-only 的大语言模型(LLM)骨干。这个骨干做的事情本质上是“多模态序列建模”——在视觉 token 和文本 token 之间建立注意力关系,也就是模型对场景的理解。

重点在于输出侧怎么设计。传统 VLM 唯一的输出出口是文本 token 的概率分布,而 VLA 模型需要多一个出口:动作序列。InternVLA-A1 的做法(按照这类统一模型的通用技术路线推断)是在 LLM 末端设置多组解码头:

  • 文本解码头:负责生成自然语言反馈、任务描述、推理过程。这部分和标准 VLM 完全一致,用交叉熵损失训练。
  • 动作解码头:负责把模型的隐状态映射成动作序列。这个头接收的通常不是最后一个 token 的隐状态,而是整段序列的汇总状态,然后通过自回归方式逐个预测未来时间步的动作。

为什么动作头不能简单用“最后一个 token 输出一个动作”?因为一个操作任务往往需要连续多步控制信号,比如要把杯子从 A 点搬到 B 点,中间可能要输出上百个控制指令。如果只输出一步动作,整个任务就必须反复调用模型推理,效率低且容易累计误差。所以现在主流做法是action chunking:一次前向预测未来 T 步的动作序列,然后滚动执行。InternVLA-A1 如果按这个方向做,它的动作头应该是在隐状态后面接位置编码,逐 time step 解码出一个动作向量序列,而不是只输出一个向量。

2.3 动作token化:连续控制变量怎么变成模型能学的离散序列

这里有一个绕不开的问题:语言模型的输出是离散 token,但机器人动作是连续的坐标或关节角。物理世界不接受“概率分布”,它只接受具体的力矩或位置指令。怎么把这两个世界衔接起来?

目前业界有两条路线。一条是连续回归路线,也就是动作头直接输出浮点数向量,用回归损失(比如 L1 或 MSE)训练。这样做的好处是精度高、不需要量化误差,坏处是和 LLM 的离散 token 训练方式存在一定的模态鸿沟,梯度更新时容易互相干扰。另一条是离散 token 路线,把动作空间量化成若干“动作词”,模型只需要预测动作词的 ID,然后再解码成连续值。好处是训练范式统一、可以完全复用语言模型的生成机制,坏处是量化精度有限,动作粒度不够时会出现抖动。

InternVLA-A1 这种“统一理解、生成、动作”的模型,我倾向于判断它采用的是混合策略:语言部分用离散 token 的交叉熵,动作部分用连续输出的回归损失,但动作头本身的时序建模借用了语言模型的自回归思路。这样设计的考虑是:理解任务强调整体语义,适合离散的、抽象的表示;动作任务强调物理精度,需要保留连续数值。两个分支共享同一个主干,但在输出层各走各的路,损失函数也分开加权。

2.4 损失函数与梯度分配

多任务模型的训练难点在于损失怎么配比。理解、生成、动作三个任务如果平分梯度,最终结果往往是啥都学不好。常见的处理策略有两种。

一种是固定权重相加:总损失等于文本损失加动作损失,用两个超参数控制比例。简单但脆弱,不同任务损失量级差异很大,比如动作回归的 L1 损失很容易比文本交叉熵大一两个数量级,直接把文本信号淹没。解决方式是先对每个损失做归一化或者用不确定性加权。

另一种是分阶段梯度冻结:在预训练阶段只更新视觉编码器和语言骨干,不更新动作头;到了操作微调阶段再解开动作头,同时把视觉语言部分的梯度减小。这样做有一个非常实际的动机:如果一开始就让三个任务同时优化,视觉语言预训练积累的语义知识可能被动作任务的高频梯度破坏掉,也就是所谓的灾难性遗忘。

从标题 "Unifying" 的角度看,InternVLA-A1 强调的不是简单相加,而是希望三种任务互相受益。实现“互相受益”的手段通常是在注意力模块上做文章:理解任务会强化“哪个物体对应哪个指令”的对齐,生成任务会强化“如何用语言描述当前状态”,动作任务会强化“当前状态应该采取什么控制量”。这三个任务共享的注意力权重会被训练得更加鲁棒,因为它们从不同角度对同一场景进行压力测试。

3. 从训练到推理的关键工程细节

3.1 数据配比与跨本体泛化

VLA 模型对数据的渴求程度远超普通视觉模型。一个能用的操作模型,除了需要互联网级的图文数据做预训练,还需要海量的机器人操作轨迹来教会模型“动作长什么样”。

这里有个很现实的问题:机器人操作数据非常昂贵,一条高质量的操作轨迹需要真人遥操作录制,一分钟的数据可能要花十几分钟采集,还得同步记录多视角视频、关节状态、夹爪状态和语言描述。所以这一领域普遍的做法是混合数据训练策略:

  • 第一阶段用大规模图文数据训练模型的“理解+生成”能力,让模型掌握物体识别、空间关系、指令跟随这些基础能力。
  • 第二阶段混入少量但高质量的操作轨迹,让模型学习“从特征到动作”的映射。
  • 第三阶段针对特定任务或特定机械臂做微调,适配实际部署环境。

操作数据占比通常很低,可能只有总训练数据的百分之几,但作用却是决定性的。这也解释了为什么很多 VLA 论文里 “数据配比” 和 “数据质量过滤” 是必讲的重点:不是所有轨迹都值得学,失败的轨迹如果混进去,模型会学会一些奇怪的动作模式。

3.2 两阶段训练:先从“看懂世界”,再到“动手操作”

InternVLA-A1 这类工作几乎都会采用两阶段训练策略,理由我在 2.4 里提过一部分,这里展开说。

第一阶段是冷启动预训练。这时候模型的目标是“看懂世界”:输入图像和文本,输出正确的文本描述,或者完成视觉问答。这个阶段完全不碰动作输出头,或者只给动作头一个极小的学习率。这样做的收益是:视觉编码器和语言骨干可以把预训练权重稳定地迁移到机器人领域,而不是在一开始就被动作任务的分布拉偏。

第二阶段是操作指令微调。这时才正式引入操作轨迹数据,同时打开动作头。为了不让微调破坏预训练学到的通用能力,通常的做法是降低视觉编码器的学习率、冻结部分底层模块,只更新语言骨干的高层和动作头。有些实现甚至会周期性混入预训练数据,防止模型忘掉“理解+生成”能力。

这个两阶段设计直接回应了标题里的 “Unifying” 难点:如果三种能力同时从零开始学,数据量根本不够;但如果完全分开学,又没有做到真正的统一。两阶段本质上是一个妥协方案——先建立共同的世界模型,再在这个模型上长出动作能力。

3.3 推理策略:动作分块、温度采样与频率控制

训练完之后,部署时还有几个非常影响实际效果的细节。

第一个是动作分块长度。前向一次能输出未来 T 步的动作,这个 T 怎么选?选大了,模型预测能力有限,后几步动作可能明显脱离实际场景;选小了,模型推理频率太高,跟不上机器人的控制周期。从实际项目经验看,T 选在 8 到 32 之间比较常见,具体要看动作频率和任务的连贯性。简单任务可以选小一点,长程任务必须选大一点,让模型有“提前规划”的余量。

第二个是采样策略。文本生成时我们常用温度采样增加多样性,但动作输出绝对不能乱加随机性。一个非常稳的做法是:模型滚动预测多组动作序列,从中选一个在平滑性和可行性上得分最高的。这就相当于把语言模型里的 beam search 思想搬到了动作空间。

第三个是重试机制。视觉语言模型再强,单次推理也可能判断失误。实操时可以在系统层面设计“失败检测+自动重试”的回路:机械臂执行完一串动作后,拍照检查任务是否完成,没完成就带着新观察到的图像重新推理。好的 VLA 系统,成功是靠“单次准确率 × 重试次数”堆出来的,而不是指望单次输出永远正确。

3.4 实时性:只看图注,模型的端侧部署成本

很多人对 VLA 模型最大的疑虑是:这么大的模型,能跟上机械臂的实时控制吗?

答案是:取决于你用在哪一层。如果把 VLA 当成高频伺服控制器,比如每 10 毫秒输出一次关节力矩,目前任何基于 LLM 的 VLA 都做不到,它们太慢了。但实际部署中 VLA 通常承担的是任务规划层或低频决策层的角色:每隔几百毫秒或一两秒看一次画面,输出未来一小段动作序列,这段动作序列会作为一个目标交给底层的位置控制器去执行。也就是说,VLA 负责“想”,底层 PID 或动力学控制器负责“执行得稳”。

这样的分工决定了推理延迟的要求没那么苛刻,但依然有优化空间:量化、剪枝、视觉编码器蒸馏、动作头的轻量化,都是常见手段。实操经验是,先把视觉编码器换成更小的版本,往往能省下一半以上的推理时间,动作精度损失却很小,因为真正决定动作的是语言骨干和动作头。

4. 评测与消融:统一框架的收益和付出是如何被验证

4.1 基准与指标设计的陷阱

每个做 VLA 的工作都得过评测这一关,但机器人操作任务的评估本身就是个老大难。仿真环境里的成功率可以量化,但仿真和现实之间的 gap 大家心知肚明;真实机器人上评估最可信,却费时费力且难以标准化。所以大多数工作会做这样几层评估:

  • 单任务成功率:固定场景、固定物体,跑几十次看成功率,这是最基本的指标。
  • 多任务平均成功率:跨多个任务模板求平均,考察模型的指令跟随能力。
  • 泛化测试:换新物体、新背景、新视角,甚至新机械臂,看模型是不是只会“背题”。
  • 长程任务完成率:多步骤任务,中间任何一步错了都算失败,这个指标最能暴露模型的累积误差问题。

从标题 "Unifying Understanding, Generation and Action" 的意图看,这篇工作应该也花了篇幅证明“统一”的价值:也就是同时训练三种能力,比单独训练动作能力效果更好。要证明这一点,最直接的手段就是消融实验——把生成任务去掉,或者把理解任务去掉,看动作成功率会不会下降。

4.2 消融实验揭示的几个关键差异

按这类模型通用的评估方法,消融实验里通常会看到几个有代表性的现象。

第一个现象是:去掉生成任务,动作成功率往往不降反升,但泛化能力下降。原因是生成任务会把模型的一部分容量用在“组织语言”上,单看操作这个指标,它其实是干扰项。但一旦到新场景,模型需要借助内部语言描述来推理“这个新物体大概是什么、该怎么抓”,生成能力的缺失就会暴露出来。

第二个现象是:去掉理解任务,短程动作学得很快,长程任务容易崩。理解任务教的是“场景里有哪些实体、它们之间是什么关系”,这正是长程任务最需要的信息。没有这层能力,模型就像在玩盲盒式的连续决策,每一步都靠局部线索猜,任务一长必然走偏。

第三个现象是:动作头共享主干有助于跨本体迁移。训练时如果见过不同机械臂的轨迹,模型学到的动作表征会偏向于“任务空间语义”而不是“某个机械臂的关节空间语法”。这也就是为什么标题强调统一框架——统一不仅仅是把能力堆在一个模型里,而是让动作信息反哺理解,理解信息反过来引导动作生成。

4.3 失败案例边界:长程任务和多物体堆叠

再好的模型也有明显的边界条件。这类统一 VLA 模型最常见的失败模式,按我的经验排序,第一是多物体堆叠场景下的抓取规划:模型能认出每个物体,但很难在纯视觉层面判断“先抓哪一个才不会塌”。这种任务需要的是物理常识,而不是视觉语言理解,而物理常识恰恰是当前大模型的短板。

第二是动态场景。如果物体在移动,或者机械臂需要追踪一个运动目标,VLA 的输出延迟和动作分块长度都会成为硬约束。模型看到的是过去几十毫秒的画面,输出的是未来几百毫秒的动作,预测的误差在动态场景里会被放大。

第三是高精度装配类任务。插孔、拧螺丝这类任务要求毫米级甚至亚毫米级的精度,而 VLA 输出的动作通常在厘米级误差范围内,必须靠底层力控或视觉伺服来兜底。这也是为什么我一直强调,VLA 的定位是“决策层”而不是“伺服层”。

5. 对实操者和研究者的参考价值

5.1 小算力团队怎么“蹭”这套思路

很多团队看到 VLA 第一反应是:“我们没那么多 GPU,也没数据,玩不起。”其实 InternVLA-A1 这类工作的最大价值不在于让你完完整重复训练一遍,而在于它的训练范式是可以裁剪借鉴的。

如果你只有一张消费级显卡,可以这样做:不开源的大模型拉不起来,那就用开源的小型 VLM 做基座。先把操作轨迹数据整理成 “图像+指令→动作” 的多模态样本,冻结视觉编码器和语言骨干,只训练一个动作头和一部分高层的 LoRA 适配器。这样做的显存开销会小很多,且因为借鉴了两阶段训练的隔离思想,动作头训练时不会把语言能力冲掉。

这里有一个从工作实践中总结的经验:数据的统一组织比模型架构更值得先投入。把不同来源、不同视角、不同机械臂的操作轨迹统一成同一种格式(例如 “图像序列 + 语言指令 + 关节目标序列”),这本身就是一套基础工程,但做好了能让后续所有模型尝试都事半功倍。

5.2 复现场景中容易踩的坑

如果真想复现类似 InternVLA-A1 的完整流程,我有几个印象深刻的踩坑经验可以分享。

第一个坑是动作坐标系的混乱。不同数据集的轨迹记录可能用的是不同坐标系:有的记录世界坐标系,有的记录机械臂基座坐标系,有的记录相机坐标系。如果不做统一,模型训练时会在不同坐标系之间来回“横跳”,表现为验证损失一直在降但实际抓取成功率几乎为零。

第二个坑是动作频率不一致。有的轨迹每秒记录 10 个控制点,有的是 30 个。拼接训练时,模型会对动作节奏产生混淆。解决办法是统一重采样到固定频率,或者给每个轨迹带上时间戳特征,让模型自己学会节奏。

第三个坑是语言指令过度模板化。如果采集数据时指令永远是 “pick up the red cube” 这种句型,模型会变成只会套模板的“翻译器”,稍微换一种表达(比如 “give me that red block”)成功率就崩。真实项目里最好在数据采集时让不同操作员用各自习惯的表达方式描述任务,越乱越好,这样才能逼模型真正理解语义而不是记句型。

5.3 下一步:多机多臂协同与在线自适应

这篇论文标题里说 “Unifying Understanding, Generation and Action”,其实往远了看,这种统一框架的下一步一定会往两个方向走。

一个是多机多臂协同。当场景里有多台机械臂时,模型不仅要输出单臂动作,还要调度多臂之间的配合:谁负责抓取、谁负责固定、谁负责装配。理解任务这时候要理解的不只是物体,还有“队友当前在做什么”;生成任务则要输出协作指令;动作任务要同时考虑碰撞规避。这一切放在同一个模型里天然合适,因为决策所需的上下文本来就是共享的。

另一个是在线自适应。现在的 VLA 模型都是离线训练、冻结部署,不会因为连续失败而改变策略。真实场景要求模型具备一定的在线学习能力,比如在部署初期快速适应新物体的抓取策略。统一框架的优势在于:理解、生成、动作共享特征空间,模型可以通过少量交互数据在某个分支上快速微调,顺带改善其他分支的表现。这种利用多任务相关性来降低在线学习样本量的思路,我相信会是接下来的研究热点。

从我个人的实操体会来讲,VLA 模型的迭代速度比大多数人预想的要快。半年前还在为“模型能不能输出平滑轨迹”发愁,现在已经有不少团队把这类模型跑在真实产线场景里做上下料和分拣了。InternVLA-A1 所强调的统一框架,本质上是在给机器人一张“通用的世界模型门票”:它不解决所有问题,但它把理解、生成和动作之间的人工隔墙拆掉了。对于想入局这个方向的人来说,尽早把手里的数据整理好、把坐标系和动作频率规整好,比追着看每一篇新论文架构要有用得多。

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

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

立即咨询