带有记忆的 VLA 完全拆解:从滑动窗口到层次化持久记忆,机器人为什么必须学会记住

10782 字
54 分钟
带有记忆的 VLA 完全拆解:从滑动窗口到层次化持久记忆,机器人为什么必须学会记住

引言:VLA 为什么突然开始谈“记忆”#

过去两年,Vision-Language-Action(VLA)模型把机器人控制从传统模块化管线推向了端到端范式:相机图像进入视觉编码器,人类指令进入语言模型,模型直接输出动作 token、连续 action chunk 或扩散式动作轨迹。这个路线继承了 VLM 的语义泛化能力,也让机器人系统第一次有机会把“看见什么、听懂什么、怎么动”放进同一个模型里训练。

但 VLA 的一个基本假设正在暴露问题:很多模型仍然把当前观测当成足够充分的状态,只根据当前图像和当前指令预测下一段动作。这近似于马尔可夫控制。真实机器人任务却经常不是马尔可夫的。机器人刚刚把杯子放到哪里、抽屉是否已经打开、遮挡背后物体是什么颜色、当前任务执行到第几步、刚才失败的原因是什么,这些信息未必存在于当前图像里,却会直接决定下一步动作。

典型 VLA 输入和动作预测流程:视觉编码、语言指令和动作头共同构成端到端控制模型
典型 VLA 输入和动作预测流程:视觉编码、语言指令和动作头共同构成端到端控制模型

带有记忆的 VLA 试图解决这个矛盾。它给机器人增加一条时间维度上的信息通路:模型不仅处理“此刻看到什么”,还要处理“之前发生过什么”。这篇文章把 Memory+VLA 拆成四类:Sliding-Window Memory、Episodic Retrieval Memory、Latent State / Fast Weight Memory、Hierarchical Persistent Memory。它们看起来都叫 memory,但在系统中的位置完全不同:有的把历史帧直接塞进上下文,有的检索关键帧,有的把经验压进可更新参数,有的把任务进度写成上层语义状态。

本文会从 VLA 的基本架构讲起,再逐一拆解 DREAM-ZERO、KEMO、LaMem-VLA、RoboTTT、MEM、RMBench / Mem-0 和 τ0\tau_0-VLA,最后给出一个面向工程实现的统一接口视角。

VLA 的基本结构:从“看懂任务”到“输出动作”#

具身智能任务大体可以分成导航和操作。导航任务要求机器人在已知或未知环境中找到目标位置、目标物体或目标区域。操作任务要求机器人通过接触完成抓取、放置、推动、堆叠、开关门、整理物体等动作。它们和纯文本大模型的最大区别在于:机器人必须和真实物理世界闭环交互,输出不是句子,而是会改变环境状态的动作。

一个 VLA 模型通常包含三部分。

第一部分是视觉编码器。它把相机图像、多视角图像或视频帧编码成视觉 token,负责空间理解、物体识别、几何关系和场景状态表示。第二部分是语言模型或多模态 backbone。它接收视觉 token 与指令 token,完成语义对齐和任务理解。第三部分是 action head。它把 backbone 的输出转成机器人动作,可以是离散化动作 token,也可以是连续动作向量、action chunk、diffusion action 或 flow matching action。

OpenVLA 式端到端结构:图像、指令进入 VLM backbone,再由 action head 预测机器人动作
OpenVLA 式端到端结构:图像、指令进入 VLM backbone,再由 action head 预测机器人动作

这种结构的优势很明显。预训练 VLM 已经在互联网图文数据中学到了大量物体、场景、语义和常识,VLA 通过机器人数据微调,把这些知识迁移到动作预测里。问题也同样明显:如果模型每一步只看当前图像,它很难知道当前图像背后的任务历史。一个桌面场景在不同任务阶段可能长得几乎一样,但正确动作完全不同。

这就是记忆进入 VLA 的入口。

记忆解决的不是一个问题,而是三类问题#

Memory+VLA 的动机可以分成三类,这是理解这个方向最好的切入点。

第一类是辅助当前动作决策。很多短程操作需要历史细节。例如机器人刚刚看到目标物体在左侧,但当前视角被机械臂遮挡;它刚刚翻开盒盖,看见里面有红色物体,但下一帧只看到盒盖外观;它刚刚接触到某个物体,接触结果会影响下一步夹爪姿态。这类信息不需要跨越十分钟,但需要跨越当前观测的盲区。

非马尔可夫操作中的历史依赖:当前图像不足以决定动作,模型需要短期历史补足被遮挡或已变化的信息
非马尔可夫操作中的历史依赖:当前图像不足以决定动作,模型需要短期历史补足被遮挡或已变化的信息

第二类是提升长程任务完成能力。清理厨房、做三明治、整理桌面、按顺序完成多个子任务,都需要机器人知道“已经做了什么”和“下一步应该做什么”。这类任务的难点不只是低层控制,还包括任务进度追踪、子任务切换、错误恢复和计划更新。

长程任务中的阶段记忆:机器人需要记录任务节点,而不只是保留最近几帧图像
长程任务中的阶段记忆:机器人需要记录任务节点,而不只是保留最近几帧图像

第三类是帮助 VLA 学习新技能。一些方法把人类视频、其他机器人视频或历史示范以 in-context learning 的方式输入模型,让模型在测试时模仿训练中没有见过的技能。此时“记忆”不再只是任务过程中的临时状态,而变成了测试时适应的载体。

