问题 · §1–2
瓶颈在动作生成:起点太远,眼前太短
论文针对的是分层 VLA(VLM 主干 + 生成式动作头,如 π0、π0.5)。作者认为这类模型的瓶颈已经从感知转到了动作生成,具体是两条:
- 效率:先验和目标差太远。flow matching 从各向同性高斯走到结构化的动作分布,跨度大,需要多步去噪;随机起点还可能落在会生成运动学上不可行动作的区域。论文也指出了反面:如果直接拿“动作先验”当起点,多样性会塌掉,模型退化成“把输入挪到目标附近”的函数,而且先验从哪来本身没解决。
- 鲁棒性:只看当前观测。马尔可夫式的 VLA 分不清看起来一样的不同阶段(论文的例子:没打开过的抽屉和刚关上的抽屉);不参考已执行的轨迹,动作会抖。直接把长历史观测拼进输入,推理开销和显存都上去,而且和 VLA 单帧预训练的分布不一致(这一点引用了 MemoryVLA)。
两条问题对应两块记忆:GPM 是长期记忆,存的是训练集里的整条动作轨迹;LCM 是工作记忆,存的是本条 episode 里刚执行过的动作。
解读两块记忆接在同一个位置
这篇最有辨识度的设计不是“双记忆”这个说法,而是接入点:两块记忆都不进 VLM 的 token 序列,也不作为动作头的条件,而是直接改写 flow policy 的初值 Xt = Xt + Bt。所以它不增加上下文长度,也不需要重训 VLA,代价是只能通过“从哪里出发、走几步”来影响动作。
方法 · 全局 · §3.1
五行公式说完整条推理
Ot 包括本体状态 qt 和多视角图像;H 是动作块长度,A 是动作维度;N 是自适应的去噪步数(NFE)。VLM 主干和 flow policy 就是 π0.5 的那两部分,论文称其为“分层 VLA 的标准组件”。注意时间约定:本文的 CFM 写法是 t = 0 为噪声、t = 1 为动作(式 1),和 π0 代码里的方向相反,但不影响下面的讨论。
VLM 主干 + flow policy
- 来源
- π0.5 的结构与训练协议,从 π0.5 权重初始化
- 输入
- 多视角图像、本体状态、语言
- 输出
- H × A 动作块,H = 10(图 2 标注)
- 训练后
- 阶段 II、III 全程冻结
全局先验记忆 GPM
- Prior Head
- 2 层 MLP,InfoNCE 训练
- Memory Bank
- M 个(键, 整条轨迹, 元数据),FAISS
IndexFlatIP - Sampler
- 矩匹配高斯 + 由 s 决定的 λ 与 N
- 频率
- 每个 episode 检索一次(附录 B.5)
局部一致性记忆 LCM
- 输入
- 上一个动作块 At−1 ∈ ℝH×A,不看图像
- 结构
- Consistency Layer(自注意力)+ Dynamic Awareness(Mamba)
- 输出
- 偏置 Bt ∈ ℝH×A
- 目标
- B* = A* − μ
一次推理怎么走:从检索到起点
流程和公式来自 §3 与附录 B;曲线是一维玩具数据,不是论文实验
玩具设定交互里哪些是论文的,哪些是我们填的
论文的:取块规则 ui = ⌊ρt(Nchunks − 1)⌋、权重 α = softmax(s/τs)、s = Σαisi、μ 和 Var 的加权矩、λ(s) 与 N(s) 两个线性映射、Xt = Xt + Bt。我们填的:示范轨迹的形状和长度、相似度分数、τs = 0.1、窗口步长 Δ = 2、方差下限,以及 λmax = 1.0、λmin = 0.3、Nmin = 1、Nmax = 10(论文没给,按图 6 的数字反推,见下一节)。LCM 在这里被画成“学到了残差的 75%”,只为显示它的作用方向;它真实的预测精度论文没有报告。
方法 · 全局先验记忆 · §3.2 · 附录 B
把“从哪里出发”变成一次检索
① 离线建库
对数据集里每条 episode,用(阶段 I 训好的)VLM 做一次前向,取前缀 token H(m) ∈ ℝL×Dvlm 的均值 e(m),经 Prior Head fhead(2 层 MLP)投影并 L2 归一化,得到键 zm。值是这条 episode 的整条稠密动作序列 J(m),外加长度、分块参数等元数据。所有键放进 FAISS 的 IndexFlatIP(内积,即归一化后的余弦相似度)。
Prior Head 用监督式 InfoNCE 训练:同一任务的 episode 互为正样本,batch 内其他任务为负样本,温度 τc = 0.07。为保证每个锚点在 batch 里至少有一个正样本,用了 Task-Pair Batch Sampler,每个 batch 里同一任务至少两条轨迹。
② 在线检索与取块
查询 zre 用同样方式从当前时刻的前缀 token 算出。每条检索到的轨迹按一个进度标量 ρt ∈ [0, 1] 对齐:用长度 H0、步长 Δ 的滑动窗口切块,取第 ui 个窗口;H0 ≠ H 时线性插值到 H。k 个块的加权混合用一个矩匹配的对角高斯近似。
Session 级缓存(附录 B.5):检索只在 episode 开始时做一次(或“检测到明显的任务漂移”时重做),缓存 top-k 的索引和权重;之后每一步只按 ρt 取块、重算式 (11),不再查 FAISS。
③ 相似度决定噪声和步数
检索越可信(s → 1),λ 越小(更依赖均值)、N 越少;陌生场景(论文写 s ≈ 0)退回更大的噪声和更多步数。论文强调保留 λ 噪声是为了不让生成退化成确定性映射,保住对新任务的泛化。
| GPM 超参数 | 论文给的值 | 来源 |
|---|---|---|
| Prior Head | 2 层 MLP;AdamW,lr 1×10⁻⁴,batch 64,τc = 0.07,20 epoch(表 6 写 1000 步) | 附录 C.2、表 6 |
| 检索条数 k | 表 5 里 k = 8 最好;主实验用几条没有明说 | 表 5 |
| 库大小 | LIBERO-Long 消融里 6500 / 1300 / 130 条 | 表 5 |
| τs、H0、Δ、σ2min | 未披露 | — |
| λmin、λmax、Nmin、Nmax | 未披露(下方由图 6 反推) | — |
| ρt 怎么得到 | 只写了“维护一个进度标量”,未披露 | 附录 B.3 |
| H | 图 2 标注 H = 10,正文未写 | 图 2 |
解读从图 6 反推出的调度范围
图 6(原文 fig7)给了 LIBERO 一条 episode 里 8 个关键帧的 s、λ、N。N 的 8 个值(1, 3, 4, 4, 3, 3, 3, 4)和 Nmin = 1、Nmax = 10 的式 (13) 逐个吻合(例如 s = 0.92 → 1.36 → 1;s = 0.42 → 3.61 → 4)。λ 的 6 组不同取值做线性拟合,得到 λmax ≈ 1.0、λmin ≈ 0.3。这只是按图上数字算的,论文没有写这几个超参数。
起点换了,速度场没换:二维玩具里的去噪
解读 · 玩具模型速度场按 CFM 的定义精确计算
同一组 80 个 ε,三种起点在各个 N 下的可行比例:
这个玩具在做什么:二维平面代表动作空间,给定观测后“可行动作”有两簇(左侧抓、右侧抓,共 24 个示范点),两簇中间的平均位置不可行。速度场不是学出来的,而是按条件 flow matching 的定义精确计算的:源分布是 𝒩(0, I)、直线路径 xt = (1 − t)x0 + t x1 时,最优速度场是 v(t, x) = (E[x1 | xt = x] − x) / (1 − t)。这正是附录 B.1 所说“预训练时保持 𝒫0 = 𝒩(0, I)”的 flow policy 在理想情况下会学到的东西。推理时只把起点换成 GPM 的样本,速度场保持不变,与论文的做法一致。
疑点“起点离目标近,步数就能少”在高斯源 flow 上不自动成立
在 t = 0,xt 就是 x0,与 x1 独立,所以理想速度场是 v(0, x) = E[x1 | c] − x:无论起点放在哪,第一步都朝条件均值走 1/N 的距离。N = 1 时输出恒等于 E[x1 | c],起点完全不起作用(图 6 的第一帧就是 N = 1);N 稍大时,先验起点的信息才在后几步体现出来。玩具里 N = 3、4 时检索命中的先验确实减少了落在两簇之间的样本,但 N = 1、2 时两种起点都失败,检索偏离时需要更多步。
真实网络不是理想速度场:它在 t = 0 只见过高斯样本,喂进一个“已经像动作”的起点属于分布外输入,行为论文没有分析。附录也没说推理时 ODE 从哪个 t 开始积分。要判断 NFE 从 10 降到 3.2 有多少来自先验起点,需要“π0.5 用高斯起点直接走 3–4 步”的对照,论文没有做。LIBERO 这类任务给定观测后动作往往接近单峰,单峰时少步数本来就可能够用。
方法 · 局部一致性记忆 · §3.3 · 附录 C.3
只看动作历史的工作记忆
Consistency Layer:块内
对上一个动作块的 H 个动作做自注意力,捕捉块内动作之间的依赖和约束。输出 Bt−1,形状仍是 H × A。
Dynamic Awareness Module:块间
Mamba 式结构,线性复杂度。它把每个块的表示作为一个时间步来更新内部状态,再预测下一步的偏置 Bt。论文称它用来推断任务进度。层数、宽度、状态维度均未披露。
训练(阶段 III)时 VLM、flow policy、GPM 全部冻结。对每个时间步先用 GPM 检索、算出先验均值 μt,再让 LCM 沿轨迹展开、回归 A*t − μt。为了应对推理开始时没有历史的情况,训练中以概率 pcold 把 At−1 置零(cold start),让模型只靠内部状态或输出中性偏置。pcold 的取值未披露。
解读LCM 其实是一个“下一块残差预测器”
把训练目标代回式 (6):如果 LCM 学得完美,Xt = μ + λε⊙√Var + (A*t − μ) = A*t + λε⊙√Var,也就是“正确的下一块加一点噪声”。所以 LCM 学的不是一般意义上的平滑约束,而是只凭动作历史去纠正检索均值的偏差,flow policy 此时更像一个精修器。两个细节值得注意:LCM 的输入只有 At−1,看不到 μt 也看不到图像,却要预测 A*t − μt,只能靠 Mamba 状态隐式记住“检索给了什么、现在走到哪”;训练时 At−1 取自示范(teacher forcing),部署时是自己执行出来的动作。
疑点“去掉 GPM、保留 LCM”这一行怎么跑的
LCM 的回归目标定义在 GPM 均值之上(A* − μ)。表 4 里有 GPM ✗ / LCM ✓ 的配置(LIBERO-Long 93.2),但没说此时 Bt 加在什么起点上、LCM 是否重新训练、目标换成了什么。
训练 · §3.4 · 附录 C · 表 6
三个阶段,后两个只训小模块
阶段 I · 分层 VLA 微调
按 π0.5 的结构和训练协议,从 π0.5 权重初始化,在每个基准上用 CFM 训 flow policy。此时没有 GPM 和 LCM,源分布就是 𝒩(0, I)。
AdamW,lr 5×10⁻⁵,30,000 步,batch 512,warmup 比例 0.10,EMA 0.999;8 × A800。
阶段 II · GPM
VLA 全部冻结,只训 Prior Head(InfoNCE)。训完冻结 fhead,离线建库。
AdamW,lr 1×10⁻⁴,1000 步,batch 64。
阶段 III · LCM
VLM、flow policy、GPM 全部冻结,只训 LCM 回归 A* − μ,含 cold-start 置零。
AdamW,lr 1×10⁻⁴,1000 步,batch 64。
解读表 4 最后一行就是 π0.5 本身
消融表里 GPM、LCM 都去掉的配置:LIBERO-Long 92.4、CALVIN 4.26、真机泛化 75.0,分别与表 1 的 π0.5、表 2 的 π0.5†、图 3 的 π0.5 平均完全相同。可见阶段 I 的产物就是 π0.5 基线,OptimusVLA 的全部增益来自推理时外挂的两个小模块。这让消融很干净,也意味着这套方法原则上可以挂到任何已训好的 flow 式 VLA 上。论文在局限里把“GPM、LCM 与 flow policy 端到端联合训练”列为未来工作。
实验设置 · §4.1–4.2 · 附录 D
三个仿真基准 + 一台双臂真机
| 平台 | 设置 | 评测量 | 对比方法 |
|---|---|---|---|
| LIBERO | Spatial / Object / Goal / Long 四个套件,各 10 个任务 | 每个套件 500 次 rollout 的平均成功率 | 11 个(表 1) |
| CALVIN | ABC → D:在 3 个环境训练,留出的 D 环境测试,5 个任务连做 | 500 次 rollout;1/5…5/5 各档成功率与 Avg. Len | 10 个(表 2) |
| RoboTwin 2.0 | 从 50 个双臂任务中“随机选” 16 个;Hard 设置(杂物、光照、纹理、桌面高度随机);Aloha-AgileX,单任务训练,每任务 50 条干净示范 | 每任务 100 次 rollout | 6 个(表 3、表 7) |
| 真机 | Galaxea R1 Lite:两条 6 自由度臂 + 平行夹爪(正文称 14 自由度双臂平台;整机 23 自由度含 3 自由度躯干、6 自由度底盘);腕部 + 第三人称相机,224 × 224 | 泛化任务每个 50 次(25 次变光照 + 25 次变场景);长程任务每个 25 次;物体初始位置随机 | OpenVLA、OpenVLA-OFT、π0、π0.5 |
实现:从 π0.5 权重初始化,加上 GPM、LCM 后共 3.6B 参数;8 × NVIDIA A800,全局 batch 512,30,000 步,三个仿真基准学习率都是 5×10⁻⁵。推理计时用的硬件未披露。
| 真机任务(表 8、表 9) | 内容 | 示范 | rollout | OptimusVLA |
|---|---|---|---|---|
| place_one_fruit_on_plate | 抓一个水果(香蕉、苹果、柠檬等)放到盘子上 | 100 | 50 | 88 |
| place_plate_on_tablecloth | 抓盘子放到桌布上,盘子和桌布各有多种样式 | 100 | 50 | 90 |
| stand_bottle_upright | 抓起水瓶并竖直放好,瓶子形状外观各异 | 150 | 50 | 74 |
| place_cup_on_tablecloth | 抓杯子放到桌布上,杯子形状外观各异 | 120 | 50 | 88 |
| place_all_fruits_on_plate | 把三个不同水果依次放到盘子上,每次组合随机 | 200 | 25 | 64 |
| place_2_fruits_in_2_position | 从碗里拿一个水果放到桌布上,再从盘子里拿另一个放进碗 | 200 | 25 | 60 |
| place_2_obj_on_plate | 依次把杯子和苹果放到盘子上 | 250 | 25 | 68 |
| place_blocks_on_tablecloth | 把三个不同方块放到桌布上,每次组合随机 | 300 | 25 | 64 |
结果 · §4.2–4.6
四个平台、两组消融、两张效率图
LIBERO(表 1)
平均成功率与 Long 套件成功率
实心点 = 四个套件平均,空心圈 = LIBERO-Long。横轴从 50 开始。每个套件 500 次 rollout。
原表数字(表 1)
OptimusVLA 在四个套件上都是最高,平均比 π0.5 高 1.7 个百分点,差距主要在 Long 套件(96.4 vs 92.4)。论文把 Long 上的提升归给 GPM“锚定”长程生成,并强调 NFE 是 3.2 vs 10。
解读这张表里的几个对照要分开看
π0、π0-FAST、π0.5 三行没有标 †,数字与 openpi 仓库 examples/libero/README.md 公布的 LIBERO 30k 步微调结果逐字相同(我们的核对:π0、π0-FAST 两行见该文件 2025-07 的版本,π0.5 见现行版本);图 4 的 π0.5 曲线在 30,000 步处也正好落在这组数上,表 4 的“都去掉”一行同样是 92.4。MemoryVLA 一行取自它自己的论文,而 MemoryVLA 的 LIBERO 结果只用第三人称 RGB(它的表里专门用 * 标出用了腕部相机和本体状态的方法),OptimusVLA 沿用 π0.5 的多视角加本体状态输入,两者输入条件不同。
CALVIN ABC → D(表 2)
平均完成长度 Avg. Len
5 个任务连做,Avg. Len 满分 5。† 为论文复现。
原表数字(表 2),加一列我们算的五档之和
4.45 vs π0 的 3.92,即摘要里的“提升 13.5%”(相对值);比复现的 π0.5(4.26)高 0.19。1/5 和 2/5 两档 RoboVLM 更高,3/5 以后 OptimusVLA 最高,与“长链条更稳”的说法一致。
疑点三行的 Avg. Len 与各档成功率对不上
CALVIN 的 Avg. Len 按定义等于五档成功率之和(第 i 档 = 至少连续完成 i 个任务的比例)。表 2 中 8 个引用的基线都满足这一点(误差 ≤ 0.005),只有论文自己报告或复现的三行不满足:OptimusVLA 五档之和 4.434,表中写 4.45;π0.5† 4.243,写 4.26;π0 3.835,写 3.92。四舍五入解释不了这么大的差距。结论的方向不受影响,但数字本身不自洽。
RoboTwin 2.0 Hard(表 3 主表 + 附录表 7)
逐任务成功率
颜色越深越高。主表只列了 8 个任务,另外 8 个在附录。切换看平均值怎么变。
原表数字(表 7,含排名)
疑点摘要的 38% 是主表 8 个任务的平均
论文说 16 个任务是随机选的,主表放了其中 8 个,摘要和正文用的是这 8 个的平均 38%(π0.5 29%、π0 25%)。附录表 7 全部 16 个任务的平均是 30%(π0.5 24%、π0 23%)。只看附录那 8 个(我们按表 7 算):OptimusVLA 22.1%,π0 21.3%,π0.5 18.3%,差距基本消失。主表选这 8 个的依据没有说明;在这 8 个里 OptimusVLA 有 6 个排第一,附录 8 个里有 4 个。
真机(图 3)
8 个真机任务的成功率
数字读自原图柱顶标注;泛化任务每个 50 次,长程任务每个 25 次。右侧两组是我们按图算的套件平均(图 1 给出的泛化平均 85.0 / 75.0 / 59.5 与之一致)。
图中数字
泛化套件 85.0,长程套件 64.0,8 个任务都是最高。摘要里“超过 π0 42.9% 和 52.4%”是相对值,换成百分点是 +25.5 和 +22.0;对最强基线 π0.5 是 +10.0 和 +13.0 个百分点。泛化任务的提升论文归给 GPM(按多模态语义检索,对视觉干扰更稳),长程任务归给动作稳定性和双臂协调。
消融:GPM 与 LCM(表 4)
四种组合在三个设置上的表现
各面板刻度不同。最后一行(都去掉)的三个数与 π0.5 相同。括号里是论文标的相对降幅。
原表数字(表 4)
去掉 GPM 在真机泛化上掉得最多(85.0 → 77.0),去掉 LCM 在 LIBERO-Long 上掉 1.6 个点(96.4 → 94.8)。论文的措辞是去掉 GPM 导致“灾难性下降 3.8%”,这里的 3.8% 是 CALVIN Avg. Len 4.45 → 4.28 的相对变化。两者叠加的增益大于各自单独的增益(LIBERO-Long:单加 GPM +2.4,单加 LCM +0.8,都加 +4.0)。
记忆库大小与 k(表 5)
LIBERO-Long 成功率,库里存多少条、检索几条
虚线是表 4 的两个参照:不用 GPM(保留 LCM)93.2,π0.5 92.4。横轴从 90 开始。
原表数字(表 5)
解读只检索 1 条反而比不用 GPM 差
k = 1 时 92.6(库 6500 条)和 92.4(库 1300 条),都低于表 4 里不用 GPM 的 93.2,与 π0.5 持平。库里每个任务只存 1 条(130 条)但检索 8 条时是 93.6,此时 8 条里必然混着别的任务,结果反而比 k = 1 的同任务单条更好。k = 16 也会回落到 94.8。论文的解释是单条先验“太确定”、k 太大则不够具体。这说明 GPM 的好处很大程度来自对多条轨迹求平均得到的均值和方差,而不只是“找到最像的那条示范”。另外 6500 = 130 × 50、1300 = 130 × 10,正好对应 LIBERO 全部 130 个任务(含 LIBERO-90)每任务 50 / 10 条,暗示记忆库可能用到了四个评测套件训练集以外的 LIBERO-90 数据,论文没有说明库的来源。
训练步数(图 4)
同一初始化下,不同训练步数的 LIBERO 成功率
数字读自原图标注;每个面板纵轴范围不同。
图中数字
论文的读法:OptimusVLA 在 LIBERO-Goal 上 18,000 步就到 97.6,π0.5 要 26,000 步(97.8)才到相近水平,并把这归为“训练效率”。
疑点这张图比的不是训练效率
按附录 C,阶段 I 就是 π0.5 的训练,flow policy 用高斯起点、没有 GPM 和 LCM;GPM、LCM 是之后在冻结的模型上各训 1000 步。所以同一步数下两条曲线的 flow policy 应当是同一份权重,差别只在推理时有没有外挂的两个模块。图 4 说明的是“对没训够的 π0.5 检查点,外挂 GPM + LCM 能补回一部分”,而不是训练本身变快了。每个中间检查点上 GPM、LCM 是否单独训练,论文没写。
推理效率(图 5)
单次推理时间与 NFE
数字读自原图。灰色标注是我们按图中数字算的对 π0.5 的比值;图里红色的 6.5×、4.9× 是对 OpenVLA。
图中数字
疑点“2.9× 推理加速”是 NFE 之比,不是时间之比
正文说图 5 是和 π0.5 比,“推理时间快 6.5×、NFE 少 3.1×”。按图中数字,6.5× = 254 / 39 是对 OpenVLA;对 π0.5 是 57 / 39 ≈ 1.46×。摘要和引言的“2.9× inference speedup”等于真机 NFE 之比 10 / 3.4,真机墙钟时间对 π0.5 是 133 / 112 ≈ 1.19×。
解读如果把时间粗略拆成“固定开销 + N × 每步开销”并忽略 GPM、LCM 自身开销,LIBERO 上每个去噪步约 2.6 ms、固定部分约 30 ms,真机上约 3.2 ms 和 101 ms。也就是说 π0.5 的 10 步去噪在真机上只占约四分之一的时间,大头是 VLM 前缀,NFE 再降也换不来成倍的墙钟加速。
定性结果(图 6、附录图 8)
疑点图 6 的 s 在一条 episode 里一直在变
附录 B.5 说检索只在 episode 开始时做一次,之后缓存 top-k 的索引和权重;s = Σαisi 只依赖这些缓存值,按理整条 episode 不变(除非触发“任务漂移”重检索)。图 6 里 s 却从 0.92 变到 0.40,每帧都不同。另外第 3、4 帧(s = 0.42,λ = 0.51)和第 8 帧(s = 0.40,λ = 0.50)的方向与式 (12) 的单调递减相反,差值很小,可能只是示意数字。
解读键是每条 episode 一个向量,论文没说取 episode 的哪一帧;如果取开头,查询在第一帧最像(0.92)、之后场景变化导致相似度下降,正好是图上的样子。
读懂它
这篇真正说明了什么
关键 insight
1. 记忆可以接在“初值”上,不必进上下文
GPM 和 LCM 都只改 Xt,不加 token、不动 VLM 的输入分布、不改 flow policy 权重。阶段 II、III 合计 2000 步小模块训练,就在 π0.5 上拿到表 4 里 +4.0(LIBERO-Long)、+10.0(真机泛化)的增益。
2. 一个标量同时调噪声和计算量
s 既决定 λ(多大程度相信检索均值),又决定 N(走几步)。这是一个很便宜的“置信度 → 计算预算”接口,图 6 里同一条 episode 的 N 在 1 到 4 之间变化。
3. LCM 学的是“检索均值差多少”
目标是 A* − μ,所以完美的 LCM 会把起点直接推到正确动作附近。它只看动作历史,靠 Mamba 状态跨块累积信息,这是它能区分“看起来一样的两个阶段”的唯一来源。
4. 好处来自多条轨迹的统计量
k = 1 比不用 GPM 还差,k = 8 最好,每任务只存 1 条、混入别的任务反而比单条同任务好(表 5)。GPM 更像一个“按语义加权的动作均值与方差估计器”,而不是示范回放。
容易误解的地方
- “2.9× 加速”不是墙钟时间。那是真机 NFE 之比;对 π0.5 的实测时间比是 1.19×(真机)和 1.46×(LIBERO)。
- 摘要里的百分比多是相对值。CALVIN +13.5%(4.45 / 3.92)、真机 +42.9% / +52.4%(对 π0),表 4 括号里的降幅也是相对值。
- flow policy 没有在先验起点上训练过。附录 B.1 明确说训练时 𝒫0 = 𝒩(0, I),GPM 只在推理时替换起点;这和同专题 RA-VLA 训练时就用检索均值初始化不同。
- “训练效率”图比的是推理时外挂模块。见上面图 4 的疑点。
- 记忆库不是在线积累的。库是阶段 II 之后从训练数据离线建好的,部署中不增不删;论文把在线更新、遗忘列为未来工作。
FAQ
GPM 是不是就是把最像的示范拿来回放?
不完全是。起点是 k 条轨迹在当前进度处的加权均值加上 λ 倍的标准差噪声,之后还要经 flow policy 去噪 N 步,并叠加 LCM 偏置。表 5 也说明单条轨迹(k = 1)的效果最差。但它确实依赖训练集里有同类任务:LIBERO 评测的就是训练任务(换初始状态),库里一定有同任务轨迹;附录 A 也承认任务偏离已有经验时检索先验会误导策略。
NFE 从 10 降到 3.2,为什么时间只从 57 ms 降到 39 ms?
每次推理的大头是 VLM 处理图像和语言的前缀,这部分 OptimusVLA 一点没省,还多了 Prior Head 和 LCM。按图 5 的数字粗算,LIBERO 上一个去噪步约 2.6 ms,固定部分约 30 ms;真机上分别约 3.2 ms 和 101 ms。
LCM 不看图像,凭什么知道苹果放没放好?
凭动作历史。Mamba 的内部状态累积了本条 episode 执行过的所有动作块,“已经做过一次放下动作”会体现在状态里,即使两帧图像几乎一样。论文对这一点的证据只有图 6 下半的定性例子,没有专门的阶段歧义任务或定量指标。
CALVIN 换了环境,检索还能找到“同类”吗?
库来自 A、B、C 三个训练环境,测试在 D。CALVIN 的任务类型在各环境间相同,所以检索返回的是别的环境里做同一类任务的轨迹。论文称这是“语义锚定”:在旧动作先验上变形而不是从头生成。增益是 4.26 → 4.45(对复现的 π0.5),表 4 中去掉 GPM 时为 4.28。
进度 ρt 从哪来?LCM 不是负责推断进度吗?
论文没有说。GPM 取块用的 ρt 被描述为“维护的一个进度标量”,没有说明是按步数除以预期长度、还是由某个模块预测。LCM 被描述为推断任务进度,但它输出的是动作偏置,不是 ρt。两者之间没有写明的接口。
局限与疑点
作者承认的,和我们读出来的
论文自己提到的(附录 A)
- GPM 的效果受记忆库的覆盖面和质量限制;当前任务或场景与库里经验差别大时,检索到的先验可能误导策略。
- LCM 只建模局部、以动作为中心的一致性,且按固定长度的块工作;对需要很长时间跨度、多阶段依赖或延迟效应的任务可能不够。
- 未来工作:在线更新的记忆库(巩固、遗忘、带不确定性的检索);GPM、LCM 与 flow policy 端到端联合训练。
我们读出来的
- 疑点“2.9× 推理加速”是 NFE 之比;图 5 的 6.5×、4.9× 是对 OpenVLA;对 π0.5 的墙钟加速为 1.46×(LIBERO)和 1.19×(真机)。
- 疑点缺少“π0.5 用高斯起点走 3–4 步”的对照。flow policy 只在高斯源上训练,理想速度场在 t = 0 与起点无关,N = 1 时起点不起作用;积分起始时刻未披露。
- 疑点RoboTwin 摘要数字 38% 来自主表 8 个任务,全部 16 个任务为 30%;附录 8 个任务上与 π0 基本持平(22.1 vs 21.3)。
- 疑点CALVIN 表中 OptimusVLA、π0.5†、π0 三行的 Avg. Len 不等于五档之和(4.434 / 4.243 / 3.835 vs 4.45 / 4.26 / 3.92),其余基线都一致。
- 疑点图 4 的“训练效率”实为推理时外挂模块对未训够检查点的补偿。
- 疑点Session 级缓存与图 6 中逐帧变化的 s 矛盾;ρt 的来源、键取 episode 哪一帧都未披露。
- “去掉 GPM、保留 LCM”的配置怎么定义 LCM 的目标和起点,未说明。
- 记忆库规模 6500 = 130 × 50,疑似包含 LIBERO-90,库的来源未说明。
- k、τs、λ 与 N 的范围、H0、Δ、σ2min、pcold、LCM 结构尺寸、推理硬件全部未披露。
- LIBERO 上与 MemoryVLA 的比较输入条件不同(后者只用第三人称 RGB)。
- 真机只有一个平台、8 个任务,长程任务每个 25 次;关键帧里看到的都是单臂操作。
- tex 源码里留着一版被注释掉的旧摘要:RoboTwin 2.0 平均 82.6%、真机比 π0 高 12% / 14%、推理快 2.3×、CALVIN 比 π0 高 14%,与正式版差别很大,改动原因未说明。
放到专题里看
唯一把记忆接在“起点”上的一篇
在 Harness for Robotics 专题里,OptimusVLA 归在 Persistent State / Memory:它改的是“记什么”。但两块记忆的性质不同:LCM 是真正跨步保留的状态(本条 episode 已执行动作的 Mamba 状态);GPM 存的是训练集里的整条轨迹,机制上更接近检索,和 Context Architecture 那一组里的 RA-VLA 最像。两者共同的特点是都不改模型看到的 token,只改 flow 从哪里出发、走几步。
| OptimusVLA | MemoryVLA | SOMA | HiMe | RA-VLA | ActiveVLA | TIC-VLA | |
|---|---|---|---|---|---|---|---|
| 类别 | Memory | Memory | Memory | Memory | Context | Context | Context |
| 记住 / 看到什么 | 训练集整条动作轨迹(GPM);本条 episode 已执行动作块(LCM) | 本条 episode 每步的 VLM 感知 token(256)与认知 token(1),最多 16 条(真机长程 256),相邻相似条目合并 | 场景里物体实例:DINOv3 外观特征 + VGGT 估计的 3D 框 + 类别,头部相机扫描建立,执行中门控 EMA 更新 | Planner 维护的多模态键值库(图像 + 文本,如物体状态、人类偏好)和语言子目标清单,支持增、改、删 | 新任务 1–5 条示范切成的片段(预编码 VLM 特征 + 状态 + 动作块) | 点云渲染的正交投影,主动选视角并做 3D 放大 | 延迟到达的 VLM KV cache + 延迟时长、自车位移元数据 |
| 接在哪里 | flow policy 的初值 Xt 与步数 N | 检索结果与当前 token 门控融合,作为扩散动作专家的条件 | 记忆 token 经交叉注意力增强 VLM 的视觉语言 token | 策略外部,经语言子目标传给执行器 | 动作头逐层交叉注意力;并用检索动作块均值初始化 flow | VLM 的图像输入本身 | 动作专家交叉注意力的 KV |
| 记忆跨度 | 跨 episode(GPM)+ 本 episode(LCM) | 本 episode | 本 episode 的场景 | 整个长程任务 | 跨 episode(示范库) | 当前时刻 | 几秒内的延迟 |
| 训练 | π0.5 微调后冻结;两个小模块各 1000 步 | 7B Prismatic 上端到端训练 | VLM + DiT 动作头,以 GR00T N1.5 为主要基线;除 VLM 语言解码器外全训 | 只微调执行器(基于 π0.5);Sentry、Planner 用现成 VLM 零样本 | 训检索器 + 微调策略;新任务免训练 | PaliGemma 主干,预测热力图 | InternVL3-1B;注入延迟的模仿学习 + 在线 RL |
同类(Memory)的比较
- 和 MemoryVLA:都用“工作记忆 + 长期记忆”的认知科学比喻,但内容完全不同。MemoryVLA 的长期记忆是本条 episode 的 VLM 特征历史,作为动作专家的条件;OptimusVLA 的长期记忆是跨 episode 的动作轨迹库,工作记忆只有动作。OptimusVLA 在相关工作里批评这类工作记忆“每次更新都要跑一次完整的 VLM 前向,成为吞吐瓶颈”;而 MemoryVLA 附录报告记忆模块只让延迟增加约 3.6%(RTX 4090 上 0.194 s),而且两种 VLA 本来每步都要跑一次 VLM,这条批评与 MemoryVLA 自己报告的开销对不上。OptimusVLA 表 1 里把 MemoryVLA 列为对比,输入条件不同(见结果部分)。
- 和 SOMA:SOMA 记的是“东西在哪”(视野外物体的外观和 3D 位置),OptimusVLA 记的是“同类任务怎么动、我刚才怎么动”。SOMA 解决的是看不见目标的问题,OptimusVLA 解决的是起点太远和阶段歧义,两者没有交集,原则上可以叠加。
- 和 HiMe:HiMe 把记忆放在策略外面,用大模型以低频维护符号化的知识(语言子目标、带文字描述的记忆条目),执行器本身无状态;OptimusVLA 把数值化的记忆直接接在动作生成器上,每次推理都参与。前者擅长“记住规则和偏好、出错后改”,后者只管运动层面的连续性。
跨类的点到为止
- RA-VLA 是 GPM 最直接的参照:同样用对比学习训检索器、同样从库里取动作块,也同样把检索动作块的均值作为 flow 的初值。区别在于 RA-VLA 训练时就用这个初值(论文写它“加速训练收敛”),并把检索片段作为上下文喂给动作头;面向的是库里只有新任务几条示范的测试时适应。OptimusVLA 的库是训练集本身,flow policy 从未在先验起点上训练。
- ActiveVLA 改的是看哪个视角、看多细;TIC-VLA 改的是怎样看待过时的语义结果(把延迟作为显式输入)。它们都在“模型看到什么”这一侧,和 OptimusVLA 的接入点不重叠。
和(3)结构化执行、(4)评估与反馈两类
- 和 ACoT-VLA:两篇都在 π0.5 上做,LIBERO 基线同为 96.9(Long 92.4),提升也都集中在 Long:ACoT-VLA 98.5(Long 97.0),OptimusVLA 98.6(Long 96.4)。两篇都给动作头一段动作空间的先验,来源和训练方式不同:ACoT-VLA 用自己的 EAR 生成一段 15 点粗轨迹,训练时用真值未来轨迹做 teacher forcing;OptimusVLA 从训练集检索轨迹当去噪起点,flow policy 只在高斯起点上训练过。解读「动作头到底有没有依赖这段先验」,两篇都没有干净的对照;同类问题里只有 RA-VLA 的 margin 损失消融(LIBERO-Goal 0.532 → 0.098)给了直接证据。
- 和 τ₀-VLA、MotorMind:这两篇也存执行历史,但存在高层、写成文本,记的是任务进行到哪个阶段;OptimusVLA 的 LCM 存在低层,是已执行动作块上的 Mamba 隐状态,管的是相邻动作块的连贯和进度。解读两种记忆针对的时间尺度不同,原则上可以叠加。
- 和 TT-VLA:TT-VLA 的测试时 RL 只适用于离散 token 的自回归 VLA,π0.5 这类 flow 动作头不在它的适用范围内;OptimusVLA 测试时不改权重,只改 flow 的起点和步数。
术语表
读这篇会遇到的词
展开术语表
- NFE
- Number of Function Evaluations,生成一个动作块时调用 flow policy 的次数,即 Euler 步数 N。π0、π0.5 固定为 10。
- CFM / OT 路径
- 条件 flow matching;本文用直线路径 xt = (1 − t)x0 + t x1,目标速度 x1 − x0。t = 0 为噪声,t = 1 为动作。
- GPM
- Global Prior Memory,全局先验记忆:Prior Head + Memory Bank + Prior-Aware Sampler。
- LCM
- Local Consistency Memory,局部一致性记忆:Consistency Layer + Dynamic Awareness Module。图 2 图注误作 LBM。
- Prior Head
- 2 层 MLP,把 VLM 前缀 token 的均值投影成检索键 zre。
- Memory Bank
- 键值库:键为归一化任务嵌入,值为整条动作轨迹及元数据;用 FAISS
IndexFlatIP做最近邻检索。 - s
- 检索相似度的 softmax 加权平均,取值 [−1, 1],作为置信度控制 λ 和 N。
- τs / τc
- 检索加权的温度(未披露)/ InfoNCE 的温度(0.07)。
- λ
- 起点噪声尺度:X = μ + λ ε⊙√Var。
- ρt
- 任务进度标量,用来决定从每条检索轨迹的哪个窗口取动作块;来源未披露。
- H0 / Δ
- 取块滑动窗口的长度和步长;H0 ≠ H 时插值。
- Moment-matched Gaussian
- 用加权均值和对角方差把 k 个块的混合近似成一个高斯。
- MemorySession
- Session 级缓存:每个 episode 只检索一次,缓存 top-k 索引与权重。
- Mamba / SSM
- 选择性状态空间模型,线性复杂度地建模长序列;LCM 用它跨动作块更新状态。
- cold start / pcold
- 训练 LCM 时以概率 pcold 把上一块动作置零,模拟 episode 开头没有历史。
- Task-Pair Batch Sampler
- 按任务 ID 组 batch,保证每个 batch 里同一任务至少两条轨迹,使 InfoNCE 总有正样本。
- Avg. Len
- CALVIN 指标:5 个任务连做时平均连续完成的个数,等于五档成功率之和。
- RoboTwin 2.0 Hard
- 带杂物、光照、纹理、桌面高度强随机化的评测设置。