不用记忆模块,反而拿了四个记忆榜的第一:SimpleMemVLA 把"记住过去"变成了 VLA 的原生能力
你有没有想过一个挺拧巴的事——整个机器人学习社区这几年给 VLA(Vision-Language-Action 模型)设计了那么多精巧的记忆机制:检索库、压缩器、循环状态,名字一个比一个响亮,结果一篇新论文出来说:把这些全删掉,直接把历史视频原封不动喂给骨干网络,效果反而碾压所有记忆机制。
说实话我第一反应是不信。这种"less is more"的故事听得太多了,多数最后证明是基准选得巧妙。但看完这篇 SimpleMemVLA(arXiv:2609.05533)的实验设计和因果干预部分,我承认这次有点东西。
核心摘要:长时程机器人操作里,做下一步决策需要的信息可能只出现在几分钟前的观测里,这就是部分可观测性难题。现有的记忆机制——检索、压缩、循环状态——都必须在"还不知道未来需要什么"的时候就决定保留什么,作者管这叫 write-time commitment(写入时承诺),一旦丢错了信息,后面再怎么努力都救不回来。SimpleMemVLA 的思路是干脆不承诺:把采样后的历史按骨干预训练时见过的带时间戳视频格式直接喂进去,让注意力自己去读。结果在 RMBench、RoboMME、MIKASA-Robo、RoboMemArena 四个记忆基准上全部刷新 SOTA,RMBench 上一个模型打所有任务拿到 94.0% 的总成功率,比每个任务单独训练的最强 specialist 还高 11 个点;通用控制(LIBERO 97.5%)不掉点,决策延迟压到 0.68 秒接近单帧 VLA。这篇文章最值钱的不是又一个记忆模块,而是它用控制变量实验证明了一件事:限制性能的不是记忆机制设计得好不好,而是"什么时候被迫丢弃信息"这个时机本身。
📖 论文信息
- 标题:SimpleMemVLA: A Simple but Effective Native-Video Memory for Vision-Language-Action Models
- 作者:Cheng Yin, Wang Xu, Junpeng Yang, Sikyuen Tam, Hanyu Liu, Yuan Yao, Xiangrui Zeng, Junbo Cui, Yequan Wang, Zhouping Yin, Yankai Lin
- 机构:华中科技大学、中关村学院、清华大学、面壁智能(Modelbest)、北京大学、中国人民大学高瓴人工智能学院、北京智源人工智能研究院
- 链接:https://arxiv.org/abs/2609.05533
- 代码:https://github.com/wadeKeith/SimpleMemVLA
- 提交时间:2026 年 9 月 2 日
🎯 问题:记忆机制的病不在"记不准",在"丢得太早"
先把这个痛点讲具体。想象一个机器人在整理桌面:它一分钟前看到一个红色方块被盖子 A 盖住,现在任务是"把红方块放进碗里"。当前帧里红方块根本不可见——这个决策完全依赖对过去的记忆。类似的还有数数任务(这个按钮我按过几次了?)、遮挡任务(目标被推到挡板后面之前在哪儿?)。
主流 VLA——RT-2、Octo、OpenVLA、π₀、π₀.₅ 这一挂——只拿单帧或亚秒级窗口做条件。作者一句话点破:这类策略无论训练得多好,在记忆任务上都必死,因为两个当前观测完全相同的状态可能需要完全不同的动作。
那加个记忆模块不就行了?大家确实这么干了,分三个家族:
| 记忆机制家族 | 做法 | 代表思路 |
|---|---|---|
| 检索库(retrieval bank) | 历史帧存外部存储,决策时检索相关帧 | 相关帧可能检索时就被漏掉 |
| 学习压缩器(learned compressor) | 把历史总结成固定预算的 token | 视觉细节压缩时就丢了 |
| 循环状态(recurrent state) | 持续维护一个紧凑表示 | 早期证据会被后来的更新覆盖 |
这三种机制的共同病根,论文概括得很准:它们都必须在写入时决定保留什么,但决策时才知道需要什么。相关帧检索时漏了、细节压缩时丢了、证据被循环更新冲掉了——丢的时候不觉得可惜,等需要的那一刻已经晚了。
然后作者抛出整篇论文的地基:这套机制的动机是"分钟级历史太大,直接处理不现实"。但这个假设在现代 VLM 骨干上已经不成立了。他们给了一个具体数字——按操作任务需要的采样率,60 秒历史只占约 5.6k tokens,而 Qwen3.5 骨干的上下文窗口是 262k tokens,能装下大约 45 分钟的视频历史。
45 分钟。对绝大多数操作任务来说,这等于无限记忆。