这三类问题对应三种不同的时间尺度:几帧到几十帧的短期工作记忆、跨越整个 episode 的关键事件记忆、跨任务或跨示范的技能记忆。不同 Memory+VLA 方法的差异,本质上就是它们选择在哪个时间尺度上存什么、怎么取、怎么插入策略网络。

四类 Memory+VLA:同一个词,四种系统位置#

现有带记忆的 VLA 可以分成四类。这个分类非常适合工程理解。

记忆模式存储对象读取方式优点主要代价
Sliding-Window Memory最近若干帧图像、文本、KV cache 或动作上下文固定窗口直接输入模型简单、稳定、容易部署没有长期记忆,窗口外信息会丢失
Episodic Retrieval Memory关键帧、关键事件、短期/长期 latent memory用 query-key 相似度或事件触发检索保留长程关键信息,计算量可控检索机制难设计,漏检会直接伤害动作
Latent State / Fast Weight Memory隐状态、可更新 fast weight、测试时训练状态通过 recurrent state 或 TTT 层参与推理上下文长度可扩展,不必显式保存所有历史容量有限,训练和稳定性复杂
Hierarchical Persistent Memory上层语义进度、子任务状态、下层短期视频上层规划、下层控制分层消费适合长程任务和错误恢复系统复杂,延迟和训练成本更高

四类 Memory+VLA 的概念图:滑动窗口、检索式记忆、潜状态/快权重记忆与层次化持久记忆
四类 Memory+VLA 的概念图:滑动窗口、检索式记忆、潜状态/快权重记忆与层次化持久记忆

下面按这四类展开。

Sliding-Window Memory:最直接,也最容易遇到窗口边界#

Sliding-Window Memory 的思路最朴素:把最近一段历史作为上下文输入模型。这个历史可以是最近几帧图像,可以是最近的语言描述,可以是最近动作 chunk,也可以是 transformer 里的 KV cache。它的优点是几乎不需要额外设计复杂的检索器,只要扩大输入上下文或保留缓存,就能让模型看见近期信息。

缺点也清楚:窗口长度决定记忆上限。窗口太短,关键事件一旦滑出上下文就消失;窗口太长,视觉 token 数暴涨,推理延迟和显存成本不可控。Sliding window 适合短程控制和局部遮挡,不适合需要跨分钟追踪任务进度的场景。

DREAM-ZERO:把视频扩散模型变成 World Action Model#

DREAM-ZERO 是这一类里很有代表性的系统。论文题目是 World Action Models are Zero-shot Policies。它不再把机器人策略理解成“当前图像到动作”的映射,而是把动作预测和未来世界状态预测绑在一起:模型同时生成下一段视频和下一段 action。这样做的好处是,视频本身成为密集的世界状态表示,动作不再脱离物理动态孤立预测。

DREAM-ZERO 的训练和推理流程:模型联合预测未来视频与动作,并在闭环执行中把真实观测重新输入
DREAM-ZERO 的训练和推理流程:模型联合预测未来视频与动作,并在闭环执行中把真实观测重新输入

DREAM-ZERO 以 Wan2.1-14B 这类视频 DiT 作为基础模型。训练时,它把最后一帧图像和下一阶段 action 共同解码。推理时,它保留最近四帧作为记忆,指导后续图像预测和动作生成;这些记忆以 KV cache 的形式参与模型。为了避免预测视频误差滚雪球,系统在执行 action 后会把真实观测重新输入模型,用真实世界反馈校正下一轮预测。

这条路线很强,但计算量也很大。DREAM-ZERO 原始单次推理约 5.7 秒,论文和项目页也强调它通过一系列系统和模型优化把 14B 视频扩散模型压到实时闭环控制。关键优化包括四层。

第一层是异步闭环执行。传统串行方式下,机器人执行完上一段动作后等待模型预测下一段动作。异步执行把 action 预测和上一个 action chunk 的执行重叠起来,用控制链路掩盖推理时间。这不能提高机器人对突发变化的反应速度,但可以减少“机器人空等模型”的时间。

第二层是系统级并行与缓存。Classifier-Free Guidance 中的有条件去噪和无条件去噪可以分配到不同 GPU。DiT caching 则减少 diffusion 去噪步数,相关系统优化把去噪次数从 16 次减少到 4 次。

第三层是实现级优化,包括 CUDA Graph、post-training quantization、kernel 和 scheduler 优化。这里包括 NVFP4 量化和固定推理流程下的 CUDA Graph 优化。

第四层是 DreamZero-Flash。它希望把四次 diffusion 去噪进一步优化成一次,但此时 action 必须在视频仍然较噪声的阶段预测。训练时给 video 和 action 不同噪声程度,让 action head 学会在视频尚未完全去噪时做出动作判断。相关结果显示,整体 latency 可以压到 150ms 以内。公开资料中,DREAM-ZERO 也报告了 7Hz 闭环控制、相对现有 VLA 在新任务和新环境上超过 2 倍的泛化提升,以及通过人类或其他机器人视频示范带来超过 42% 的未见任务表现提升。

DREAM-ZERO 的系统优化贡献表:并行、缓存、实现优化和 DreamZero-Flash 共同压缩延迟
DREAM-ZERO 的系统优化贡献表:并行、缓存、实现优化和 DreamZero-Flash 共同压缩延迟

Sliding window 在 DREAM-ZERO 中不是孤立存在的。它和世界模型、视频预测、异步控制、KV cache、量化和 kernel 优化绑在一起。这说明 Memory+VLA 并不只是模型结构问题,它会立刻变成系统问题:历史信息越多,推理链路越长,实时控制越依赖工程优化。

