VLA-Adapter 详解(下):Bridge Attention 如何让 0.5B 骨干追平 7B VLA?

本文是 VLA-Adapter 系列解读的下篇。上篇已经说明:Raw features 与 ActionQuery 在不同层呈现不同规律,最优方案并不是简单二选一,而是让全层两类条件互补。本篇继续深入 Bridge Attention、L1 Policy、训练目标、消融、实验结果和方法局限。本文仍不涉及项目代码,代码实现留待后续单独讲解。
如果只用一句话概括 VLA-Adapter 的结构,它并不复杂:
用 ActionQuery 汇聚动作相关的多模态信息,用 Raw features 补充没有被查询 token 完整保留的细节,再通过 Bridge Attention 控制两者进入动作空间的方式和强度。
真正值得研究的是这句话中的三个动词:汇聚、补充、控制。它们分别对应 ActionQuery、Raw features 和可学习门控,也是 VLA-Adapter 能够使用 0.5B 骨干而不依赖机器人数据预训练的原因。
一、先把 Policy 的输入说清楚
在时间步 t,VLA-Adapter 的 L1 Policy 接收四类输入:
Policy 输入:{Cₜᴿ, CₜᴬQ, Aₜ⁰, Pₜ}
其中:
Cₜᴿ:VLM 各层的 Raw features;
CₜᴬQ:VLM 各层的 ActionQuery features;
Aₜ⁰:长度为 H 的全零初始动作序列;
Pₜ:机器人 proprioception,即关节、夹爪等本体状态。
默认动作块长度 H = 8。全零动作先经过 LayerNorm 与 MLP,被映射成 Policy 的初始动作 latent。随后,它依次通过 24 层 Policy;每一层都与 VLM 对应层的条件发生交互。最后再经过 LayerNorm 和 MLP,一次输出未来 8 步动作。
这里有两个常被忽略的细节。
第一,Policy 的“24 层”不是又复制了一个 0.5B 语言模型。它采用更轻量的注意力与前馈结构,默认 Policy 约 97.3M 参数。层数对齐的目的,是让第 i 层动作 latent 能吸收第 i 层 VLM 表征,而不是复刻完整 VLM。
第二,Aₜ⁰ 全零并不表示模型“预测零动作”。它只是给固定长度的动作槽位提供初始载体,类似一排待填写的动作查询。动作内容由后续条件注意力逐层写入。
二、Bridge Attention:两次跨注意力,一次自注意力
每层 Bridge Attention 包含三个分支:
Raw cross-attention:动作 latent 查询 Raw features;
ActionQuery cross-attention:动作 latent 查询 ActionQuery 与本体状态;
Action self-attention:动作槽位彼此交互,建模动作 chunk 内部的时序关系。
设第 τ 层的动作 latent 为 Ãₜ^τ。在第一条分支中,Raw features 经过 MLP 投影成 Key 和 Value,动作 latent 作为 Query:
CA₁(Ãₜ^τ, σ₁(Cₜᴿ))
这条分支回答的是:“根据 VLM 原始图文表征,当前 8 个动作槽位分别应该关注哪些视觉和语言证据?”
第二条分支先将 ActionQuery features 与本体状态 embedding 拼接,再投影成 Key 和 Value:
CA₂(Ãₜ^τ, σ₂[CₜᴬQ, σ₀(Pₜ)])
它回答的是:“已经由 ActionQuery 汇聚的任务信息,在机器人当前状态下应如何转化为动作?”把 proprioception 与 ActionQuery 放在同一路径很合理,因为同一条语言指令和同一个视觉目标,在不同关节状态下对应的瞬时控制量并不相同。
第三条分支是动作 latent 自注意力:
SA(Ãₜ^τ, Ãₜ^τ)
它不再查询 VLM,而是让 8 个动作位置彼此协调。动作 chunk 不是 8 个互不相关的控制点;前后动作需要连续、方向需要一致、夹爪闭合时机也需要与机械臂轨迹配合。自注意力承担的正是 chunk 内部建模。
三条分支的输出最终拼接:
Âₜ^τ = [CA₁ · tanh(g), CA₂, SA]
再通过残差 FFN,形成下一层动作 latent。逐层重复后,得到最终动作块。
三、最关键的一笔:为什么只有 Raw 分支乘 tanh(g)?
门控参数 g 从 0 初始化,并经过 tanh 限制在 [-1, 1]。训练开始时,tanh(0) = 0,Raw 分支相当于暂时关闭;随着训练进行,模型只在确实有帮助时逐渐打开它。
这不是一个纯粹为了“稳定训练”而添加的小技巧,而是由上篇的条件实验直接推导出来的结构选择:
ActionQuery 从头学习,本身就是动作导向的信息接口,可以完整注入;
Raw features 是为视觉—语言理解形成的通用表示,既有有用细节,也有与动作无关的语义和冗余,因此需要选择性注入。
值得注意的是,tanh(g) 不是常见的 [0, 1] sigmoid 门。它允许负值,所以理论上不只能“开大或关小”Raw 分支,还能对其贡献反向调制。这使“Ratio”更接近一个带符号的可学习缩放系数。
论文的注入强度消融非常有说服力:
Raw features 注入 | ActionQuery 注入 | LIBERO-Long 成功率 |
|---|---|---|
tanh(g) | 1 | 95.0% |
1 | 1 | 91.4% |
1 | tanh(g) | 91.0% |
tanh(g) | tanh(g) | 92.6% |
这张表支持两个结论:
Raw features 全量注入会伤害性能,说明通用 VLM 表征不能不加选择地灌入 Policy;
ActionQuery 被门控后也会掉点,说明它聚合的信息应当充分提供给动作生成器。
官方主页把它归纳为关键发现 6:ActionQuery 可以全量注入,Raw features 需要受控注入。
从架构设计方法论看,这比“用了 cross-attention”更重要。Cross-attention、查询 token、零初始化门控都不是第一次出现;VLA-Adapter 的创新性主要来自先用统一实验找出条件规律,再把规律固化成一套有非对称信息流的 Bridge Attention。
四、为什么是 64 个 ActionQuery?
ActionQuery 数量决定了从 VLM 向 Policy 传递信息的接口容量。过少时,少量 token 必须同时压缩物体、空间关系、任务阶段等多种信息;过多时,token 之间会产生冗余,注意力资源被稀释,训练也更困难。
论文测试了 1、4、8、16、64、128、256 和 512 个 ActionQuery。仅使用最后一层 ActionQuery 时,性能随数量增加先上升后下降;完整 VLA-Adapter 在 64 个查询时达到 95.0%,在 256 个查询时为 93.0%。因此默认选择 64。
这对应官方主页的关键发现 5:
Query 太少,多模态信息聚合不足;
Query 太多,引入冗余并干扰性能;
64 在该模型和基准上取得性能与效率的平衡。
需要强调,“64”是实验得到的默认值,不应被理解成跨机器人、跨骨干都成立的理论常数。换成长视频输入、双臂高维动作或更长任务上下文后,最优接口容量可能改变。更可迁移的结论是:ActionQuery 数量是桥接带宽,而不是无关紧要的超参数。
五、为什么最终使用 L1 Policy,而不是扩散或 Flow Matching?
VLA-Adapter 主要采用直接回归式 L1 Policy。给定真值动作轨迹 Aₜ,模型最小化预测动作与真值之间的 L1 距离:
minθ E[‖πθ(Aₜ^τ, Cₜᴿ, CₜᴬQ, σ₀(Pₜ), τ) − Aₜ‖₁]
直观来说,模型直接学习“在当前视觉、指令和本体状态下,这 8 步动作应该是什么”。它不需要从高斯噪声多步去噪,也不需要在推理时进行多次采样,因此速度更快。
论文附录还实现了 DiT-based Policy:从带噪动作开始,用 AdaLN-Zero、条件注意力和扩散目标预测噪声。但在 LIBERO-Long 上:
Policy | 平均成功率 |
|---|---|
L1-based | 95.0% |
DiT-based | 91.6% |
作者据此选择 L1 Policy,并引用 OpenVLA-OFT 的观察:扩散式策略可能更适合大规模预训练,而在具体任务微调中,动作分布冗余较小,直接回归反而更有效、更快。
这里可以再做一步理解。扩散或 Flow Matching 的优势通常是描述多峰动作分布:同一场景可能存在多条合理轨迹。但 LIBERO 的示范和任务往往提供较明确的操作路径,动作块又只有 8 步,局部未来的多模态性没有长时规划那么强。此时,L1 的简单性成为优势。反过来,如果面对高度多模态的双臂操作、灵巧手或人类示范风格差异,L1 是否仍占优,不能仅凭本文实验推断。
六、训练配置:0.5B、97M 和 197.2M 不要混为一谈
论文默认配置如下:
项目 | 默认值 |
|---|---|
VLM 语言骨干 | Qwen2.5-0.5B |
VLM / Policy 层数 | 24 |
ActionQuery 数量 | 64 |
Policy hidden size | 896 |
注意力头数 | 8 |
动作块长度 H | 8 |
Policy 参数量 | 97.3M |
VLA-Adapter 总可训练参数 | 197.2M |
batch size | 16 |
最大训练步数 | 150,000 |
学习率 | 10⁻⁴ |
warmup | 总步数的 10% |
优化器为 AdamW,学习率使用带 warmup 的 cosine annealing;VLM 采用 LoRA 微调,Policy 与 ActionQuery 从头训练。
这里必须区分三种“大小”:
0.5B 指默认语言骨干的规模,不是整套系统的全部参数;
97.3M 指基础版 Policy 参数;
197.2M 指论文配置下所有可训练参数总量,包括 Policy、ActionQuery、LoRA 等可学习部分。
所以更准确的说法不是“整个 VLA 只有 0.5B”,而是“VLA 使用 0.5B 级语言骨干,Policy 约 97M,总可训练参数约 197M”。即便如此,它相比 7B 级 VLA 仍然显著轻量。
论文摘要和项目主页还强调“单张消费级 GPU 约 8 小时训练”。与此同时,论文实验章节说明主实验在 4 张 NVIDIA H100 上运行。两句话并不必然矛盾:前者强调最低可用训练方案,后者说明论文大规模对比实验采用的硬件。但写博客时不应把二者混成“论文所有实验都在单卡 8 小时完成”。更严谨的表述是:该方法的显存与训练配方允许单消费级 GPU 训练,而论文报告的系统实验使用了 4 张 H100。
七、LIBERO:0.5B 骨干能做到什么程度?
LIBERO 包含 Spatial、Object、Goal 和 Long 四类任务。论文对每个子任务重复 50 次;四个套件共 40 个子任务,因此 VLA-Adapter 的完整评估相当于 2,000 次回合。
基础版结果为:
方法 | Backbone | Spatial | Object | Goal | Long | 平均 |
|---|---|---|---|---|---|---|
OpenVLA | 7B | 84.7 | 88.4 | 79.2 | 53.7 | 76.5 |
OpenVLA-OFT | 7B | 97.6 | 98.4 | 97.9 | 94.5 | 97.1 |
π0 | 3B | 96.8 | 98.8 | 95.8 | 85.2 | 94.2 |
SmolVLA | 2.2B | 93.0 | 94.0 | 91.0 | 77.0 | 88.8 |
VLA-OS | 0.5B | 87.0 | 96.5 | 92.7 | 66.0 | 85.6 |
VLA-Adapter | 0.5B | 97.8 | 99.2 | 97.2 | 95.0 | 97.3 |
VLA-Adapter-Pro | 0.5B | 99.6 | 99.6 | 98.2 | 96.4 | 98.5 |
基础版以 0.5B 骨干取得 97.3% 平均成功率,与 7B OpenVLA-OFT 的 97.1% 相当;Long 套件上达到 95.0%,比同为 0.5B 骨干的 VLA-OS 高 29 个百分点。这个结果支撑了论文最重要的经验结论:在具体机器人任务微调中,桥接效率可以在很大程度上弥补 backbone 规模差距。
不过,表格也要谨慎看待。论文说明许多基线结果来自原论文或其他公开复现,并非全部在完全相同代码、数据处理和硬件环境下重新训练。LIBERO 结果很强,但“超过所有大模型”的结论仍然局限在对应基准和评测协议中,不能直接外推到开放世界泛化能力。
八、CALVIN ABC→D:不仅看单任务,还看连续完成五步
CALVIN ABC→D 在环境 A、B、C 上训练,在未见过的环境 D 上测试。每个评测序列包含五个连续子任务,只有完成当前任务才能继续下一个。指标既统计至少连续完成 1—5 个任务的比例,也统计平均完成长度。
方法 | ≥1 个 | ≥2 个 | ≥3 个 | ≥4 个 | 5 个全完成 | 平均长度 |
|---|---|---|---|---|---|---|
OpenVLA-OFT | 96.3 | 89.1 | 82.4 | 75.8 | 66.5 | 4.10 |
VPP | 95.7 | 91.2 | 86.3 | 81.0 | 75.0 | 4.33 |
VLA-Adapter | 99.1 | 94.6 | 88.8 | 82.8 | 76.5 | 4.42 |
VLA-Adapter-Pro | 98.5 | 95.0 | 90.5 | 85.3 | 80.0 | 4.50 |
基础版平均完成 4.42 个任务,Pro 版达到 4.50。相比只看单次抓取,这个基准更能检验动作连续性和环境变化下的鲁棒性。
但“ABC→D zero-shot”中的 zero-shot 指没有在环境 D 训练,不是没有使用 CALVIN 任务数据,也不是开放世界零样本控制。准确说法应是“对未见环境布局的零样本迁移”。
九、真实机器人:结果令人鼓舞,但证据规模仍有限
真实实验使用 6-DoF Synria Alicia-D 机械臂和 1-DoF 夹爪,配备 Logitech C920e 第三视角相机与 RealSense D405 夹爪相机。任务分四类:
不同材质、形状物体的简单抓取放置;
左右移动物体;
积木堆叠;
“先把勺子放到杯子上,再把杯子放到盘子上”的长时序任务。
测试时还会随机改变物体位置以制造分布偏移。论文图 7 显示,VLA-Adapter 在四类任务上都优于 ACT 与 0.5B+OFT 风格基线,平均成功率优势明显。这说明桥接机制不只在仿真 benchmark 上有效。
但真实实验每个结果只取 10 次执行的平均值,硬件平台也只有一种。对于机器人研究,这可以证明“能落地”和初步泛化,却还不足以证明跨机器人、跨场景的普适性。尤其是长时序任务仅有少量类型,任务失败的原因、恢复能力以及接触丰富操作都没有被充分展开。
因此,比较合适的评价是:真实实验为方法提供了积极证据,但主要结论仍由 LIBERO 与 CALVIN 支撑。
十、速度为什么能到 219.2 Hz?
论文报告:
方法 | 吞吐 | 单次前向延迟 |
|---|---|---|
OpenVLA | 4.2 Hz | 0.2396 s |
OpenVLA-OFT | 71.4 Hz | 0.1120 s |
VLA-Adapter | 219.2 Hz | 0.0365 s |
VLA-Adapter 相比 OpenVLA-OFT 吞吐约 3 倍,延迟约三分之一。项目主页还给出 batch size 8 时训练显存约 24.7GB,而 OpenVLA-OFT 约为 62GB。
需要理解“219.2 Hz”的计算方式。默认动作块 H = 8,一次前向耗时 0.0365 秒,一次产生 8 个动作,因此:
8 ÷ 0.0365 ≈ 219.2 actions/s
它不意味着控制器每 4.56 毫秒重新观察一次环境;模型仍是约 36.5 毫秒生成一个 8 步 chunk。吞吐量描述单位时间生成多少动作点,闭环观测频率则取决于 chunk 执行与重规划方式。对部署而言,两者都重要,不能把 action throughput 直接等同于控制回路频率。
速度优势主要来自三点:
0.5B 骨干显著小于 7B;
一次并行生成动作 chunk,而不是逐 token 自回归;
使用单次 L1 回归,而不是多步扩散采样。
十一、冻结 VLM 仍能工作,说明了什么?
当 VLM backbone 完全冻结,仅训练 ActionQuery 与 Policy 时,LIBERO-Long 结果为:
方法 | 冻结 VLM 后成功率 |
|---|---|
OpenVLA-OFT | 0.0% |
SmolVLA | 77.0% |
VLA-Adapter | 86.4% |
论文附录解释了 OpenVLA-OFT 冻结后失败的一个实现层原因:其 L1 结构中的动作位置以零值/掩码形式进入冻结 VLM,这些位置本身没有可学习内容;VLA-Adapter 则插入真正可训练的 ActionQuery embedding。即使 Transformer 主体冻结,梯度仍可以更新查询 token,让它们学会如何利用冻结 VLM 的注意力通路收集 VL 信息。
这个实验非常能说明 ActionQuery 的身份:它不是普通占位符,而是可训练的接口状态。冻结骨干后仍有 86.4%,也证明 VLM 的通用视觉—语言知识本身已经很有价值,问题在于如何读出。
但“冻结后有效”不等于“完全不用训练”。ActionQuery 与约 97M Policy 仍需目标机器人数据训练;86.4% 也低于正常微调的 95.0%。VLA-Adapter 降低的是 VLM 适配成本,而不是消除下游示范数据需求。
十二、VLA-Adapter-Pro 改了什么?
论文 v2 附录和项目主页还展示了 VLA-Adapter-Pro。基础版为了极致轻量,在三种注意力分支之间共享部分投影;Pro 版为 self-attention、ActionQuery 条件和 Raw 条件使用分离投影,让不同通道学习更有针对性的 Key/Value 表示,并向 Q/K 加入 Rotary Position Embedding(RoPE),增强注意力对位置的敏感性。
可以把它理解成一组很自然的容量—性能交换:
基础版强调共享与轻量;
Pro 版减少参数共享,让三类信息拥有更独立的表示空间,并显式强化位置信息。
Pro 在 LIBERO 的平均成功率从 97.3% 提升到 98.5%,CALVIN 平均长度从 4.42 提升到 4.50。Long 套件也从 95.0% 提升到 96.4%。这说明基础 Bridge Attention 框架还有容量扩展空间。
不过,Pro 版本性能提升并不意味着基础版设计失效:它们的 Policy 总体结构相同,变化主要是投影解耦和位置编码。论文的主体贡献仍然是条件选择与桥接范式,而不是 Pro 的增量优化。
十三、这篇工作的创新到底在哪里?
评价 VLA-Adapter,最好把“组件创新”和“研究贡献”分开。
单看组件:
cross-attention 不是新的;
可学习 Query 不是新的;
零初始化门控和 tanh 缩放也已有类似做法;
动作 chunk、L1 回归同样是成熟技术。
但论文仍然有清晰的创新,因为它解决的是这些组件如何围绕 VL→A 接口组合的问题。
13.1 系统研究了长期被默认的桥接条件
论文把层级与特征类型拆开,得到 Raw 中层更强、ActionQuery 深层更强、全层更优等结论。即使不采用 VLA-Adapter,这些发现也能指导其他 VLA 设计。
13.2 把经验结论转化为非对称结构
不是简单把 Raw 与 ActionQuery 拼起来,而是让两者走不同 cross-attention,并采用“Raw 门控、ActionQuery 全量”的注入规则。结构与消融结论一一对应。
13.3 证明桥接效率可以替代一部分规模与预训练
0.5B 无机器人预训练骨干在 LIBERO 上达到 7B 级结果,冻结骨干仍能保持较强性能。这是对“高性能 VLA 必须依赖大骨干 + 大规模机器人预训练”的有效反例。
因此,更准确的评价是:VLA-Adapter 的创新不在发明一种全新注意力算子,而在提出并验证了一套面向小型 VLA 的桥接设计原则。
十四、论文仍有哪些局限?
论文自己在 Limitations 中承认三点:
没有大规模具身数据预训练,模型又较小,真实世界泛化仍需提升;
Policy 输出质量依赖 VLM 条件及其使用方式;
训练流程仍较简单,强化学习等后训练方法尚未探索。
结合实验,还可以补充几个阅读时必须保留的边界。
14.1 “不需要机器人预训练”不等于“没有预训练”
VLA 使用的 Prismatic/Qwen 与视觉编码器本身仍有大规模视觉—语言预训练。论文减少的是机器人轨迹预训练,并非从随机初始化训练整个感知系统。
14.2 Benchmark 高分不等于开放世界通用机器人
LIBERO 任务定义、场景和动作空间相对固定;CALVIN 的环境迁移也仍属于同一 benchmark。97%—98% 的成功率证明模型对这些任务很强,但不能直接推导出跨物体、跨相机、跨机器人形态的同等表现。
14.3 真实实验统计量较小
每类任务 10 次执行足以做初步展示,却不足以稳定刻画小概率失败、长尾干扰和硬件磨损等真实部署问题。
14.4 L1 Policy 的适用范围仍待检验
在动作分布较集中、chunk 较短的任务上,L1 快且有效;在强多峰轨迹、灵巧操作或复杂接触任务中,扩散与 Flow Matching 可能重新占优。
14.5 层对齐增加了结构绑定
Policy 层数与 VLM 层数相同,带来清晰的逐层桥接,但也使 Policy 架构与 backbone 深度耦合。换用更深或异构 VLM 时,怎样保持轻量和复用性仍值得研究。
14.6 条件传输不等于长期规划
Bridge Attention 改善的是感知条件进入局部动作生成的质量。它没有显式世界模型、任务记忆或错误恢复机制。面对很长的操作流程,模型仍可能因为局部误差积累而失败。
十五、VLA-Adapter 对后续研究最有价值的启示
启示 1:不要把 VLM 最后一层当成默认答案
动作需要的空间细节可能存在于中间层。以后设计 VLA,应该先分析信息在哪一层,而不是沿用分类或语言生成中的最后层习惯。
启示 2:条件接口本身也是模型容量
模型参数量只描述“存了多少知识”,桥接模块决定“Policy 能读出多少知识”。接口带宽不足时,扩大 VLM 可能只是昂贵地储存无法被动作头利用的信息。
启示 3:不同条件应采用不同注入策略
通用 Raw features 与动作导向 Query 不是同质信息。以后接入深度、触觉、力觉或历史状态时,也不应默认统一拼接,而应研究每类条件的可信度、粒度与注入强度。
启示 4:小模型路线不一定从蒸馏开始
在机器人场景中,重新设计感知—动作接口,可能比先训练一个超大 VLA 再压缩更直接。对于只有单卡或少量示范数据的实验室,这条路线尤其有吸引力。
启示 5:冻结骨干值得认真研究
如果通用 VLM 已包含足够感知知识,可训练 Query + 轻量 Policy 可能成为低成本适配不同机器人平台的标准范式。VLA-Adapter 的 86.4% 结果说明方向可行,但离“即插即用”仍有距离。
十六、结语:VLA-Adapter 真正适配的,是信息流
VLA-Adapter 最容易传播的标签是“0.5B 小模型”“单卡 8 小时”“219.2 Hz”。这些数字确实亮眼,但如果只记住数字,就会错过论文真正有价值的部分。
它重新提醒我们:VLA 不是 VLM 与动作头的机械拼接。VLM 的不同层保存着不同粒度的信息,Raw features 与 ActionQuery 也承担不同角色。Policy 能否获得正确条件,取决于取哪一层、取什么类型、以何种注意力交互、注入多少强度。
VLA-Adapter 的答案是:
全层读取,而不是只拿最后一层;
Raw 与 ActionQuery 并用,而不是二选一;
Query 条件充分注入,Raw 条件从零门控;
动作槽位通过 self-attention 协调,再一次并行输出 chunk;
用更好的桥,降低对大骨干与机器人预训练的依赖。
这套答案未必是所有 VLA 的最终形式,但它证明了一个很重要的方向:当模型变大越来越昂贵时,研究信息怎样流动,可能比继续增加参数更有价值。
后续如果继续讲项目代码,最值得追踪的就不只是某个类或某行实现,而是论文中的四条信息流如何落到真实张量上:VLM 各层 hidden states 如何取出、ActionQuery 如何插入序列、Raw 门控如何更新、8 步 action chunk 又如何从 24 层 Policy 中生成。理解了本文的机制,代码就不再是一堆模块,而是这套桥接思想的具体实现。
