2. VLA基础认知
VLA(Vision-Language-Action Model,视觉-语言-动作模型)是一类把视觉感知、自然语言指令与机器人动作生成统一到同一模型中的具身智能方法。它要解决的核心问题是:让机器人不再依赖人工编写的规则或单一任务策略,而是能够理解“把红色杯子放到托盘左边”这类开放语言指令,观察当前场景,并直接输出可执行的动作序列。与只做图像分类的视觉模型、只做文本生成的语言模型不同,VLA 的输出必须落到物理世界,因此它同时受到语义理解、空间推理、时序决策和底层控制的多重约束。
一句话定义:VLA 是以视觉观测和语言指令为条件输入,以机器人动作为输出目标的端到端或模块化具身模型。它的关键不是“看懂”或“会说”,而是“看懂并说清之后还能做对”。
一、核心原理:从多模态输入到动作输出
VLA 的典型结构可以拆成四个环节:视觉编码、语言理解、跨模态融合、动作解码。视觉编码器把 RGB 图像、深度图或多视角图像转成视觉 token;语言编码器把指令转成文本 token;融合模块通过交叉注意力或统一 Transformer 让两种 token 对齐;动作解码器则输出动作 chunk、末端位姿增量、关节目标或离散动作 token。与纯文本模型不同,VLA 的动作输出通常具有时间维度,例如一次预测未来 8 到 16 步的动作序列,再由底层控制器执行。
从学习范式看,VLA 常见三条路线:一是模仿学习,用人类遥操作或示范数据训练策略;二是离线强化学习,从已有轨迹中学习价值与策略;三是视觉语言预训练 + 动作微调,先利用大规模图文数据获得语义泛化,再用机器人数据对齐动作空间。当前主流 VLA 多采用第三条路线,因为纯机器人数据规模远小于互联网图文数据,预训练能显著提升开放指令理解能力。
二、发展脉络:从模块化到端到端
VLA 并非突然出现,它经历了三个明显阶段。早期是模块化流水线:目标检测、语言解析、任务规划、运动控制各自独立,优点是可控,缺点是误差逐级累积,且难以处理开放语言。中期是多模态大模型 + 动作头:以 CLIP、LLaVA 等视觉语言模型为骨干,外接动作解码器,开始具备零样本指令理解能力。近期则走向统一端到端 VLA,如 RT-2、OpenVLA、π0 等,把动作离散为 token 或使用扩散/流匹配生成连续动作,直接在机器人数据上微调,显著提升了泛化性和动作平滑度。
这一脉络背后的推动力有三点:一是 Transformer 统一了多模态表征;二是大规模机器人数据集和仿真环境降低了数据门槛;三是动作表示从单步回归转向动作 chunk 和生成式建模,使高频控制更稳定。
三、典型应用场景
- 桌面抓取与放置:根据“把蓝色积木放进盒子”等指令完成目标定位、抓取和放置,是 VLA 最常见的验证场景。
- 家庭服务:整理桌面、开关抽屉、递送物品,要求模型理解日常语言和杂乱场景。
- 工业分拣:在传送带或料框中识别指定零件并抓取,强调节拍和成功率。
- 移动操作:结合底盘导航与机械臂操作,完成“去厨房拿一瓶水”等长程任务。
- 人机协作:理解“先别动”“往左一点”等交互指令,实现动态修正。
四、机器人学习范式对比
| 范式 | 数据来源 | 优点 | 局限 | 典型代表 |
|---|---|---|---|---|
| 模仿学习 | 人类遥操作示范 | 实现直接、样本效率较高 | 分布外泛化弱、误差累积 | ACT、Diffusion Policy |
| 离线强化学习 | 已有轨迹 + 奖励标注 | 可利用次优数据、优化长期回报 | 奖励设计难、训练不稳定 | IQL、CQL |
| 视觉语言预训练 + 动作微调 | 互联网图文 + 机器人数据 | 开放指令泛化强、语义先验好 | 动作对齐成本高、推理较慢 | RT-2、OpenVLA、π0 |
五、常见误区与复盘
误区一:把 VLA 当成“更大的视觉语言模型”。VLA 的难点不在语言生成,而在动作空间连续、时序依赖强、物理约束硬。只堆语言能力而不解决动作表示,机器人仍然做不对。
误区二:认为端到端一定优于模块化。端到端泛化好,但调试困难、安全边界模糊;工业场景中模块化仍有一席之地。选型要看任务开放度和可靠性要求。
误区三:忽视动作表示。动作是离散 token、连续回归还是扩散生成,直接决定训练稳定性和控制频率。动作表示工程是 VLA 落地的关键环节。
复盘建议:评估一个 VLA 系统时,先看它输出什么动作表示、预测多长动作 chunk、控制频率多少,再看视觉语言骨干和训练数据配比。动作接口没对齐,后面的语义能力很难转化为真实操作成功率。
# 一个典型 VLA 推理伪代码
obs = get_camera_images() # RGB / depth
instruction = "把红色杯子放到托盘左边"
tokens = vision_encoder(obs) + text_encoder(instruction)
fused = cross_modal_transformer(tokens)
action_chunk = action_head(fused) # shape: [T, action_dim]
for a in action_chunk:
robot.step(a) # 底层控制器执行
理解 VLA 的定义、脉络、场景与学习范式,是后续进入数据集构建和动作表示工程的前提。只有先明确“输入是什么、输出是什么、数据从哪来、动作怎么表示”,才能在具体工程中做出合理的技术选型。