Episodic Retrieval Memory:不要记住一切,只记住关键事件#

如果 sliding window 的问题是“窗口外信息会丢”,最直接的补救是建立 memory bank,把历史中的关键事件保存下来。每次推理时,模型不读取完整历史,而是检索和当前场景相关的记忆,再输入 VLA。

Episodic Retrieval Memory 的核心难点有两个。第一是存储:哪些帧值得保存?如果保存太多,memory bank 会膨胀,检索也会慢;如果保存太少,关键事件会丢。第二是检索:当前 observation 和 instruction 应该如何构造 query?相似度看视觉外观、动作状态、语言语义,还是任务阶段?一旦检索漏掉关键事件,后面的 VLA 再强也可能做错。

KEMO:用机器人运动事件触发关键帧记忆#

KEMO 的全称是 Event-Driven Keyframe Memory for Long-Horizon Robot Manipulation with VLA Policies。它的出发点很实际:长程操作里,有些历史帧比其他帧重要得多。比如机器人完成一次抓取、移动到新区域、物体状态发生明显变化,这些都是任务阶段变化的线索。KEMO 不平均采样历史,也不只保留最近帧,而是自动选择和任务进展相关的 keyframe。

KEMO 架构:利用轨迹连续性和视觉差异选择关键帧,再通过 cross-attention 融合到 VLA
KEMO 架构:利用轨迹连续性和视觉差异选择关键帧,再通过 cross-attention 融合到 VLA

KEMO 的 keyframe 选择分两步。第一步用轨迹连续性找候选点。当机械臂关节速度下降时,系统认为这里可能是关键帧候选,因为速度下降常常对应接触、放置、抓取完成或阶段切换。第二步用 DINOv2 视觉特征和上一个关键帧比较,只保留相似度低的候选帧,避免保存重复画面。

被选出的 keyframe 会被编码成 token,并通过 cross-attention 与当前观察融合。训练早期,为了避免 memory 分支突然引入过大扰动,KEMO 给融合了 memory 的输入加一个初始为 0 的权重,让模型逐渐学会使用记忆。训练时还会提高关键帧附近 action 的权重,因为这些位置往往对应任务阶段转折点,对成功率影响更大。

公开摘要中,KEMO 在双臂真实操作任务上比无记忆基线提升了 23.6% 的任务成功率和 34.1% 的阶段完成率。这个结果也说明,事件驱动关键帧不是“把更多帧塞给模型”,而是在用机器人自身的运动信号帮助模型判断哪些历史值得记住。

KEMO 的真实任务对比结果:关键帧记忆提升长程操作中的任务成功率和阶段完成率
KEMO 的真实任务对比结果:关键帧记忆提升长程操作中的任务成功率和阶段完成率

LaMem-VLA:把历史经验重构成短期和长期 latent memory#

LaMem-VLA 的全称是 Dual Latent Memory in Vision-Language-Action Models for Robotic Manipulation。它关注的问题比 KEMO 更偏表示空间:如果 memory 只是作为策略外部的辅助上下文存在,它和 VLA backbone 的推理过程仍然隔了一层。LaMem-VLA 希望把历史经验重构成 VLA 原生 latent token,让记忆直接参与多模态推理和动作形成。

LaMem-VLA 总体框架:短期 visual memory 和长期 action memory 经过检索、压缩和 weaving 后进入 VLA reasoning
LaMem-VLA 总体框架:短期 visual memory 和长期 action memory 经过检索、压缩和 weaving 后进入 VLA reasoning

LaMem-VLA 把记忆分成短期记忆和长期记忆。短期记忆主要保存 visual embedding,强调近期视觉细节。长期记忆主要保存 action embedding,强调跨阶段动作和任务历史。短期 visual token 经过 SE-bottleneck block 压缩,并用 mean pooling 得到 key。检索时,当前图像和指令经过 transformer 得到 query,再用余弦相似度从 memory vault 中找相关记忆。检索出的记忆经过 transformer block 压缩为 latent memory token,再和当前 observation、instruction 拼成连续 embedding 序列输入 VLA,最后 action expert 预测动作。

LaMem-VLA 还处理了 memory bank 满了以后的合并问题。当短期记忆存储满后,系统计算每两个相邻短期记忆的余弦相似度,把相似度最高的两个记忆平均融合。这是一个简单但有意义的 memory consolidation 策略:相近历史保留为一个压缩状态,给新历史腾出容量。

LaMem-VLA 的实验结果:在 LIBERO 和 SimplerEnv 上比较多种 VLA 与记忆增强策略
LaMem-VLA 的实验结果:在 LIBERO 和 SimplerEnv 上比较多种 VLA 与记忆增强策略

KEMO 和 LaMem-VLA 代表了 episodic retrieval 的两种方向。KEMO 从“什么时候值得记”出发,用事件检测选择关键帧;LaMem-VLA 从“记忆应该以什么表示进入模型”出发,把历史经验变成短期/长期 latent token。前者更像 memory selection,后者更像 memory representation。

Latent State / Fast Weight Memory:把历史压进可更新状态#

Episodic memory 显式保存历史条目,检索时再读出来。另一条路线把历史压进隐状态或可更新参数里。这样做的吸引力在于:历史长度可以增长,但每次推理时不必线性读取所有历史帧。代价是记忆容量更难解释,训练也更复杂。

RoboTTT:测试时训练作为机器人工作记忆#

