ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VLA 架构全解:从动作分词到 RT-2/Octo/OpenVLA 的机器人大脑(Maths, CS AI Compendium 第 11 章)

VLA 架构全解:从动作分词到 RT-2/Octo/OpenVLA 的机器人大脑(Maths, CS  AI Compendium 第 11 章) VLA 架构全解从动作分词到 RT-2/Octo/OpenVLA 的机器人大脑Maths, CS AI Compendium 第 11 章【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium本文基于 Maths, CS AI Compendium 第 11 章Autonomous Systems的 Vision-Language-Action Models 一节展开系统讲解视觉-语言-动作模型VLA的核心架构、动作分词action tokenisation、RT-2 / Octo / OpenVLA / π0 等代表性模型、预训练配方与泛化评测协议并给出可直接运行的 JAX 实战代码。读完本文你能理解 VLA 如何把看图、听指令、出动作折叠进同一个 Transformer并能亲手实现动作离散化、动作分块action chunking与多模态动作分布的仿真验证。从感知与控制管线到单一网络VLA 的动机在本书第 11 章的前两篇——Perception感知世界与 Robot Learning控制身体中机器人系统采用传统分段管线感知模块检测物体、语言模块解释指令、控制模块生成动作。每个模块各自独立设计、训练和调试。VLAVision-Language-Action models把这条管线压缩成单一神经网络输入图像vision和自然语言指令language直接输出运动指令action一个模型端到端。这与第 10 章Multimodal Learning中看到的统一趋势一脉相承——多模态模型将视觉与语言理解合并进同一架构VLA 则把这一统一进一步延伸到物理动作。核心洞察是语言是指定任务的天然灵活接口拿起红色杯子放到架子上而大型预训练视觉语言模型已经同时理解图像和指令。回顾 Vision Language ModelsLLaVA、Flamingo 这类 VLM 以图像和文本为输入、以文本为输出。VLA 的提问是如果输出不再是文本而是机器人动作呢模型不再生成红色杯子在桌子左侧而是生成一串驱动机械臂抓起杯子的运动指令。关键的架构洞见是动作可以像单词一样表示为 token。VLM 用 next-token prediction 逐词生成语言VLA 用同样方式逐 token 生成动作。Transformer 并不真正关心输出 token 是cup还是夹爪前进 2cm。这将机器人控制重新表述为序列建模问题第 7 章 Transformers 所擅长的模型学习的是映射$$(\text{image observation},\ \text{language instruction}) \to (\text{sequence of action tokens})$$VLA 的三大组件一个典型 VLA 由三个组件构成视觉编码器Vision encoder把相机图像变成视觉 token。通常是预训练 ViT第 8 章或 SigLIP 编码器第 10 章。图像被切成 patch每个 patch 嵌入为一个 token与标准 Vision Transformer 完全一致。语言模型骨干Language model backbone预训练 LLM如 LLaMA、PaLM处理视觉 token 与语言 token 交错的序列。推理发生在这里模型通过同时关注指令和视觉特征来理解拿起红色的杯子。动作头Action head把 LLM 输出映射为机器人动作。可以是一个简单 MLP将最后一个 hidden state 映射到连续动作值也可以是分词方案把动作转成离散 token由 LLM 现有词表来预测。整体架构可以写成$$\text{Image} \xrightarrow{\text{ViT}} \text{visual tokens} \quad \quad \text{Instruction} \xrightarrow{\text{tokeniser}} \text{language tokens} \quad \xrightarrow{\text{LLM}} \quad \text{action tokens}$$视觉 token 与语言 token 拼接或交错后送入 Transformer 骨干自回归地产出动作 token。这与 VLM 是同一套架构区别仅在于输出模态是动作而非文本——这意味着可以直接复用成熟的 LLM 基础设施训练框架、词表扩展、推理引擎。动作分词离散化、分块与学习型分词器机器人动作是连续的关节速度、末端执行器位置、夹爪开合宽度。要让 LLM 生成它们必须先转成离散 token。**均匀离散化uniform discretisation**是最简单的做法。每个动作维度在其有效值域上被划分为 $N$ 个 bin。例如 x 方向速度范围 -0.1 到 0.1 m/s、使用 256 bins 时每个 bin 代表 $\frac{0.2}{256} \approx 0.8$ mm/s。动作值被映射到最近的 bin 索引该索引即为 token。以 7 个动作维度6 DoF 夹爪× 256 bins 为例动作词表有 $7 \times 256 1792$ 个 token它们被追加到 LLM 现有文本词表之后。模型像生成单词一样自回归地逐维度生成动作 token。分箱数决定了控制精度bin 越密量化误差越小但词表和生成步数也相应增长——后文实战部分会用代码实测这一权衡。**动作分块action chunking**一次性预测多个未来时间步而不是单步动作。若 chunk 长度为 $H$模型输出 $H \times d$ 个 token$d$ 为动作维度。这对平滑、时间连贯的运动至关重要单步预测中每一步都独立容易产生抖动分块迫使模型规划一条短轨迹捕捉时间结构。更复杂的方案使用 Image and Video Tokenisation 中的VQ-VAE 学习型分词VQ-VAE 编码器把连续动作序列映射为离散码本索引序列解码器从索引重建连续动作LLM 只需生成码本索引。这与图像分词器把视觉信息压缩进紧凑离散码的思路完全类比。代表性 VLA 模型RT-2Robotic Transformer 2Google DeepMind是首个大规模 VLA。它取预训练 VLMPaLM-E 或 PaLI-X最多 55B 参数在机器人演示数据上微调。动作被表示为文本字符串token 序列1 128 91 241 5 101 127编码一个 7 维动作每个数字是一个 bin 索引。RT-2 展示了惊人性质VLM 骨干的涌现能力会迁移到机器人领域。模型能执行机器人数据中从未出现的概念性指令例如把香蕉移到以 A 开头的国家需要视觉识别 世界知识 动作生成。VLM 的语言理解与视觉推理几乎是免费获得的。其局限是只在单一机器人本体特定机械臂 特定夹爪的数据上训练无法泛化到其他机器人。**OctoUC Berkeley是开源的本体无关embodiment-agnostic**VLA目标是跨不同机器人平台工作核心创新有三扩散动作头替代自回归 token 预测动作头取 Transformer 输出通过去噪扩散过程第 8 章生成动作天然处理多模态动作分布——同一个任务往往存在多条都有效的完成路径。灵活的观测与动作空间为不同机器人构型使用任务专用分词器在 Open X-Embodiment 数据集上预训练该数据集包含 22 种不同机器人本体的演示。高效微调用少至 100 条演示即可微调到新机器人使数据有限的实验室也能落地。OpenVLAStanford、UC Berkeley走微调现成开源 VLMLlama-based的路线7B 参数骨干、均匀动作分词每维 256 bins、在 Open X-Embodiment 数据上训练。其优势是简单——标准 VLM 架构加上动作 token 追加进词表可以用现有 LLM 基础设施直接训练与部署。**π0Physical Intelligence**代表了当前先进水平预训练 VLM 骨干 flow matching 动作头。Flow matching见 Vision Transformers and Generation 与 Cross-Modal Generation学习一个速度场把噪声沿直线路径输运到动作分布产生平滑、时间连贯的动作轨迹。π0 展示了跨多个机器人本体的通用性覆盖双臂操作与灵巧手控制。预训练配方三阶段训练与数据稀缺问题VLA 从预训练 VLM 骨干获益巨大因为后者已经理解视觉场景与语言。典型训练管线分三个阶段VLM 预训练在数十亿图文对上训练或使用现成的视觉语言模型——CLIP、SigLIP、LLaVA 式训练第 10 章内容。机器人数据共训练co-training在互联网数据 机器人演示数据的混合上微调 VLM。互联网数据防止视觉与语言理解的灾难性遗忘机器人数据教会动作生成。混合比例很关键机器人数据太多会退化语言理解太少则学不会动作。任务级微调可选针对特定任务或机器人的演示数据微调通常配合 LoRA第 10 章压缩可训练参数量。数据量差异解释了为什么必须从预训练 VLM 起步VLM 预训练用数十亿张图像而最大的机器人数据集Open X-Embodiment总共也只有百万帧量级二者差好几个数量级。视觉与语言表征可以直接迁移只有动作映射需要从小规模机器人数据中现学。泛化四个轴与 held-out 评测VLA 的承诺是泛化执行训练中没见过的任务、操作没见过的物体、适应没见过的环境、服从没见过的指令。VLA 沿四个轴泛化新物体VLM 骨干从互联网预训练中认识了物体。模型若从网络图像知道螺丝刀长什么样即使演示数据从未包含螺丝刀也能操作它。新指令组合式语言理解支持已知概念的新组合。把蓝色方块叠到绿色方块上即使训练只演示过叠红色方块也能成立因为颜色形容词来自语言预训练。新环境视觉编码器在多样网络图像上预训练因此跨视觉域不同桌面、光照、背景有一定迁移但存在边界——实验室训练的机器人在杂乱厨房里可能失效。新本体最难的轴。不同机器人的动作空间不同关节角 vs 末端速度、传感器不同腕部相机 vs 顶视相机、物理能力不同。Octo、π0 这类本体无关模型用灵活分词器和跨本体预训练来应对。泛化在held-out tasks上评测让机器人执行从未训练过的任务。在新型任务上 50–80% 的成功率被认为是强结果对照分布内任务的 90%。随着模型规模与机器人数据集增长这个差距正在缩小。本体无关模型一个模型多只机器人领域正走向一个模型多只机器人不再为每种机器人单独训练策略而是单个 VLA 处理多种本体。这要求解决动作空间失配问题7 DoF 双臂夹爪有 7 维动作双臂构型有 14 维四足有 12 维人形有 30 维。动作分词必须足够灵活以兼容所有情况。常见解法填充动作向量padded action vectors取最大动作空间较小的补零。按本体分动作头per-embodiment action heads共享 Transformer 骨干 每种机器人一个小型 MLP。归一化动作表示所有动作表达在同一参考系如世界系下的末端执行器速度使不同机器人产生相似末端运动时共享同一批动作 token。共享骨干学习通用的视觉/语言理解与共性操作策略从上方接近、与物体对齐、闭合夹爪本体特定组件只负责把这些高层策略翻译成具体电机指令。基准与评测协议VLA 评测的独特难点在于必须依赖实体机器人实验或高保真仿真SIMPLERSimulated Manipulation Policy Evaluation for Robot learning提供标准化仿真环境无需实体硬件即可横向对比 VLA 性能其与真实世界成功率相关性良好支持可复现的基准测试。Open X-Embodiment数据集与基准聚合了 22 家机构、多种机器人平台的数据提供演示数据的标准化格式与跨本体迁移的公共评测套件。真实世界评测仍是金标准典型协议为定义一组任务及明确成功标准物体到达目标位置、选中正确物体、限时内完成任务每个任务跑 $N$ 次试验通常 10–50 次报告带置信区间的成功率纳入 held-out从未训练任务以度量泛化。动手实战JAX 实现动作分词、分块与多模态分布本节完整继承原文档的三个 Coding TaskCoLab 或本地 notebook 均可运行代码基于 JAX。任务 1动作分词与量化误差把连续动作离散化为 bin 再重建观察量化误差随 bin 数的变化。7 维动作 6 DoF 夹爪各维度在给定 min/max 范围内归一化后取 bin 索引重建时用 bin 中心tokens 0.5反算这是均匀分词的标准约定import jax.numpy as jnp # Continuous action: 7 dimensions (6 DoF gripper) action_true jnp.array([0.023, -0.051, 0.012, 0.1, -0.03, 0.005, 0.8]) action_min jnp.array([-0.1, -0.1, -0.1, -0.5, -0.5, -0.5, 0.0]) action_max jnp.array([ 0.1, 0.1, 0.1, 0.5, 0.5, 0.5, 1.0]) for n_bins in [16, 64, 256, 1024]: # Tokenise: map continuous value to bin index normalised (action_true - action_min) / (action_max - action_min) tokens jnp.clip((normalised * n_bins).astype(int), 0, n_bins - 1) # Detokenise: map bin index back to continuous value reconstructed (tokens 0.5) / n_bins * (action_max - action_min) action_min error jnp.linalg.norm(action_true - reconstructed) print(fbins{n_bins:4d} tokens{tokens} error{error:.6f})运行后可观察到bin 从 16 增加到 1024重建误差单调下降但每维可用的 token 数即词表规模同步放大——这正是 OpenVLA 选择 256 bins 背后的精度/词表权衡。任务 2动作分块 vs 单步预测生成一条平滑轨迹给单步预测叠加独立噪声含累积漂移再对比 chunk 内共享噪声的分块预测import jax import jax.numpy as jnp import matplotlib.pyplot as plt # Ground truth smooth trajectory (e.g., reaching motion) t jnp.linspace(0, 2 * jnp.pi, 100) gt_x jnp.sin(t) gt_y 1 - jnp.cos(t) # Single-step: each prediction has independent noise rng jax.random.PRNGKey(42) noise_ss jax.random.normal(rng, (100, 2)) * 0.05 single_step jnp.stack([gt_x, gt_y], axis1) noise_ss # Cumulative drift from single-step errors single_step_cumulative jnp.cumsum(noise_ss, axis0) * 0.3 jnp.stack([gt_x, gt_y], axis1) # Chunked (chunk_size10): noise is correlated within chunks, smoother chunk_size 10 rng2 jax.random.PRNGKey(7) chunks [] for i in range(0, 100, chunk_size): chunk_noise jax.random.normal(jax.random.fold_in(rng2, i), (2,)) * 0.05 chunk jnp.stack([gt_x[i:ichunk_size], gt_y[i:ichunk_size]], axis1) chunks.append(chunk chunk_noise) chunked jnp.concatenate(chunks, axis0) plt.figure(figsize(8, 4)) plt.plot(gt_x, gt_y, k-, linewidth2, labelGround truth) plt.plot(single_step_cumulative[:, 0], single_step_cumulative[:, 1], r-, alpha0.7, labelSingle-step (drifts)) plt.plot(chunked[:, 0], chunked[:, 1], b-, alpha0.7, labelChunked (stable)) plt.legend(); plt.axis(equal); plt.grid(True) plt.title(Action Chunking vs Single-Step Prediction) plt.show()单步曲线因误差累积而持续漂移分块曲线在 chunk 边界处跳变但整体稳定——这直观解释了为什么每次只预测一个动作会产生抖动而 chunking 能保持时间连贯性。任务 3多模态动作分布——为什么回归会失败用二维高斯混合模拟绕过障碍物可走左也可走右的场景展示回归预测均值的问题import jax import jax.numpy as jnp import matplotlib.pyplot as plt # Two valid ways to reach around an obstacle: left or right rng jax.random.PRNGKey(0) k1, k2 jax.random.split(rng) mode1 jax.random.normal(k1, (200, 2)) * 0.15 jnp.array([-1.0, 0.5]) mode2 jax.random.normal(k2, (200, 2)) * 0.15 jnp.array([ 1.0, 0.5]) samples jnp.concatenate([mode1, mode2]) # Regression predicts the mean average of modes (invalid!) mean_pred samples.mean(axis0) plt.figure(figsize(6, 5)) plt.scatter(samples[:, 0], samples[:, 1], s5, alpha0.5, labelTrue action distribution) plt.plot(*mean_pred, rx, markersize15, markeredgewidth3, labelRegression mean (invalid!)) plt.plot(-1, 0.5, g^, markersize12, labelMode 1 (go left)) plt.plot(1, 0.5, b^, markersize12, labelMode 2 (go right)) plt.legend(); plt.grid(True) plt.title(Multimodal Actions: Why Regression Fails) plt.xlabel(Action dim 1); plt.ylabel(Action dim 2) plt.show()图中两个绿色/蓝色三角是两个有效模式向左/向右绕障红色 × 标记是回归均值——落在两个模式之间即障碍物位置一个无效动作。这正是 Octo 采用扩散头、π0 采用 flow matching 头的根本原因概率生成式动作头能对分布采样而非取均值。小结VLA 把传统感知—语言—控制三段管线折叠为单一自回归 Transformer视觉编码器产出视觉 tokenLLM 骨干做跨模态推理动作头把隐状态变成电机指令动作通过均匀分箱如 256 bins × 7 维 1792 个新词表 token、action chunking 或 VQ-VAE 学习型码本接入语言模型。RT-2 证明了 VLM 世界知识的免费迁移Octo 用扩散头与 22 种本体预训练解决多模态动作分布与本体泛化OpenVLA 以标准 VLM 动作词表扩展换取工程简单性π0 用 flow matching 追求平滑轨迹。由于机器人数据比互联网数据小几个数量级从预训练 VLM 出发、共训练、再用 LoRA 做任务级微调的三阶段配方是当前主流评测则依赖 SIMPLER 仿真、Open X-Embodiment 基准与真机 held-out 任务成功率。延伸阅读可回到本仓库的 Robot Learning运动学、模仿学习、sim-to-real与 Self-Driving端到端驾驶中的世界模型它们与 VLA 共享把控制问题变成序列建模问题的底层范式。【免费下载链接】maths-cs-ai-compendiumBecome a cracked AI/ML researcher/engineer with this unconventional textbook covering maths, computing, and ML with intuition.项目地址: https://gitcode.com/GitHub_Trending/mat/maths-cs-ai-compendium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表