图1:左边三个设计家族都在观测流和策略之间插了一个专用记忆机制,SimpleMemVLA 直接把带时间戳的流当原生上下文用;右边是关键数字——60 秒历史只占 262k token 窗口里的 5.6k,容量根本不是瓶颈
🏗️ 方法:没有记忆模块的记忆系统
一句话讲清核心 idea:历史帧走骨干的原生视频通道(带明文时间戳),当前腕部帧走图像通道,骨干生成一句文本子任务,这句子任务的 hidden states 是历史流向动作头的唯一通道。

图2:(a) 架构只用了标准 VLA 组件,对带时间戳历史的自注意力就是记忆本身;(b) 连续决策只差一个时间 patch,共享前缀可以在动作执行期间提前 prefill,延迟从 1.02 秒降到 0.68 秒且输出逐字节一致
几个设计值得展开聊。
单一模态规则。多帧相机流变成视频(带时间戳),单帧相机变成图像(不带时间戳)。输入格式本身就区分了"过去"和"现在",不需要任何额外的提示工程。这个设计很干净——模型看到视频就知道这是历史,看到单张图就知道这是当下。
明文时间戳是唯一的时间定位手段。视频处理器把相邻帧打包成 temporal patch,每个 patch 前面加上骨干预训练时见过的那种明文时间戳(比如"0.0s")。消融实验会证明这个小东西对计数类任务至关重要,先卖个关子。
窄文本通道(narrow text channel)。这是我最欣赏的设计。action expert 不直接吃几千个视觉 token,只吃一句话子任务的 hidden states 加 token embeddings,再加一个本体状态的单 token 编码。条件集长这样:
然后接一个标准的 flow-matching 动作头:
为什么非要逼着信息走这个窄通道?你想想看,如果 action expert 直接读全部视觉 token,那"记忆"就散在几万维的注意力里,你根本不知道策略到底用没用历史、用了哪段历史。现在所有历史相关信息必须从那句生成的子任务里挤过去——子任务 span 变成了一个显式的、可检查的、甚至可以动手编辑的接口。后面的因果干预实验就是踩着这个接口做的。
训练监督有两路:动作 chunk 的 flow-matching 损失,加子任务文本的 token 级交叉熵。子任务标签是离线用云端 LLM 给每条示范在监督锚点生成的,解码上限 64 token。
流式推理:在执行动作的时候预填下一段历史。这是工程上让方案落地的关键。连续两次决策共享几乎整个视频前缀,只差最新到达的一个 temporal patch。那就在机器人执行当前 action chunk 的空档里,把共享前缀 prefill 进 KV cache,下次决策只处理增量。注意这是精确流式——输出和全量重算逐字节相同,不是近似。
还有个细节我喜欢:硬件适配全部收敛到一个配置元组 \((\mathcal{C}_{\mathrm{hist}}, \mathcal{C}_{\mathrm{cur}}, T_w, f_v, H, d_a)\)——历史相机集、当前相机集、窗口长度、采样率、动作时程、动作维度。跨双臂、单臂平台只改配置不改代码。
🧪 实验:四个记忆榜全刷,通用能力不掉
评估阵仗不小:4 个记忆中心 benchmark 加 2 个通用控制 benchmark,全部闭环评估。先记住一个前提——SimpleMemVLA 每个 suite 只训一次、单个模型跑所有任务,而 RMBench 上的基线是每任务单独训一个 specialist。这个设定下还能赢,含金量就不一样了。
主结果
RMBench(双臂,基于 RoboTwin 2.0,10 个记忆任务):
| 方法 | M(1) 单记忆平均 | M(n) 多记忆平均 | Overall |
|---|---|---|---|
| π₀.₅ | 14.4 | 5.5 | 10.4 |
| EventVLA | 79.0 | 54.0 | 67.8 |
| MemoryWAM(最强 specialist) | 84.2 | 81.5 | 83.0 |
| SimpleMemVLA(单模型) | 91.6 | 97.0 | 94.0 |
有个数据点很有意思:SimpleMemVLA 是全场唯一从单记忆(91.6%)到多记忆(97.0%)平均不降反升的方法。其他所有方法记忆负担一重就垮,它反而更稳——直觉上这符合"全量历史加注意力"的特性,证据多了选择面反而宽。
RoboMME(单臂,16 任务,4 个维度),这张表是全文最狠的一刀:
| 方法 | Counting | Permanence | Reference | Imitation | AVG |
|---|---|---|---|---|---|
| 人类表现参考 | 88.5 | 91 | 93 | 89.5 | 90.5 |
| GroundSG + GT VLM(oracle 感知) | 83.9 | 93.3 | 95.2 | 64.0 | 84.1 |
| MemER(最强非 oracle 基线) | 48.8 | 53.2 | 38.0 | 29.5 | 42.4 |
| SimpleMemVLA (Retrieval 变体) | 46.5 | 42.0 | 13.5 | 24.0 | 31.5 |
| SimpleMemVLA (Token Compression 变体) | 46.0 | 13.5 | 12.5 | 18.5 | 22.6 |
| SimpleMemVLA (Recurrent State 变体) | 31.0 | 24.0 | 17.5 | 10.0 | 20.6 |
| SimpleMemVLA | 91.5 | 96.0 | 82.5 | 83.0 | 88.3 |
三个变体和完整版只在历史怎么进模型上有区别,骨干和训练设置完全固定。结果原生上下文 88.3%,retrieval 只剩 31.5%,compression 22.6%,recurrent 20.6%。更扎心的是连用 ground-truth 感知符号的 GroundSG(84.1%)都被超了。16 个任务全部第一。
这个对比设计得相当讲究——它把"记忆机制之间的横向比较"变成了"记忆接口本身的消融"。结论也直接:限制性能的不是机制做得准不准,而是write-time 丢弃信息这个动作本身。给机制再好的感知也没用,因为它丢信息的那一刻就注定找不回来了。
MIKASA-Robo(遮挡记忆,线索在机器人动手前展示然后移除):SimpleMemVLA 拿下 74.0% 的平均成功率,最强先前 VLA 是 44.4%,拉开 29.6 个点,甚至比非 VLA 的记忆专用策略 GMP(67.8%)还高 6.2 个点。
RoboMemArena(26 任务,轨迹平均超 1000 个控制步,126 秒原生上下文窗口):平均 TSR 来到 63.6% 的水平,比最强先前模型高 17.4 个点,超过 benchmark 自带的 ground-truth 参考(46.1%)。Occlusion 类别从 39.1% 拉到 64.3%,Counting 从 31.4% 拉到 71.4%。不过得说句公道话——Transferring 类别上它没领先(35.8%,MemER 和 FrameSamp+Modul 更高),不是全方位无死角。
通用控制不掉点是另一个关键卖点。LIBERO 上拿到 97.5% 的平均成绩,和最强基线 RIPT-VLA 打平;LIBERO-Plus 一万多个扰动任务上以 78.4% 的成功率全场第一。有个对比很有说服力:RIPT-VLA 在标准 LIBERO 上也是 97.5%,但一加扰动掉 29.1 分,SimpleMemVLA 只掉 19.1 分。作者的解释是保留的历史充当了稳定的视觉参考——扰动当前帧骗不了它,因为它还记得没扰动的世界长什么样。
消融:记忆到底是怎么工作的
消融在两个 RMBench 任务上做:cover-blocks(依赖约 25 秒前的一次覆盖事件)和 press-button(要数清整条轨迹里按过几次按钮)。
证据必须在窗口里。cover-blocks 用 30 秒历史还能行,缩到 15 秒——覆盖事件被裁掉了——任务直接失败。这不是模型变笨了,是证据物理上不存在了。听起来像废话,但它确认了性能确实来自"读到证据"而不是别的捷径。
帧顺序和时间戳分工明确。打乱帧顺序,两个任务全崩;但去掉明文时间戳,cover-blocks 不受影响,press-button 严重退化。解释一下:记住"红块被盖住了"这种单一事件,帧顺序本身就够了;但要数"按了几次"这种分布式事件,没有显式时间戳就数不清。这个发现挺细的,也解释了为什么要保留预训练的原生时间戳格式。
子任务 span 是工作记忆。这个消融最巧妙:复用哪怕前一个决策的 hidden states(只差一步),两个任务急剧退化;但复用同样陈旧的 position ID 却没事。再把子任务文本里的目标词删掉,让可见文本在决策间完全一样——策略照样按种子特定的顺序执行。信息存在上下文 hidden states 里,不在文本表面。
控制信号走 hidden states 不走 embeddings。把 token embeddings 换成另一个目标的,行为几乎不变;把 hidden states 换掉或清零,成功率崩溃,甚至策略会被重定向到替换状态编码的那个目标。这证实了窄通道设计的判断:历史到动作的接口就是那串 hidden states。
因果干预:证明它真的在读历史
这是全文我最想吹的部分。大多数"有记忆"的策略,你很难证明它不是靠当前帧里的某些巧合特征蒙对的。作者的做法是:固定模型、指令、当前观测、机器人状态、部署路径,只改历史视频,看输出变不变。