RoboTTT 的题目是 Context Scaling for Robot Policies。它把 Test-Time Training(TTT)引入机器人策略,用 fast weight 作为 memory,把 visuomotor context 扩展到 8K timesteps。论文摘要中写到,这比当时的策略上下文长三个数量级,而且不增加推理延迟。

RoboTTT 把权重分成 static weight 和 fast weight。Static weight 保存训练中学到的通用技能。Fast weight 则在测试时随着时间步不断更新,保存部署过程中获得的信息。这个 fast weight 更新过程可以概括为:

WtWt1ηWLFW(fWt1(Kt),Vt)W_t \leftarrow W_{t-1} - \eta \nabla_W \mathcal{L}_{\mathrm{FW}}(f_{W_{t-1}}(K_t), V_t)

这里 WtW_t 是当前 fast weight,Kt,VtK_t,V_t 可以理解为当前时间步构造出的训练信号,LFW\mathcal{L}_{\mathrm{FW}} 是用于更新 fast weight 的局部目标。更新后的 fast weight 再参与输出:

Ot=fWt(Qt)O_t = f_{W_t}(Q_t)

RoboTTT 的 fast weight 更新:测试时把历史信息压进可更新参数,而不是显式保存所有历史帧
RoboTTT 的 fast weight 更新:测试时把历史信息压进可更新参数,而不是显式保存所有历史帧

RoboTTT 将 fast weight 以 MLP 形式插入 DiT 每一层。为了让网络稳定使用这条新通路,训练时使用 tanh gating 学习 α\alpha 向量,初始化为 0,让 TTT 层权重逐步进入主干输出:

O=tanh(α)OTTT+OAttnO = \tanh(\alpha) \odot O_{\mathrm{TTT}} + O_{\mathrm{Attn}}

这个初始化策略很重要。若一开始就让未训练好的 TTT 分支强行干预动作预测,模型容易不稳定;从 0 开始逐步打开,相当于给原模型加一个可学习的记忆残差。

RoboTTT 的 TTT 层:fast weight 模块插入 VLA/DiT 层内,通过 gating 与原 attention 输出融合
RoboTTT 的 TTT 层:fast weight 模块插入 VLA/DiT 层内,通过 gating 与原 attention 输出融合

长序列训练带来显存问题。Fast weight 贯穿整个轨迹,反向传播如果保留全部 activation,内存会爆炸。RoboTTT 用 truncated backpropagation through time(TBPTT)截断梯度,把长轨迹分成多个片段。每段之间 fast weight 继续传递,但梯度在边界停止。这样模型仍然能在前向过程中携带长期状态,同时把训练显存控制在可承受范围内。

RoboTTT 的 TBPTT:fast weight 状态跨段传递,梯度在段边界截断以降低训练内存
RoboTTT 的 TBPTT:fast weight 状态跨段传递,梯度在段边界截断以降低训练内存

RoboTTT 还使用 Sequence Action Forcing:给整个轨迹的不同 action chunk 分配不同 noise 等级,避免整条轨迹对模型来说过难或过简单。公开摘要中,RoboTTT 训练到 8K-timestep context 后,在真实机器人任务上比单步上下文基线整体性能提升 87%,并完成了一个五分钟、十阶段的装配任务;8K context 版本还比 1K context 版本提升 62%。

RoboTTT 的实验结果:更长上下文和测试时训练带来长程任务性能提升
RoboTTT 的实验结果:更长上下文和测试时训练带来长程任务性能提升

RoboTTT 的启发在于:memory 不一定要是外部数据库,也可以是模型内部的可更新状态。它把“机器人记住了什么”转化为“fast weight 如何改变下一步计算”。这条路线很适合上下文极长、显式检索成本太高的任务,但调试难度也更高,因为 fast weight 中到底存了什么并不直观。

Hierarchical Persistent Memory:把长程任务拆成上层记忆和下层控制#

当任务时间尺度继续变长,单一 memory 机制很难同时满足两个需求:下层控制需要近期细节,上层规划需要抽象进度。Hierarchical Persistent Memory 采用分层策略:上层 policy 维护任务进度、子任务和语义记忆,下层 policy 根据当前子任务和短期视频/图像记忆输出动作。

MEM:短程视频记忆加长程文本记忆#

MEM 的全称是 Multi-Scale Embodied Memory for Vision Language Action Models。它的核心判断是:长程机器人记忆应该用多种模态、多个粒度表示。短程记忆要保留最近细节,比如物体被机械臂遮挡前的位置;长程记忆要记录抽象语义,比如“菜谱已经进行到哪一步”。

MEM 总体结构:短程视频记忆和长程文本记忆共同指导低层 action 生成
MEM 总体结构:短程视频记忆和长程文本记忆共同指导低层 action 生成

MEM 的推理流程可以分成高层和低层。高层输入当前观察图像和上一帧记忆,输出更新后的长程记忆和当前子任务。低层接收子任务和最近一段时间的视频,输出 action。低层还可以监测子任务是否完成,把完成信号反馈给高层。这里还引出一个工程问题:high-level 和 low-level 是否可以用不同频率运行。这个问题很关键,因为高层规划不需要每个控制步都跑,低层动作却要满足实时性。

MEM 推理流程:高层维护语义进度并生成子任务,低层使用短期视频记忆执行动作
MEM 推理流程:高层维护语义进度并生成子任务,低层使用短期视频记忆执行动作

