问题 · §1–2
单帧 VLA 分不清“按过了”和“还没按”
OpenVLA、π0、CogACT 这类主流 VLA 每一步只看当前观测。论文用按按钮举例:按下前和按下后的画面几乎一样,只看当前帧没法判断这个按钮按过没有,策略就可能反复去按。操作任务是非马尔可夫的,早先做过什么会影响后面该做什么。
最直接的补法是把连续几帧一起喂给 VLM。论文认为这有两个问题:
- 上下文长度受限。自注意力的代价随序列长度平方增长,能塞进去的帧数有限。
- 和预训练分布不一致。VLM 的机器人预训练(Open X-Embodiment)是单帧输入,多帧序列偏离了这个分布。
相关工作里的几种时序做法,论文各点了一个短板:Octo、RoboVLMs、Interleave-VLA 用图文交错格式喂视频,实现复杂、计算贵;RoboFlamingo 把视觉语言表示压成一个 latent token 用 LSTM 传递,细粒度的感知历史基本丢了;TraceVLA 把历史轨迹画在当前帧上,丢了语义细节;UniVLA 把过去的动作写进 prompt,更像思维链,没有真正用上历史信息。
解读这篇的“记忆”是什么层次的东西
它存的是 VLM 产出的特征,不是图像、不是文字,也不是显式的任务状态。记忆只在一个 episode 内累积(时间步编码用的是 episode 内的 timestep),不跨任务、不检索外部数据库。所以它解决的是“这个 episode 里我刚才做过什么”,不是“以前在类似场景里怎么做”。
方法 · 全局 · §3.1–3.2
VLM 产出工作记忆,记忆库在中间,动作头在最后
问题形式化:给定当前 RGB 图像 I ∈ ℝH×W×3 和语言指令 L,策略输出未来 T 步动作 (a1, …, aT) = π(I, L)。每个动作是 7 维:相对平移 Δx, Δy, Δz,相对旋转(欧拉角)Δθx, Δθy, Δθz,以及二值夹爪 g ∈ {0, 1}。注意策略的输入里没有历史帧,历史只通过记忆库进来。
视觉-语言认知模块
- 主干
- 7B Prismatic VLM,在 Open X-Embodiment 上做过机器人预训练
- 视觉
- DINOv2 与 SigLIP 并行,特征拼接成原始视觉 token
- 感知 token
- p ∈ ℝ256×dp,经 SE 瓶颈压缩;附录表 8 写感知 token 通道数 256
- 认知 token
- c ∈ ℝ1×4096:视觉 token 线性投影进语言空间,和指令一起过 LLaMA-7B,取 EOS 位置的输出
感知-认知记忆模块
- 记忆库
- 两条流,每条最多 L 条:感知条目 mperi ∈ ℝ256×dp,认知条目 mcogi ∈ ℝ1×4096
- 检索
- cross-attention,key 加时间步正弦编码,两层(注意力 + FFN)
- 融合
- 逐元素 sigmoid 门
- 整理
- 超过 L 条时,合并相邻最相似的一对
记忆条件动作专家
- 结构
- DiT,约 300M 参数
- 条件
- 先对 c̃ 做 cognition-attention,再对 p̃ 做 perception-attention
- 输出
- 16 步 × 7 维动作块
- 推理
- DDIM 10 步,CFG 系数 1.5
解读256 个感知 token 是怎么来的
224×224 的输入在 patch 14 的 DINOv2 和 SigLIP 上各得到 16×16 = 256 个 patch,所以 Np = 256 正好等于 patch 数。论文说 SE 瓶颈把视觉 token “压缩成紧凑的感知 token”,附录又说感知 token 通道数是 256,推算下来压缩的是通道(两路特征拼接后的宽度),token 数没变。这是按维度推的,论文没有写出 SE 模块的输入输出宽度。
未披露是不是从 CogACT 权重初始化
论文写“基于在 OXE 上预训练过的 7B Prismatic VLM”,视觉主干、DiT 动作头、推理时的自适应动作集成都和 CogACT 一致,效率表里的 “Baseline” 也没写名字。是否直接加载 CogACT 的 checkpoint 再加记忆模块微调,正文和附录都没说。
方法 · 记忆模块 · §3.3
检索、门控融合、合并:每一步在两条流里各做一遍
认知模块给出的工作记忆只反映当前时刻:
记忆库 PCMB 由两条流组成,每条最多 L 条:
1. 检索:当前 token 作 query,key 上加时间步编码
每个记忆条目带着它的 episode 时间步 ti,用正弦编码 TE(·) 加到 key 上,value 不加。感知流把 L 条记忆堆成 LNp×dp 的张量,认知流堆成 L×dc:
注意力之后接 FFN 构成一个 Transformer 层,叠两层得到最终的检索结果 Hp、Hc。感知流里 256 个 query token 各自看全部 L×256 个记忆 token;认知流里 1 个 query 看 L 个记忆。
2. 门控融合:逐元素决定信记忆还是信当前
g 是和 x 同形状的向量,每一维单独决定这一维取多少记忆、多少当前。融合结果 p̃、c̃ 被送往动作专家,同时写进记忆库。
3. 整理(consolidation):库满时合并相邻最相似的一对
当条目数超过 L,在每条流内部计算相邻条目的余弦相似度,选最高的一对取平均。两条流各选各的,所以感知流合并的可能是 t2、t3,认知流合并的可能是 t5、t6。论文的理由是去掉冗余、保留最显著的细节和语义,让记忆保持紧凑。
解读写进库里的是融合后的 x̃,不是原始的 x
这让每条记忆都是“递归”的:t 时刻写入的条目已经混入了 t 之前检索到的历史。所以即便两帧画面一模一样(按按钮前后),它们写进库里的条目也会不同。下面的演示里可以直接看到这一点。代价是记忆内容依赖模型参数,训练时不能离线预计算。
未披露公式里没交代的几处
① 合并后的条目在 TE 里用哪个时间步(前一个、后一个,还是平均)。② 第一步记忆库为空时检索怎么处理。③ 检索层里有没有 Q/K/V 投影:公式 (6) 直接写 q K⊤,但“一个 Transformer 层”通常带投影。④ 感知条目是 256×dp 的矩阵,算余弦相似度时是展平还是先池化。⑤ 新一个 episode 开始时是否清空记忆库(从时间步编码按 episode 计来看应当清空,但没有明说)。
交互 · 按论文公式 (5)–(9) 逐步计算
记忆库是怎样一步步读、写、合并的
下面用一个 12 步的“依次按蓝、绿、粉三个按钮”的玩具 episode 走一遍记忆模块。每个时间步分成:观测 → 检索 → 门控融合 → 写入 →(库满时)找相邻最相似 → 合并。所有数字都是浏览器里按公式实时算出来的。
感知-认知记忆库分步演示
玩具向量 · 可切换三项消融
演示的取舍:每帧的特征由手工规则生成(按钮颜色、机械臂在哪个按钮上方、是否按下,取值 0–2);门控 MLP 用固定种子的随机权重;检索只算公式 (6) 的一层、无投影;TE 乘 0.5 以免盖过 6 维玩具特征;感知条目展平后算余弦。合并条目的时间步论文未披露,演示取两者平均(显示为 τ)。空库时演示令 H = x。真实模型的检索偏好是训练出来的(见结果部分图 10),这里的注意力只反映玩具向量之间的相似度。
解读拨一拨开关能看到什么
FIFO 会先丢掉最早的条目,L = 4 时到 t=5 “起始画面”就没了;相邻合并不按先后丢,而是把“按下—抬起”这类连续相似的帧压成一条,最早的信息即使被合并,也以 t1–4 这样的条目留在库里。论文的检索可视化(图 10b)显示,Mikasa 的 ShellGameTouch 任务里模型的注意力几乎全压在最初几帧(球被盖住之前),这正是 FIFO 最先删掉的部分。关掉时间步编码后,画面相同的两条记忆在检索里无法区分先后。
方法 · 动作专家与训练 · §3.4 · 附录 C
动作专家与训练配方
记忆条件动作专家。一个约 300M 参数的 DiT,用 DDIM 采样 10 步,预测 T = 16 步的动作块。每个去噪步里,带噪动作 token 先加上去噪步的正弦编码,再和认知表示 c̃ 拼接;cognition-attention 层提供高层语义引导,perception-attention 层从 p̃ 补充细粒度视觉细节,最后过 FFN。训练目标是预测动作与目标动作之间的 MSE,最终向量过 MLP 得到 7 维连续动作。推理时 CFG 系数 1.5。
超参(附录表 8)。全局 batch 256(每卡 32 × 8 卡 A100,PyTorch FSDP),学习率 2×10−5,梯度裁剪 1.0,“repeated diffusion steps” 为 4(训练时每个样本重复采样 4 次扩散步,CogACT 的做法),动作块 16,感知 token 通道 256。数据增强按固定顺序做随机裁剪(90% 面积)、亮度 0.2、对比度和饱和度 [0.8, 1.2]、色相 0.05,评测时关闭。
记忆要训练,数据就得按时间顺序喂
流式加载:SimplerEnv-Bridge / Fractal
每个 episode 拆成连续帧并标上 episode ID。一个 batch 尽量用同一个 episode 的连续帧填满;episode 结束了就接着填下一个 episode 的帧;下一个 batch 从上一个停下的位置继续,保证 episode 内的时间顺序。记忆长度 16。
分组采样:LIBERO / Mikasa-Robo
每个 batch 分成若干组,每组是同一个 episode 里的若干帧,组内保持时间顺序。附录另一句写“每次迭代从单个 episode 里随机采 16 帧,与记忆长度 16 对应”。记忆长度 16。
疑点训练时记忆库怎么构造,论文没讲清
附录只描述了数据加载器,没说一个 batch 里的帧是不是逐帧串行前向、把前面帧的 x̃ 写进记忆供后面帧检索,梯度是否沿时间回传,batch 跨 episode 时记忆是否清空。LIBERO 的“随机采 16 帧、组内保持顺序”意味着训练时相邻记忆条目之间隔着不定数量的帧,而推理时每次调用都写入一条,两者的时间间隔分布不同。真机数据在训练前按末端位移(>0.01 m 或转角 >0.4 rad,最多隔 120 帧)抽帧,推理时是否按同样规则决定何时写记忆也没交代。
解读没有专门的记忆损失
记忆模块(检索两层、门控 MLP)只靠动作的去噪 MSE 端到端学习,没有对齐、对比或重建类的辅助目标。合并操作(余弦 argmax + 平均)本身无参数。
实验设置 · §4.1 · 附录 C–D、K
6 个平台,只给一张第三人称 RGB
| 平台 | 机器人 | 训练数据 | 训练步数 | 评测 | 记忆长度 L | 动作集成 |
|---|---|---|---|---|---|---|
| SimplerEnv-Bridge | WidowX | Bridge v2,约 6 万条遥操作轨迹 | 50k,每 2.5k 验证 | 4 任务 × 24 次 | 16 | CogACT 自适应集成,α = 0.1,窗口 7 |
| SimplerEnv-Fractal | Google Robot | RT-1,约 13 万条,700+ 任务 | 80k,每 5k 验证 | 4 任务 × VM / VA,共 336 个变体 | 16 | 同上,窗口 2 |
| LIBERO | Franka | 每任务 50 条示范(去掉失败轨迹) | Spatial / Object / Goal 各 20k;Long-10 与 Long-90 合训 40k | 每任务 50 次 | 16 | 不用 |
| Mikasa-Robo | Franka | 5 任务 × 250 条官方示范,128×128,Δ 末端控制 | 20k,每 1k 验证 | 每任务 100 个 episode | 16 | 不用 |
| 真机 · 通用 | Franka、WidowX | 每任务 50–150 条摇杆遥操作 | 5k–20k | 每任务 15 次(Pick Diverse Fruits 5 种 × 5 = 25 次) | 16 | 未披露 |
| 真机 · 时序 | Franka、WidowX | 每任务 200–300 条 | 5k–20k | 每任务 10 次(Seq. Push Buttons 3 种顺序 × 5 = 15 次),按步骤计分 | 256 | 未披露 |
输入。所有设置都只用一张 224×224 的第三人称 RGB 加语言指令。真机用前置的 Intel RealSense D435,640×480、30 fps 采集后下采样,系统通过 ROS 集成;Franka 每次实验用原装平行夹爪或 Robotiq 平行夹爪之一。
选点方式。四个仿真平台都在训练中定期“验证”,报告验证最好的那一步的成功率。附录解释:扩散模型的去噪目标不能可靠反映策略质量,所以用成功率挑 checkpoint。这里的验证就是在评测基准上跑成功率。
基线来源。
- SimplerEnv:CogACT-Large 用官方权重在作者的设置里复测(原论文只给了 CogACT-Base 的逐任务数字);π0 取自开源复现 open-pi-zero(float32,Uniform / Beta 两种时间步采样,用了本体状态),该复现没有 Fractal VA 的结果。
- LIBERO:CogACT 用官方代码复现;π0、π0-FAST 用原文数字,它们用了腕部相机和本体状态。
- Mikasa-Robo:OpenVLA-OFT、PI-0、SpatialVLA 来自 Mikasa-Robo 的 VLA 基线;同期的时序 VLA CronusVLA 由作者复现。
- 真机:OpenVLA、π0、CogACT,全部只用第三人称 RGB 和指令。
真机 6 个时序任务的计分细则(附录 D.4)
| 任务 | 指令 | 计分 |
|---|---|---|
| Seq. Push Buttons | 按指定颜色顺序按三个按钮 | 每按对一个 30 分,三个全对加 10 分;轻碰也算按下 |
| Change Food | 把盘里的食物拿走,再把另一个放上去 | 拿起并移走原食物 30,抓起新食物 30,放到盘上 30,完全成功加 10 |
| Guess Where | 用盖子盖住方块,再揭开 | 抓起盖子 30,盖住方块 30,揭开 40 |
| Clean Table & Count | 逐个清理桌面,每清一件按一次计数按钮 | 共 5 件,每件清走 10 分、按计数 10 分;小计数错误(没按实 / 多按一次)得 5,大错误(漏计 / 多按几次)得 0;明显想计数的空抓扣 5 |
| Pick Place Order | 按胡萝卜、香蕉、橙子的顺序放进篮子 | 每步对 30 分,全对加 10;顺序错误立即终止 |
| Clean Restaurant Table | 垃圾进垃圾桶,餐具进收纳箱 | 共 5 件,分类正确 20,放错 10,只抓起没放好 5 |
结果 · §4.2–4.6 · 附录
主表、时序基线、消融、鲁棒性与开销
五个平台的主表(表 1–5)
—
原表数字
疑点Mikasa-Robo:正文说“每个任务都最好”,表 4 不是这样
正文原话是 “consistently achieves the highest performance across all tasks”。表 4 里 InterceptMedium 上 MemoryVLA 24,PI-0 42;RememberColor3 上 MemoryVLA 44,OpenVLA-OFT 59。平均 41.2 最高这一点成立,主要来自 ShellGameTouch 的 88(次高 47)。
疑点“+14.6” 比的是复测的 CogACT-Large,不是最强基线
摘要和正文都突出 Bridge 上 +14.6,这是相对作者自己复测的 CogACT-Large(57.3)。同一张表里 π0-Beta* 是 68.4,差距 3.5;在 Spoon on Towel(84.6 vs 75.0)和 Stack Cube(47.9 vs 37.5)上 π0-Beta* 更高。LIBERO 表里没有 Long-90 的方法按前四套取平均,MemoryVLA 的 96.5 是五套平均;按前四套算 MemoryVLA 是 96.7(表 17),比 π0* 的 94.2 高 2.5。
和时序上下文类 VLA 比(附录表 17)
正文主表里时序方法不多,附录专门补了一张对比。作者指出 Mikasa-Robo 官方没有时序 VLA 基线,所以复现了同期的 CronusVLA(用滑窗模块聚合多帧 VLM 特征)。
| 平台 | 方法 | 平均成功率 | 说明 |
|---|---|---|---|
| SimplerEnv-Bridge | TraceVLA | 27.7 | 历史轨迹画在当前帧上 |
| RoboVLMs | 37.5 | 图文交错 | |
| CronusVLA | 60.4 | 多帧特征滑窗聚合 | |
| MemoryVLA | 71.9 | ||
| LIBERO(前四套) | TTF-VLA | 74.0 | |
| TraceVLA | 74.8 | ||
| 4D-VLA | 88.6 | ||
| CronusVLA | 92.2 | ||
| MAP-VLA | 93.4 | ||
| MemoryVLA | 96.7 | 前四套平均 | |
| Mikasa-Robo | CronusVLA(作者复现) | 18.0 | 五个任务都低于 MemoryVLA |
| MemoryVLA | 41.2 |
疑点表 3 和表 17 里 CronusVLA、4D-VLA 的数字对不上
表 3 中 4D-VLA 一行是 93.8 / 92.8 / 95.6 / 86.5(平均 92.2),CronusVLA 一行是 90.1 / 94.7 / 91.3 / 68.7(平均 86.2)。表 17 里 CronusVLA 变成了 93.8 / 92.8 / 95.6 / 86.5(平均 92.2),4D-VLA 是 88.9 / 95.2 / 90.9 / 79.1(平均 88.6)。同一组数字在两张表里挂在不同方法名下,至少有一张表标错了。
消融:五个设计选择(表 6、7、11、14)
SimplerEnv-Bridge 平均成功率,换算成 96 次试验里的成功次数
Bridge 每任务 24 次、4 个任务,平均成功率 × 0.96 就是 96 次里成功的次数。横轴从 58 开始,只为了把差距放大看清,柱长不代表比例。
原表逐任务数字(表 14、11)
论文读出的结论:两种记忆一起用最好(71.9),只用认知记忆 63.5、只用感知记忆 64.6;记忆长度 16 最好,4 和 64 都掉到 67.7;时间步编码 +2.1;门控比相加高 4.2;相邻合并比 FIFO 高 5.2。认知 token 从 1 个加到 4 个没有收益(69.8),作者推测单个 4096 维 EOS token 已经够用。
解读消融差距要按试验次数看
所有消融变体落在 96 次里成功 61 到 69 次之间。时间步编码的 +2.1 是 2 次成功;w/o Timestep PE 在 Stack Cube(50.0 vs 37.5)和 Spoon on Towel(83.3 vs 75.0)上反而更高,只在 Eggplant 和 Carrot 上低。论文没有报告多随机种子或置信区间,单项消融的结论偏弱;五项的方向一致,合起来比单项更可信。
| 补充消融(表 10、12、13) | 变体 | Clean Table & Count(真机) | LIBERO-Long-90 |
|---|---|---|---|
| 记忆长度 | 64 / 8 | 78 | 94.2 |
| 256 / 16(默认) | 84 | 95.6 | |
| 512 / 32 | 81 | 95.6 | |
| 融合 | Add | 78 | 93.8 |
| Gate | 84 | 95.6 | |
| 整理 | FIFO | 76 | 94.9 |
| Token Merge | 84 | 95.6 |
记忆长度一行:真机比较 64 / 256 / 512,LIBERO-Long-90 比较 8 / 16 / 32。真机这个任务每种设置 10 次试验、按步骤计分。
记忆长度和 episode 长度(附录表 9)
各套任务的动作长度(步数),竖线是论文用的记忆长度 L
对数横轴。线段是最短到最长,圆点是中位数,短竖线是平均。真机的 “Filtered” 去掉了末端几乎不动的帧(平移 <1 cm 且转角 <0.4 rad)。
原表数字(表 9)
解读真机时序任务里,合并其实很少发生
作者用这张表解释为什么真机时序任务要把 L 调到 256:这些任务即便抽帧后也明显更长。反过来看,抽帧后的中位数是 236 步,比 256 还短,如果推理时每步写一条,一半以上的 episode 根本不会触发合并;仿真里 L = 16 而 episode 平均 119–156 步,合并几乎每步都在发生,平均一条记忆要代表 7 到 10 帧。两种场景下“记忆整理”起的作用并不一样。这个推算依赖“每次调用写入一条”的假设,推理时的写入频率论文没说。
检索到底看了什么(附录图 10)
鲁棒性与零样本(附录 B、I)
分布外变化下的成功率
真机两项来自图 5,仿真四项来自图 6、图 7(数字与附录 B 正文一致)。带框的是 Base。都没有基线对比。
作者的结论:对干扰物、背景、纹理这类中等变化泛化良好,对未见相机视角掉得最多(Pick Coke Can 42.0,Move Near 58.0)。零样本任务泛化(表 16)以 Apple To Basket 为训练任务(5 次成功 4 次),在三个未见任务上分别是 Eggplant To Basket 3/5、Blush To Basket 2/5、Apple To Plate 2/5,平均 0.47。
疑点仿真鲁棒性的 Base 和主表对不上;有的“分布外”比 Base 还高
图 6、7 的 Base:Pick Coke Can 92.0、Move Near 76.0、Open/Close Drawer 46.3、Place Apple Into Drawer 72.0。表 2 里对应任务的 VM / VA 分别是 90.7 / 80.5、88.0 / 78.8、84.7 / 53.2、47.2 / 58.3,没有一个对得上,论文没说这组实验用的是哪个 checkpoint、什么设置。Move Near 和 Open/Close Drawer 的多个分布外变体比 Base 高 8 到 11 分,说明每格的试验次数不多、噪声不小。零样本泛化每个任务只有 5 次试验,也没有基线。
推理开销(附录表 15)
| 模型 | 延迟 RTX 4090 | 吞吐 RTX 4090 | 延迟 HGX H20 | 吞吐 HGX H20 | 显存 |
|---|---|---|---|---|---|
| Baseline | 0.187 s | 85.6 Hz | 0.236 s | 67.8 Hz | 15.8 GB |
| MemoryVLA | 0.194 s | 82.5 Hz | 0.246 s | 65.0 Hz | 16.6 GB |
300 次平均,bfloat16,动作块长度 16。作者把开销小归因于三点:每条认知记忆只有 1 个 token,感知记忆压到 256 通道,合并操作持续去掉冗余条目。
解读“82.5 Hz” 是动作块长度除以延迟,不是控制频率
16 / 0.194 = 82.5,16 / 0.187 = 85.6,四个吞吐数字都满足这个关系。每次前向本身约 5 Hz;SimplerEnv 上用自适应动作集成时每个控制步都要调用一次模型,实际控制频率就是这个 5 Hz 左右。另外表 15 没写测的是哪个记忆长度。L = 256 时感知记忆有 256 × 256 = 65,536 个 token 参与 cross-attention,开销会比 L = 16 时大,论文没测。
定性结果(附录图 13)
读懂它
这篇真正说明了什么
关键 insight
1. 记忆放在特征空间,不进 VLM 的输入
VLM 每步仍只看单帧,保持和单帧预训练一致;历史以压缩特征的形式在 VLM 之后、动作头之前注入。代价很小:单次推理 0.187 → 0.194 s,显存多 0.8 GB(L = 16 时)。
2. 两条流互补,单独都不够
只留认知流 63.5,只留感知流 64.6,两个都留 71.9。感知流每步存 256 个 token,承担了大部分存储;认知流每步只存 1 个 token,却和感知流贡献相当。
3. 相邻合并 = 自适应的时间分辨率
重复、静止的片段被压成一条,变化剧烈的片段保留更多条目,最早的关键帧不会被挤掉。FIFO 换成相邻合并,Bridge +5.2、真机 Clean Table & Count +8、LIBERO-90 +0.7。(解读:这个“分辨率”的说法是我们的概括。)
4. 涨得最多的是真正需要记忆的任务
真机时序任务比 CogACT 高 26,通用任务高 9;Seq. Push Buttons 从 15 到 58,Change Food 47 到 85。Mikasa 的 ShellGameTouch 88,次高 47。Fractal VM 平均只比 CogACT 高 2.9。
容易误解的地方
- 真机的“成功率”是按步骤计分的平均分。时序任务按细则给部分分(例如 Guess Where 抓起盖子就有 30 分),83 分不等于 83% 的试验完整完成。
- “比 SOTA 高 X 点”比的对象每个平台不一样。Bridge 的 +14.6 和 Fractal 的 +4.6 对 CogACT,Mikasa 的 +11.8 对 PI-0,LIBERO 的 +3.3 对复现的 CogACT。对最强基线的差距分别是 +3.5(π0-Beta*)、+4.6、+11.8、+2.5(π0*,按前四套)。
- “记忆”不跨 episode。它不是经验库,也不做相似任务检索;论文在结论里把“终身记忆”列为未来方向。
- 认知 token 不是语言输出。它是 LLaMA 在 EOS 位置的隐状态,模型不生成任何文字。
FAQ
为什么 Bridge 这种短任务也涨了 14.6 分?
Bridge 的四个任务(放勺子、放胡萝卜、叠方块、放茄子)不像按按钮那样明显依赖历史。论文把增益归于时序记忆,但没有“同一套训练流程、只去掉记忆”的对照:基线 CogACT-Large 是官方权重复测的,而 MemoryVLA 是在 20 个验证点里挑测试成功率最高的那个。两者之间除了记忆还有训练步数、数据加载方式(流式按时间顺序)和选点方式的差别。消融表里最接近“无记忆”的是只留一种记忆(63.5 / 64.6),也都高于 CogACT-Large 的 57.3。
为什么不直接把多帧喂给 VLM?
论文的两条理由:自注意力随长度平方增长,以及多帧输入偏离单帧的机器人预训练分布。MemoryVLA 每步只往库里加 256 + 1 个 token,并且 VLM 本身不看这些历史。附录表 17 里用多帧特征滑窗的 CronusVLA 在 Bridge 上 60.4、Mikasa 上 18.0,都低于 MemoryVLA,但这不是同一骨架下的受控对比。
认知 token 只有 1 个,够吗?
表 11:1 个 71.9,4 个 69.8。逐任务看 4 个 token 在 Spoon on Towel 更高(79.2 vs 75.0),Carrot 和 Eggplant 更低。作者推测单个 4096 维 EOS token 的语义容量已经足够。差距是 2 次成功 / 96 次,只能说“加到 4 个没看到收益”。
记忆长度为什么不是越长越好?
Bridge 上 16 最好,64 掉到 67.7;真机 Clean Table & Count 上 256 最好(84),512 是 81;LIBERO-90 上 16 和 32 都是 95.6。作者把最优长度和 episode 长度挂钩。论文没有解释长度变长为什么会变差;结合上面的长度统计,L = 64 时 Bridge 的大部分 episode 只合并很少几次,L = 512 时真机多数 episode 不触发合并,较长的 L 等于部分关掉了整理机制(解读)。
这个记忆模块能直接装到别的 VLA 上吗?
论文只在一种骨架(Prismatic-7B + DiT)上做了实验。机制本身只需要一组“每帧一个或几个语义 token + 一组视觉 token”和一个能做 cross-attention 条件的动作头,π0 这类把 VLM 和动作专家放在同一注意力里的结构需要另找插入点。这一点论文没讨论(解读)。
局限与疑点
作者承认的,和我们读出来的
论文自己提到的
- 对未见相机视角明显不鲁棒:Pick Coke Can 从 92.0 掉到 42.0,Move Near 从 76.0 掉到 58.0(附录 B.2)。
- 记忆长度需要按 episode 长度调:仿真 16,真机时序任务 256(附录 G)。
- 未来方向:memory reflection,把长期记忆对齐到 LLM 输入空间,在嵌入空间里做思维链;lifelong memory,把常用经验蒸馏成永久表示,跨场景、任务和本体泛化。反过来说明现在的记忆既不回到 LLM,也不跨 episode。
我们读出来的
- 疑点缺“同训练、无记忆”的对照,记忆的净贡献和训练流程、选点方式的差别混在一起(见 FAQ 第一条)。
- 疑点仿真结果取测试基准上最好的验证步(Bridge 20 个、Fractal 16 个、LIBERO 每 1k 步一个),基线是单个发布权重或原文数字。在 24 次试验的粒度上挑最大值,会系统性偏高。
- 疑点Mikasa 正文“每个任务都最好”与表 4 不符(InterceptMedium 24 vs 42,RememberColor3 44 vs 59)。
- 疑点表 3 与表 17 的 CronusVLA / 4D-VLA 数字互相错位。
- 疑点Fractal 的总试验数:正文写 336 个变体 “yielding 2,856 trials”,附录写 “producing 2,352 evaluation trials”。
- 疑点训练时记忆如何构造、梯度是否跨时间回传、推理时何时写入、episode 之间是否清空,都没写;训练与推理的帧间隔可能不一致。
- 疑点效率表没写记忆长度;L = 256 时 65,536 个感知记忆 token 的开销未测。“82.5 Hz”是 16 / 延迟。
- 疑点消融只在 Bridge 上做、每项 96 次试验,没有报告多种子或置信区间,差距 2–8 次;仿真鲁棒性的 Base 与主表对不上,部分分布外变体高于 Base。
- 真机通用任务正文说“每个任务都超过最强基线”,Stack Cups 是 93 平 CogACT 的 93。
- 合并后条目的时间步编码、空库时的检索、检索层是否带投影,均未披露。
放到专题里看
专题里最早的记忆方案:存自己的特征,在 VLM 之后取
在 Harness for Robotics 专题里,MemoryVLA 属于 Persistent State / Memory 一类,改的是“记什么”,不是“看什么”:VLM 每一步看到的仍然只有当前一帧和指令,变化在于策略多了一个跨时间步保存、按需读取的状态。它也是本专题四类论文里发表最早的一篇(2025-08),记忆类的另外三篇都引用了它。
| MemoryVLA | OptimusVLA | SOMA | HiMe | |
|---|---|---|---|---|
| 存什么 | 自己每一步融合后的特征:256 个感知 token + 1 个认知 token | GPM:训练集里语义相似轨迹的完整动作序列;LCM:上一个动作块和 Mamba 递归状态 | 物体级 3D 空间-语义 token(DINOv3 外观 + VGGT 几何得到的 3D 框,384 维) | 图文知识条目(向量库)+ 语言子目标清单 + 最近 8 帧原图 |
| 容量与整理 | 每条流最多 L 条(16 / 256),超出时合并相邻最相似的一对 | GPM 离线建库后冻结,不写入;LCM 递归更新 | 条目数等于物体实例数,无上限;同一物体 EMA 融合,新物体追加,不删除 | GPT-4o 显式 Add / Update / Delete,实测 5.5–14 条 |
| 怎么读、读到哪 | cross-attention 检索 + 门控,进 DiT 动作头的条件 | 检索结果替换 flow matching 的初始噪声(均值、方差、噪声尺度和 NFE),LCM 再加偏置 | VLM token 作 query 做 3 层 cross-attention,结果注入 DiT 动作头 | 不进 VLA;Planner 读记忆后输出语言子目标给 π0.5 执行器 |
| 时间尺度 | 单个 episode | GPM 跨 episode(每个 episode 开头检索一次);LCM 单个 episode | 单个 episode,开场先扫描 | 单个 episode |
| 训练 | 端到端微调(Prismatic-7B + DiT),只有动作 MSE | 从 π0.5 初始化;后两阶段冻结 VLA,只训 Prior Head 和 LCM | GR00T N1.5 式结构,除语言解码器外端到端训练 | 只微调 π0.5 执行器;Sentry 和 Planner 靠 prompt |
| 代表数字 | LIBERO 96.5;真机时序任务 83 | LIBERO 98.6(同表把 MemoryVLA 的前四套平均 96.7 列为基线) | 5 个视野外真机任务;RoboCasa GR1、SimplerEnv | 3 个真机任务,Task Progress 90% |
| 开销 | 4090 单次 0.187 → 0.194 s | LIBERO-Long NFE 3.2,π0.5 为 10.0 | 4090 约 1.58 s / 块,GR00T 1.30 | Planner 每次调用中位数 6–39 s,只在子任务交接时调用 |
- 和 OptimusVLA:唯一和 MemoryVLA 正面比过数字的一篇(LIBERO 表 1)。它把记忆拆成两半:跨 episode 的全局先验从训练数据里检索相似轨迹,放进噪声先验;episode 内的局部一致性只看已执行的动作。它的相关工作批评 MemoryVLA 这类工作记忆“每次更新都要做一次完整的 VLM 前向”。解读MemoryVLA 本来每步都要跑 VLM 出动作,记忆复用的是同一次前向的输出,这条批评在“想让记忆更新比 VLM 调用更频繁”时才成立。两者记的东西也互补:MemoryVLA 记“看到了什么”,OptimusVLA 的 LCM 记“做了什么”。
- 和 SOMA:注入方式几乎一样,都是 cross-attention 后作为 DiT 动作头的条件。区别在组织方式:SOMA 按物体组织,带 3D 框,同一物体的多次观测用 EMA 合并,记忆随物体数增长;MemoryVLA 按时间组织,合并依据是“时间相邻且特征相似”,记忆随时间增长、靠合并封顶。SOMA 的相关工作只用一句话提到 MemoryVLA:存近期观测或关键帧,支持短期推理。
- 和 HiMe:层次完全不同。HiMe 的记忆是人能读懂的语言和图文条目,由 GPT-4o 显式增删改,执行器只收到语言子目标;MemoryVLA 的记忆是不可读的特征向量,怎么读由梯度学出来。HiMe 把 MemoryVLA 归为“策略层的检索式记忆库”。两篇都和 FIFO 做了对照,结论方向一致(HiMe 68% vs 90%,MemoryVLA 66.7 vs 71.9),但记忆单位一个是知识条目,一个是帧特征,不能直接类比。
- 跨类,点到为止:Context Architecture 三篇改的是“看什么”。RA-VLA 在测试前装好一个专家示范库,检索片段送进 DiT 动作头的 cross-attention,库在 rollout 中只读;ActiveVLA 每一步从点云重新渲染、挑视角和放大,不跨步保存状态;TIC-VLA 让 10 Hz 的动作专家读 0.5 Hz VLM 最近一次输出的 KV 缓存和延迟元数据。解读RA-VLA 的“检索 + cross-attention 进 DiT”在结构上和 MemoryVLA 最像,区别只在检索对象:别人的示范,还是自己这一回合的历史。TIC-VLA 的单槽缓存可以看成容量为 1、不做检索、每次覆盖的极端情形。
- 和(3)结构化执行、(4)评估与反馈两类:τ₀-VLA 举的番茄炒蛋「加盐」和本篇的按按钮是同一类问题:做完之后画面几乎不变,只看当前帧判断不了。τ₀ 把「已加盐」写进高层的文字执行记忆,低层 VLA 只拿子任务(分层 + 记忆让这个任务从 0/10 到 4/10);MemoryVLA 把历史存成策略内部的特征 token,每步检索。解读两篇在证据上有同一个缺口:MemoryVLA 没有「同一训练流程、只去掉记忆」的对照,τ₀ 评测协议里写了记忆消融却没给结果,分层和记忆的贡献分不开。MotorMind 的 Memory Manager 也把历史压成有界的摘要,但做法是让同一个 VLM 把逐动作日志改写成一张文字便条;MemoryVLA 是合并相邻且最相似的特征条目。
术语表
读这篇会遇到的词
展开术语表
- VLA
- Vision-Language-Action 模型:以图像和语言为输入、直接输出机器人动作的模型,通常基于预训练 VLM。
- 非马尔可夫
- 当前最优动作不只取决于当前观测,还取决于历史。按按钮、计数、盖住再揭开都是例子。
- CogACT
- 本文的主要基线和骨架来源:Prismatic VLM 输出认知特征,DiT 动作头据此去噪动作块,推理时用自适应动作集成。
- Prismatic VLM
- DINOv2 + SigLIP 双视觉编码器接 LLaMA 的 VLM 家族;OpenVLA 和 CogACT 用的就是它在 OXE 上预训练后的版本。
- 工作记忆 Mwk
- 当前时刻的感知 token p 和认知 token c,类比大脑里短时保持信息的神经活动。
- 感知 token p
- 视觉特征经 SE 瓶颈压缩后的 256 个 token,保留低层视觉细节(类比 verbatim 记忆)。
- 认知 token c
- LLaMA-7B 在 EOS 位置的 4096 维输出,代表高层语义(类比 gist 记忆)。
- PCMB
- Perceptual-Cognitive Memory Bank,感知-认知记忆库:两条流,每条最多 L 个条目,存融合后的 p̃、c̃。
- TE / Timestep PE
- 按 episode 内时间步计算的正弦位置编码,检索时加在 key 上。
- 门控融合
- g = σ(MLP([x, H])),x̃ = g⊙H + (1−g)⊙x,逐元素决定用多少记忆。消融里的对照是直接相加(Add)。
- Consolidation / Token Merge
- 记忆整理:条目数超过 L 时,在每条流内合并余弦相似度最高的一对相邻条目(取平均)。对照是 FIFO(丢最早的)。
- SE 瓶颈
- Squeeze-and-Excitation 结构的压缩模块,这里用来压缩视觉 token 的通道。
- DiT / DDIM / CFG
- 扩散 Transformer 动作头;10 步的确定性采样器;分类器无关引导,系数 1.5。
- 自适应动作集成
- CogACT 的推理策略:每步都调用模型,把重叠的历史动作块按相似度加权平均。本文 α = 0.1,Bridge 窗口 7,Fractal 窗口 2。
- VM / VA
- SimplerEnv-Fractal 的两种评测:Visual Matching 尽量还原真实场景外观;Visual Aggregation 改背景、光照、干扰物、纹理等做压力测试。
- Mikasa-Robo
- 专门考察记忆的操作基准,本文用其中 5 个任务:ShellGameTouch、InterceptMedium、RememberColor3 / 5 / 9。
- 步骤计分
- 真机时序任务的评分方式:按子目标给部分分,满分 100。
- OXE / RLDS
- Open X-Embodiment 跨本体机器人数据集;RLDS 是它使用的 episode 数据格式。