图3:每个块是一个 benchmark,每行是从最旧到最新的历史。橙色边框是证据帧,灰色填充是证据消融,红色边框是从别的 episode 插进来的 donor 帧。移除证据会改变输出,donor 证据把输出重定向到 donor 的内容,匹配的对照编辑则输出不变
掩蔽实验三连: - RMBench cover-blocks:把记录红块被盖位置的那段历史遮掉 → 策略选错盖子;遮掉任务无关的历史 → 输出不变。 - MIKASA-Robo RememberColor:遮掉含颜色线索的帧 → 抓错颜色。 - RoboMME PickXtimes:遮掉一次已完成的抓取-放置 → 策略推断的次数减一(比如"第四次"变"第三次"),于是多抓一次。说明它记住的是确切的事件次数,不是模糊的"发生过"。
替换实验更野,直接展示了涌现的视觉 in-context learning: - 把"红块盖在 A 盖下"的历史帧换成另一个 rollout 里"红块盖在 B 盖下"的帧 → 策略转头去开 B 盖。 - MIKASA-Robo 里把品红线索换成红色线索 → 策略改抓红色块。 - RoboMME PatternLock 里把"先向前移"的示范换成"先向右移"的 → 策略跟着改执行"向右移"。
关键是:这些编辑过的历史在训练里从没出现过,模型完全冻结,没有参数更新、没有针对干预的监督。它就是在推理时读了一段新构造的视觉历史,然后照做。说实话看到这个的时候我意识到,这套"原生上下文"已经不只是在"记住过去"了——它成了一个推理时的视觉接口,你可以通过编辑历史来重新编程策略的行为。这个性质以前只在文本 LLM 的 in-context learning 里见过,现在出现在视觉历史上,想象空间不小。
效率:接近单帧 VLA 的延迟
单张 H100、bf16、batch 1:
| 历史长度 | 全量重算 | 流式推理 | 备注 |
|---|---|---|---|
| 60 秒(约 5.6k tokens) | 1.02 s/决策 | 0.68 s/决策 | 低于 0.96 s 实时预算,额外 0.11 s 后台 prefill 恰好塞进动作执行间隙 |
| 45 分钟(约 245k tokens) | 32.1 s/决策 | 1.18 s/决策 | 两条路径输出逐字节相同 |
60 秒场景下,全量重算已经勉强能实时,流式直接压到接近单帧 VLA 的成本。45 分钟那个对比更夸张——32.1 秒对 1.18 秒,27 倍的差距。
当然这里有个诚实的局限:KV cache 和后台 prefill 的开销还是随累积历史线性涨的,episode 无限长就扛不住。附录里作者给了个滑动窗口注意力(SWA)变体——每次决策追加一个新 patch、驱逐一个过期 cache 块——让开销和 episode 总长度解耦。这是训练-推理一致的设计,不是推理时的近似 hack,方向是对的,但正文里没给它的性能数据,这块我也只能等后续。
🤔 我的判断
这篇论文的定位我觉得很清晰:它不是底层突破,是一次极其扎实的正名。
它做的事说到底就一件——指出整个子领域建立在一个过时的假设上。当 VLM 骨干还是 4k、8k 上下文的时候,"分钟级历史必须压缩"是对的;现在 262k 上下文能装 45 分钟视频,这个前提没了,建在它上面的三座大厦(检索、压缩、循环)自然摇摇欲坠。作者没有像多数论文那样急着再发明一个"更好的记忆模块",而是先问:如果不压缩会怎样?然后用控制变量实验把答案钉死——RoboMME 上 retrieval/compression/recurrent 三个变体对完整版的 31.5/22.6/20.6 vs 88.3,这组数字会很难反驳。
亮点我数三个: 1. 问题重新定义得漂亮。write-time commitment 这个概念把三类机制的病根统一了,比"我们的模块比你的模块好"高一个维度。 2. 窄文本通道 + 因果干预形成闭环。先设计一个可检查的接口,再用这个接口做干预证明策略真的在读历史——这套方法论比刷榜本身更有价值,以后所有号称有记忆的 VLA 都应该过一遍这个检验。 3. 效率方案是真的能落地。执行间隙 prefill 共享前缀,思路简单但恰好卡在实时预算内,而且输出逐字节一致,不是拿近似换速度。
要挑毛病的话也有几个: - 所有评估都在仿真里。RMBench、RoboMME、MIKASA-Robo、RoboMemArena、LIBERO 全是仿真 benchmark。真实机器人上的传感器噪声、光照漂移、执行延迟抖动会不会破坏"逐字节一致"的流式假设,论文没回答。真机验证是这个故事能不能闭环的最后一环。 - 窗口终究有限。SWA 变体只在附录里,没给主榜数据。如果哪天任务时程超过 45 分钟(长时程家务、工厂巡检),这套原生上下文还顶不顶得住,现在是未知数。 - 对骨干的依赖被低估了。这个方法成立的前提是骨干在预训练时真的学会了处理带时间戳的视频——换一个视频能力弱的 VLM,结论可能整个翻转。论文没有换骨干的消融,算是个留白。 - Transferring 类别没领先,说明原生上下文也不是万能药,跨物体属性迁移这类问题可能还需要别的归纳偏置。
跟同期工作比,MemoryWAM、MemoryVLA++、MemER 这批记忆模块论文现在处境有点尴尬——它们不是被 SimpleMemVLA 打败的,是被"问题本身可能不需要解"打败的。我同意作者最后的倡议:以后任何新的 VLA 记忆机制,第一个 baseline 都应该是"同一个策略直接读自己的完整视觉历史"。过不了这一关,机制设计得再巧都是在给过时假设打补丁。
工程上的启发很直接:如果你在做 VLA 或长时程 agent,先别急着设计记忆模块,算算你的历史折成 token 到底多长。大概率你会发现,骨干的上下文窗口比你想象的能装。记忆问题在 2026 年可能已经不是容量问题,而是你愿不愿意把选择权留到读取时的架构问题。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我