MEM 的视频编码器也做了效率设计。视频包含多张图片,直接做完整时空 attention 会导致 token 数和计算量暴涨。MEM 将时间 attention 和空间 attention 解耦,每四层插入一次时间 attention,对不同时间的相同 patch 做因果 attention。低层 policy 每次只输入当前时间步图像对应的 token;历史帧信息通过时间 attention 的 KV cache 提供。这样可以在保留历史信息的同时控制 token 规模。

公开资料中,Physical Intelligence 的 MEM 项目页提到 MEM 可以支持最长约 15 分钟的任务,处理部分可观测性,并通过 in-context adaptation 纠正策略。它展示了一个很重要的方向:长程 VLA 的 memory 不应该只在模型输入端堆帧,而要变成一套跨层级、跨模态、跨频率的系统。

MEM 的实验结果:混合文本和视频记忆在长程真实任务中明显优于无记忆或单一记忆形式
MEM 的实验结果:混合文本和视频记忆在长程真实任务中明显优于无记忆或单一记忆形式

RMBench 与 Mem-0:先把“需要记忆的任务”定义清楚#

RMBench 不是单纯提出一个更强策略,而是提出一个 memory-dependent robotic manipulation benchmark。这个工作非常重要,因为 Memory+VLA 如果没有专门 benchmark,很容易只在普通任务上比较成功率,无法知道模型到底有没有使用记忆。

RMBench 设计了 9 种需要记忆的操作任务,并分成 M(1)M(1)M(N)M(N) 两类。M(1)M(1) 任务至少需要一帧历史信息才能完成,M(N)M(N) 任务需要多帧历史信息。它们覆盖了物体恒常性、阶段依赖、过去事件影响当前动作等场景。

RMBench 任务集合:多个任务显式要求机器人使用历史信息,而不是只依赖当前图像
RMBench 任务集合:多个任务显式要求机器人使用历史信息,而不是只依赖当前图像

RMBench 还提出了 Mem-0,一个带显式 memory 的模块化策略,用于受控消融。Mem-0 分成上层 planning 和下层 execution。上层使用每个子任务结束时的图像作为 keyframe 记忆,并结合首帧图像进行子任务规划。下层使用子任务内首帧和最近几帧 sliding window 作为短期记忆,把当前图像和记忆 embedding 输入 DiT 预测动作。同时,Mem-0 设计了 sub-task 结束判断器,输入近几帧场景和子任务,判断是否应该进入下一次规划。

Mem-0 架构:上层规划保存子任务关键帧,下层控制使用首帧和最近窗口完成动作预测
Mem-0 架构:上层规划保存子任务关键帧,下层控制使用首帧和最近窗口完成动作预测

RMBench 的价值在于,它把“记忆能力”从泛泛而谈变成可测对象。一个 VLA 在普通 LIBERO 或 SimplerEnv 上成功,不等于它真的会记忆;它可能只是当前观测足够充分。Memory+VLA 需要 RMBench 这类专门任务来拆分模型能力边界。

RMBench 实验表明,加入显式 memory 的策略在多类记忆依赖任务上明显优于无 memory 策略
RMBench 实验表明,加入显式 memory 的策略在多类记忆依赖任务上明显优于无 memory 策略

τ0\tau_0-VLA:高层策略也可以做测试时搜索#

τ0\tau_0-VLA 把 hierarchical memory 和 test-time computation 结合起来。长程操作中,高层策略的每一次子任务决策都很关键:一旦子任务顺序错了,低层再稳也无法完成目标。大多数 hierarchical VLA 每次高层决策只做一次 forward,τ0\tau_0-VLA 则把高层子任务生成视为一个可扩展计算的问题。

τ0-VLA 总体结构:高层 policy 使用执行记忆生成子任务,低层 policy 在多种机器人形态上执行
τ0-VLA 总体结构:高层 policy 使用执行记忆生成子任务,低层 policy 在多种机器人形态上执行

它的高层 policy 维护 execution memory,根据当前观察和历史记忆生成下一步子任务。当置信度足够高时,系统直接执行;当置信度不高时,系统进行子任务搜索。搜索过程使用 beam search:每一轮提出多个 candidate,再用 value model 打分,对高分候选继续 rollout。World model 负责预测执行某个子任务后的环境状态,从而让高层策略在提交动作前评估多个未来分支。

τ0-VLA 的搜索过程:高层 policy 结合 world model 和 value model,在关键节点分配更多测试时计算
τ0-VLA 的搜索过程:高层 policy 结合 world model 和 value model,在关键节点分配更多测试时计算

公开摘要中,τ0\tau_0-VLA 使用 40,115 小时异构真实世界数据训练。它强调高层策略可以在难决策上分配更多 test-time computation,提高下一子任务预测准确率,并转化为长程闭环任务成功率。相关实验也展示了它在真实长程任务上的 scaling law:更多计算预算可以带来更好的高层决策。

τ0-VLA 的 scaling 结果:高层测试时搜索提升长程任务中的下一子任务预测和闭环表现
τ0-VLA 的 scaling 结果:高层测试时搜索提升长程任务中的下一子任务预测和闭环表现

τ0\tau_0-VLA 说明,Memory+VLA 不只是“多给模型看历史”。当任务拉长后,记忆会进入规划、搜索、世界模型和 value model,形成一套上层决策系统。

一个统一工程视角:Memory+VLA 的四层接口#

从工程角度看,Memory+VLA 可以分成四个层次。

第一层是 memory 存储层。它决定保存什么。可以按 timeline 顺序保存文字、图片、视频、hidden state、KV cache、action embedding 或 fast weight state。

第二层是 memory 检索层。它决定取什么。策略可以是 window context、固定间隔、固定位置、query-key 匹配、事件触发、阶段触发、world-model guided search。

第三层是 memory 处理层。它决定怎么把取出的 memory 送进模型。可以直接拼输入,可以插入 cache,可以变成 latent token,可以进入 cross-attention,也可以更新 fast weight。

第四层是 memory 更新层。它决定一次 VLA 推理结束后如何写回 memory。更新可以是追加新帧、合并相似记忆、替换旧 memory、更新文本摘要、更新 fast weight、更新任务阶段状态。

Memory+VLA 的四层工程抽象:存储、检索、处理、更新构成可组合的记忆系统
Memory+VLA 的四层工程抽象:存储、检索、处理、更新构成可组合的记忆系统

这个抽象比论文分类更适合落地,因为不同论文的方法可以拆成组件重新组合。比如 KEMO 的事件触发关键帧可以作为检索层策略;LaMem-VLA 的短期/长期 latent memory 可以作为存储和处理层设计;RoboTTT 的 fast weight 可以作为处理和更新层的一种实现;MEM 的文本长程记忆和视频短程记忆可以作为存储层的多模态策略;τ0\tau_0-VLA 的 world-model search 可以作为高层检索和规划策略。

一个自然的用户接口设想,是用 YAML 文件定义 memory 的存储、提取、插入模态和数量。这个方向很合理。未来的 Memory+VLA 引擎不应该把 memory 策略写死在模型里,而应该像推理框架配置 KV cache、batching、quantization 一样配置 memory。

Memory+VLA 推理引擎接口草图:用 YAML 描述 memory 的存储、检索、插入和更新策略
Memory+VLA 推理引擎接口草图:用 YAML 描述 memory 的存储、检索、插入和更新策略

一个可能的配置可以长这样:

memory:
storage:
short_term:
modality: [image_embedding, action]
capacity: 16
update: sliding_window
episodic:
modality: [keyframe, text_summary]
capacity: 64
update: event_triggered
latent:
modality: fast_weight
update: test_time_training
retrieval:
short_term:
method: latest
count: 4
episodic:
method: query_key
query: current_image_instruction
count: 8
injection:
visual_memory: cross_attention
text_memory: prompt_prefix
latent_memory: ttt_layer
metrics:
- success_rate
- subtask_completion
- step_latency
- retrieval_latency
- encoding_latency
- gpu_peak_memory

真正有用的框架还需要评估维度。需要同时记录 SR、subtask completion、每 step 延迟、memory 检索延迟、memory 编码延迟、训练效率、GPU peak memory、CPU/GPU 传输量。这些指标很关键,因为 Memory+VLA 的工程瓶颈往往不是“成功率是否提升”,而是“提升的成功率是否值得这份延迟、显存和系统复杂度”。

把这个接口落到真实系统里,还需要把一次控制循环拆成更细的执行时序。一个典型周期可以写成五步:先从相机和机器人状态读取 observation,再根据当前 instruction 和阶段状态生成 memory query,然后从短期窗口、episodic bank、latent state 或上层文本记忆里取出候选,再把这些候选转换成模型能消费的 token、cache、prompt 或 fast weight,最后执行动作并把新的 observation、action、阶段判断写回 memory。

这个时序里最容易被低估的是“更新”。很多论文强调 retrieval,但机器人闭环里 memory 写入同样关键。如果写入太频繁,memory bank 会被重复帧淹没;如果写入太保守,关键事件会漏掉;如果写入只看视觉相似度,可能把外观相近但语义不同的阶段合并;如果只看语言摘要,又会丢掉空间细节。因此一个工程化 Memory+VLA 系统最好同时提供四类写入触发器:固定时间间隔、运动事件触发、视觉变化触发、子任务完成触发。KEMO 更接近运动事件触发,LaMem-VLA 更接近相似度压缩和 latent consolidation,MEM / Mem-0 更接近子任务完成触发。

另一个必要设计是异步化。低层控制频率可能是 10Hz、20Hz 甚至更高,而检索、视频编码、文本摘要、world-model rollout 不一定能在每个控制步内完成。更合理的实现是:低层 policy 每步读取已经准备好的热记忆;后台线程持续编码新帧、更新 keyframe、维护文本摘要;高层 policy 只在阶段切换或置信度不足时运行。DREAM-ZERO 的异步闭环执行、MEM 的高低层频率分离、τ0\tau_0-VLA 的按需搜索,本质上都在把 memory 相关计算从每步同步阻塞路径里移出去。

逐篇方法对照:每篇论文到底解决了哪个瓶颈#

如果只按四类 memory 记忆,容易忽略各篇方法真正解决的问题。把它们放在同一张表里,会更清楚地看到技术路线的演进。

方法主要记忆对象关键机制解决的瓶颈仍然存在的问题
DREAM-ZERO最近视频帧、动作上下文、DiT KV cacheWorld Action Model、异步闭环、DiT caching、DreamZero-Flash把短期历史和世界动态合并,提升零样本策略能力视频扩散模型重,实时性依赖大量系统优化
KEMO任务过程中的关键帧关节速度事件触发、DINOv2 去重、cross-attention 融合避免 sliding window 丢失长程关键事件keyframe 选择错误会导致检索遗漏
LaMem-VLA短期 visual latent、长期 action latentSE-bottleneck、query-key retrieval、memory weaving、相邻记忆合并把历史经验变成 VLA 可直接消费的 latent tokenmemory 表示和压缩策略会影响可解释性与泛化
RoboTTT测试时更新的 fast weightTTT 层、tanh gating、Sequence Action Forcing、TBPTT把上下文扩展到数千时间步且不显式读取全部历史fast weight 难解释,训练和部署状态管理复杂
MEM短程视频记忆、长程文本记忆高低层策略、时空 attention 解耦、token pruning、KV cache同时处理低层细节和长程任务进度系统链路长,高层错误会传导到低层
RMBench / Mem-0子任务 keyframe、首帧、最近帧记忆依赖任务集、上层规划、下层执行、子任务结束判断把“模型是否真的需要记忆”变成可测问题benchmark 覆盖范围仍需扩展到更多真实任务
τ0\tau_0-VLA文本化执行记忆、未来子任务候选高层 world-model rollout、beam search、value model 打分在关键高层决策上增加测试时计算搜索增加延迟,world model 错误会影响规划

从这张表可以看到,Memory+VLA 的技术路线并不是从简单到复杂单线演进,而是在四个瓶颈上并行推进。第一个瓶颈是“当前观测不完整”,用短期窗口和视频记忆解决。第二个瓶颈是“历史太长不能全读”,用关键帧、latent memory 和检索解决。第三个瓶颈是“显式历史太贵”,用 fast weight 和 latent state 把历史压进状态。第四个瓶颈是“长程任务需要规划”,用高低层分离、文本记忆、world model 和搜索解决。

评测与部署:Memory+VLA 不能只看成功率#

评价一个 Memory+VLA 系统,至少要分三层。

第一层是任务效果。最基础的是 success rate,但长程任务里仅有 success rate 不够。还要看 subtask completion,因为很多方法可能前几个阶段成功,最后失败;也要看错误恢复率,因为 memory 的价值经常体现在失败后能否回到正确阶段;还要看跨场景泛化,因为 keyframe 和 retrieval 策略可能对特定环境过拟合。

第二层是记忆质量。对于 retrieval memory,要看检索召回率:关键历史是否被取出;还要看检索污染率:无关历史是否被误取。对于 latent / fast weight memory,要看长期保持能力和遗忘曲线。对于 hierarchical memory,要看上层阶段判断是否准确,子任务切换是否提前或滞后。RMBench 的 M(1)M(1) / M(N)M(N) 分类其实就是在逼迫模型暴露这些能力差异。

第三层是系统成本。Memory 编码延迟、检索延迟、每 step 控制延迟、GPU peak memory、CPU/GPU 数据传输、后台线程占用、训练峰值显存都应该单独统计。一个方法如果让成功率提高 5%,但把每步延迟从 100ms 提到 800ms,在真实机器人上可能并不可用。反过来,一个简单的 sliding window 如果在目标任务上已经足够稳定,就没有必要引入复杂的 world-model search。

部署时可以按热、温、冷三层管理 memory。热记忆放在 GPU 上,包含最近窗口、当前子任务 keyframe、低层 policy 必须立即读取的 KV cache。温记忆放在 CPU 内存里,包含 episode 内较旧的 keyframe、压缩 visual embedding、action embedding 和文本摘要。冷记忆放在磁盘或数据库里,包含跨 episode 的示范、失败案例和长期经验。控制循环只读取热记忆,后台进程负责从温/冷记忆中异步召回并预热到 GPU。

从研究到实现:一个可落地的 Memory+VLA 引擎长什么样#

如果要把这些方法做成统一推理引擎,核心不是复现某一篇论文,而是把 memory 做成可插拔组件。主框架可以参考 StarVLA 这类 VLA 训练/推理框架,评测可以接入 vla-evaluation-harness,端侧推理和机器人执行可以结合 Jetson-PI、FlashRT 或 LeRobot 生态。

接口上,用户不应该直接改模型代码,而是声明四件事:保存什么、什么时候保存、怎么检索、怎么注入。比如短任务可以配置 sliding_window(image, action, count=4);多阶段任务可以配置 episodic_keyframe(trigger=joint_velocity_drop, encoder=dinov2, topk=8);长程任务可以配置 semantic_summary(update_on=subtask_end);需要测试时适应的任务再打开 fast_weight(update=ttt)。这些策略在同一个 episode 中可以共存,由 scheduler 决定哪些每步运行、哪些低频运行、哪些异步运行。

训练上,统一引擎要支持三类数据。第一类是普通机器人轨迹,用来训练基础 VLA。第二类是带阶段标注或可自动切分的长程轨迹,用来训练 keyframe、subtask detector 和 high-level policy。第三类是专门的 memory benchmark,如 RMBench、RoboTwin 2.0、LIBERO 长程变体和 CALVIN,用来检查模型是否真的使用历史。没有第三类评测,系统可能只是把 memory 做成装饰。

最终贡献不应该只是“加一个 memory 模块”,而应该是:同一个 VLA backbone 下,系统性比较 sliding window、episodic retrieval、latent memory、hierarchical memory 在不同任务长度、不同遮挡程度、不同部署预算下的效果和成本;给出动态 memory 策略,例如短任务自动退化为窗口记忆,长任务自动打开高层语义记忆,置信度不足时才触发搜索或额外检索。

如何选择记忆机制:任务长度、可观测性和部署预算#

把这些工作放在一起,可以得到一个实用选择表。

场景更适合的记忆模式原因
短程遮挡、局部状态变化Sliding window、短期 visual memory当前动作主要缺最近几帧信息,窗口足够解决
多阶段操作、关键事件稀疏Episodic keyframe retrieval需要保存阶段转折点,不能让关键帧滑出窗口
人类视频示范、长上下文技能适应Fast weight / TTT、world-action model需要把测试时示范压进策略状态或世界动态
十分钟级长程任务Hierarchical persistent memory需要上层记录进度、下层执行局部控制
Benchmark 和模型诊断RMBench / 显式 memory ablation需要确认模型是否真的依赖历史,而不是当前图像足够
端侧或实时部署窗口记忆、压缩 latent memory、低频高层策略检索和编码延迟必须受控

这里有一个容易被忽视的点:Memory+VLA 的收益和成本不在同一层出现。收益通常体现在任务成功率、阶段完成率和错误恢复能力上;成本却体现在 token 数、检索耗时、视频编码耗时、GPU memory、CPU/GPU 数据搬运、训练稳定性上。一个方法在论文 benchmark 上表现好,不代表它能直接部署到真实机器人;一个方法在真实机器人上能跑,不代表它能扩展到更多任务和更多机器人形态。

因此,设计 Memory+VLA 时不应该先问“哪篇论文最强”,而应该先问五个问题。

第一,任务需要多长时间的历史?如果只需要 2 秒内的信息,sliding window 足够。第二,关键历史是否稀疏?如果关键节点很少,retrieval memory 更合适。第三,历史信息是否能用文字表达?如果可以,长程 text memory 比保留所有视频便宜。第四,模型是否允许测试时更新状态?如果允许,fast weight 或 recurrent memory 可能扩展更长上下文。第五,部署预算有多紧?如果控制频率必须很高,上层 memory 应低频运行,下层 policy 需要轻量化。

对系统和硬件的影响:Memory+VLA 会把瓶颈从模型推到运行时#

Memory+VLA 的系统问题比普通 VLA 更复杂。

首先是视觉 token 爆炸。多帧、多视角、长视频都会增加 token 数。MEM 通过时空 attention 解耦和 KV cache 复用降低成本,LaMem-VLA 通过 bottleneck 和 latent token 压缩历史,KEMO 通过关键帧选择减少输入帧数。它们都在回答同一个问题:历史不能原样全塞,必须先压缩、筛选或缓存。

其次是检索延迟。LLM 的 RAG 检索可以花几十毫秒甚至更久,机器人控制不一定等得起。每一步都做 DINOv2 embedding、query-key 搜索、transformer condenser,可能会把高频控制拖慢。实际部署时,需要把记忆更新和检索拆到异步线程,或让高层 memory 低频运行。

第三是 CPU/GPU 数据搬运。如果 memory bank 放在 CPU,检索后再拷贝到 GPU,会引入额外延迟。如果全部放在 GPU,显存占用又会上升。未来 Memory+VLA 引擎可能需要像 LLM 推理框架管理 KV cache 一样,管理多级 memory:GPU 热记忆、CPU warm memory、磁盘冷记忆。

第四是训练稳定性。KEMO 给 memory 融合分支加 0 初始化权重,RoboTTT 用 tanh gating 和 TBPTT,LaMem-VLA 用 condenser 和 weaver 控制 latent token 形态。这些设计都说明,memory 不是简单拼接历史。历史信息一旦以错误方式进入模型,会让训练 loss、动作分布和闭环稳定性变差。

第五是评估闭环。离线 action prediction loss 不能完全说明 memory 是否有用。真正重要的是闭环 success rate、subtask completion、错误恢复、扰动鲁棒性和长程任务完成时间。RMBench 这类 benchmark 的意义也在这里。

结论:Memory+VLA 的本质是把机器人从“反应式策略”推向“带状态的执行系统”#

VLA 最初的吸引力在于端到端:看图、读指令、出动作。但真实机器人任务要求模型带着历史行动。Memory+VLA 的发展说明,端到端并不等于无状态。恰恰相反,越是长程、复杂、真实的机器人任务,越需要把状态管理纳入模型和系统设计。

Sliding-Window Memory 提供最简单的短期上下文,适合近期遮挡和局部状态。Episodic Retrieval Memory 选择关键帧和关键事件,让模型不必读取完整历史。Latent State / Fast Weight Memory 把历史压进可更新状态,把上下文长度扩展到数千步。Hierarchical Persistent Memory 把任务进度和低层控制分离,让上层策略维护语义记忆、下层策略执行动作。

这四类方法不是互斥路线。未来更可能出现的是混合系统:下层保留短期视觉窗口,中层维护关键帧 memory bank,上层保存文本化任务进度,模型内部还有 fast weight 或 recurrent state。工程上再用统一配置描述 memory 的存储、检索、插入和更新策略。

机器人要在真实世界里完成任务,就必须知道自己刚刚做过什么、为什么做到这里、下一步可能带来什么后果。Memory+VLA 的意义正在于此:它把 VLA 从单步反应式策略,推向一个带时间、带状态、带执行进度的具身智能系统。

参考资料#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

带有记忆的 VLA 完全拆解:从滑动窗口到层次化持久记忆,机器人为什么必须学会记住
https://pinghaoyang.com.cn/aigc/posts/memory-vla/
作者
平昊阳
发布于
2026-09-20
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
平昊阳
乘长风,破巨浪, 展鸿图于未央!
--
总访问量
--
访客数
公告
欢迎来到我的个人博客!欢迎关注交流吖!
更多相关公告,见
社交-留言」。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
站点统计
文章
165
分类
25
标签
232
总字数
1,824,520
运行时长
0
最后活动
0 天前

文章目录