HELM:弥补 VLA 的记忆缺口、验证缺口与恢复缺口,形成 Agentic 系统

原创  VLyb  小胡学 LLM
  2026年4月27日 15:37

关键词:#具身智能 #VLA

  • 论文题目:HELM: Harness-Enhanced Long-horizon Memory for Vision-Language-Action Manipulation

  • arXiv:2604.18791

  • 单位:清华

TL;DR:

HELM 的核心 insight 是:VLA 模型在长程操作任务中的系统性失败,本质上不是"看得不够远"(上下文不够长),而是“执行闭环”本身存在结构性缺陷——它既没有跨阶段的持久记忆,也没有行动前的自我校验,更没有失败后的状态恢复;作者用三个即插即用的轻量模块(记忆索引、预执行验证器、回滚控制器)把 VLA 从"反应式开环"改造成"带 harness 的闭环",在 LIBERO-LONG 上把成功率从 58.4% 拉到 81.5%,而单纯把上下文扩到 4 倍只能提到 63.8%。

Abstract 翻译:

尽管在短程任务上表现出色,VLA 模型在长程操作任务中仍存在系统性缺陷。我们发现,在当前反应式执行模式下,仅扩展上下文长度无法解决这一问题;其根源在于三个反复出现的执行循环缺陷:记忆缺口、验证缺口与恢复缺口。本文提出 HELM——一个模型无关的通用框架,通过三个核心组件应对这些缺陷:基于 CLIP 索引关键帧提取任务关键历史的片段记忆模块,能够从观察、动作、子目标及记忆条件化上下文中预判动作失败的习得状态验证器,以及执行回滚与重规划的增强控制器。状态验证器是本研究的核心学习贡献:其性能持续优于基于规则的可行性检查与集成不确定性基线,且其有效性高度依赖于对片段记忆的访问能力。 在 LIBERO-LONG 基准测试中,HELM 将任务成功率较 OpenVLA 提升了 23.1 个百分点(从 58.4%提升至 81.5%),而将上下文窗口扩展至 H=32 仅带来 5.4 个百分点的增益,同等计算预算的 LoRA 适配方法仍比 HELM 低 12.2 个百分点。HELM 在 CALVIN 基准上也显著提升了长时程任务性能,并在受控扰动条件下大幅增强了故障恢复成功率。 消融实验与机制分析明确了各模块的独立贡献,同时我们发布了 LIBERO-Recovery 作为扰动注入协议,用于评估长时程操作中的故障恢复能力。

一、研究背景与动机

当前 VLA 在短程操作(比如 LIBERO-SPATIAL,平均 2.3 个子目标)上表现已经很好了,OpenVLA 能到 91.2%。但一到长程任务(LIBERO-LONG,平均 5.8 个子目标),同样的模型直接跌到 58.4%,掉了 32.8 个百分点。

这时候的第一直觉可能是:是不是上下文窗口太短了?模型"忘"了前面发生的事?作者也做了这个实验——把 OpenVLA 的历史窗口从默认的 H=8 扩到 H=32(4 倍),结果成功率只从 58.4% 涨到 63.8%,提升了区区 5.4 个百分点,还有 17.7 个点的差距没补上。

这个实验非常关键。 它说明长程失败不是简单的"记不住",而是有更深层的结构性原因。作者通过人工标注 200 个失败 episode,把失败模式归成了三类:

  1. Memory Gap(记忆缺口,FM,41%):固定上下文窗口把已完成子目标的证据给挤掉了。比如第 12 步已经把杯子放进柜子里了,到第 47 步模型"看不见"这段历史,又试图放一次杯子,直接把任务状态搞乱。

  2. Verification Gap(验证缺口,FV,33%):模型提出动作是"反应式"的,执行前没有任何可行性检查。不可行的抓取、错误物体的接触、超出工作空间的运动,就这么静默执行了,误差开始传播。

  3. Recovery Gap(恢复缺口,FR,26%):一旦某个动作失败了,模型不会在 corrupted state 上停下来修复,而是继续执行后续子目标,导致级联失败。

而且这仨模式还经常叠加出现(18% 的失败 episode 同时 exhibit 两种及以上)。

所以动机非常明确: 不要再去卷 backbone 和上下文长度了,要治的是执行闭环本身的设计缺陷。作者想回答的问题是:能不能在不改动 VLA backbone 的前提下,给它外挂一套轻量的"harness",把这三个缺口补上?

二、核心洞见与创新

2.1 Insights

  • Insight 1(结构性缺口):VLA 的长程失败不是 context length 或 backbone scale 的问题,而是 reactive execution loop 中持久记忆、预执行验证、失败恢复三个结构性环节的缺失。单纯给模型"更多上下文"不如给模型"更好的执行架构"。

  • Insight 2(记忆条件的验证):预执行失败预测必须联合当前视觉状态、提议动作、子目标上下文以及任务历史进行推理。一个动作是否失败往往取决于"之前已完成什么"(如重复放置已放置的物体),因此验证器必须以情景记忆为条件。这是"记忆条件的预执行失败预测"这一新问题的核心。

  • Insight 3(解耦与协同):VLA 主干应保持冻结(保留通用能力),执行增强模块应轻量、独立训练,形成"冻结主干 + 可训练外挂"的架构,实现模型无关性

2.2 Novelty(创新体现)

  • 架构层面:首次提出 model-agnostic 的三模块执行循环(EMM + SV + HC),以"wrap"而非"修改"的方式增强任意冻结 VLA。

  • 方法层面:首个记忆条件的、可学习的预执行失败预测器(SV),区别于规则可行性检查和集成不确定性基线;且实验证明其有效性关键依赖于记忆上下文(移除记忆后 AUROC 从 0.847 降至 0.791)。

  • 策略层面:提出 LIBERO-Recovery 扰动注入评估协议,首次为失败恢复能力提供标准化评测。

  • 关键发现:通过 9 组基线(包括同预算 LoRA、Oracle Memory、集成模型等)严格证明:相同数据预算下,训练 SV 比微调主干更有效;相同推理成本下,单个 SV 比 5× 成本的集成模型更优。

三、HELM 做了什么

HELM 是一个 model-agnostic 的框架,它把任何一个 frozen 的 VLA(比如 OpenVLA-7B)包起来,在执行循环里加了三个模块。整个流程你可以想象成:VLA 还是那个 VLA,但它现在不是"看到就动"了,而是要先"翻翻笔记"(EMM),再"想想对不对"(SV),错了就"倒车重来"(HC)。

图片

3.1 整体执行循环(对照上图来理解)

环境给出观察 ot
    ↓
EMM 检索记忆上下文 mt
    ↓
VLA 根据 (ot, 指令τ, 当前子目标gt, 记忆mt) 提出动作 a_prop
    ↓
SV 计算失败概率 p_fail = SV(ôt, a_prop, gt)  (ôt 是记忆增强后的观察)
    ↓
HC 判断:
    若 p_fail ≤ θv (0.65):执行动作
    若 p_fail > θv:触发 recovery(回滚到最近 checkpoint,重推子目标,重新规划)
    ↓
执行动作,环境返回 o_{t+1}
    ↓
EMM 写入新的关键帧
    ↓
HC 检查当前子目标是否完成,若完成则弹出子目标栈

图片

下面逐个拆解三个模块。

3.2 EMM(Episodic Memory Module,解决 FM)

功能:给 VLA 提供一个跨阶段的持久记忆,而不是靠固定长度的上下文窗口。

怎么做的

  • 存储结构:一个 key-value store。key 是 CLIP ViT-B/32 对关键帧图像的 embedding(512 维,L2 归一化);value 存的是 (关键帧图像, 当前活跃子目标, 完成状态, 时间步, 紧凑状态差量)。状态差量包括夹爪位姿 + 物体位置(从深度图来),用来后续回滚。

  • 写入策略(Write Policy):不是每帧都存,而是三种触发条件:

    1. 子目标完成时(success)

    2. 检测到失败时(failure)

    3. 每 Δc=20 步存一个 checkpoint

这样 memory 里存的都是"边界帧"和"检查点",不会爆炸。

  • 检索策略:用当前观察  的 CLIP embedding 去和 memory 里所有 key 算余弦相似度,取 top-k(k=3)。检索出来的 value 会被序列化成结构化文本,直接追加到 VLA 的语言输入里。也就是说,VLA 看到的 prompt 里除了当前图和指令,还有"历史回顾"的文字描述。

  • 压缩:如果 memory 超过 =50,只保留每个子目标最近的一个 checkpoint,防止内存无限增长。

为什么不用微调一个 retriever? 作者做了消融(Table 4),发现 CLIP 零成本的检索已经能达到 81.5% TSR,而专门 fine-tune 的 learned retriever 只到 82.1%,差距 0.6pp,不值得额外训练成本。所以 CLIP 检索是个性价比极高的选择。

3.3 SV(State Verifier,解决 FV)

这是整篇论文最硬核的部分,也是作者自称的"core learning contribution"。

问题定义:预执行失败预测。注意,这不是"事后反思"(像 Reflexion 那样失败了再想想为什么),而是在动作执行之前,判断"这个动作如果执行了,会不会导致失败"。

为什么难? 因为它要联合推理:

  • 当前视觉状态 ot

  • 提出的动作 a_t

  • 当前子目标 gt

  • 任务历史 Mt(关键!因为同一个动作在不同历史上下文下意义完全不同。比如"把杯子放柜子里"在杯子还没放时是正确动作,在已经放过时就是错误动作)

模型设计

  • 一个轻量 3 层 MLP:1024 → 512 → 256 → 1,ReLU + dropout 0.1。

  • 输入拼接三部分:

    1. 记忆增强观察:指通过 CLIP 检索到的 Memory。作者强调:这个记忆增强输入是 SV 有效的关键。消融显示,去掉 k_top-1 后 AUROC 从 0.847 跌到 0.791。

    2. 投影后的动作:W_a · a_t ∈ R^256

    3. 子目标文本 embedding

  • 输出:,即失败概率。

训练细节

  • 数据:从 VLA 在训练任务上的 rollout 里采 50K 个 (ot, at, gt, Mt) 四元组。

  • 标签:yt=1 如果在未来 5 步内发生失败(作者试了 1/5/10 步 horizon,5 步最优,AUROC 0.847)。

  • 损失:BCE,正样本权重 4.0(因为失败是少数类)。

  • 优化器:Adam,lr 1e-4,batch 256,一块 A100 训约 2 小时。

阈值:pfail > θv=0.65 就触发 HC recovery。

3.4 HC(Harness Controller,解决 FR)

HC 是 orchestrator,负责把 EMM 和 SV 串起来,并在失败时做恢复。

维护的数据结构

  • 子目标栈 S:任务开始时,通过 prompt VLA 把自然语言指令分解成有序子目标列表。每完成一个就 pop。

  • 完成检测器:和 SV 同架构的小网络,判断当前子目标是否已完成。

恢复逻辑(Rollback): 当 SV 报 ,或者完成检测器判定当前子目标没完成但应该已完成时:

  1. 从 EMM 里检索最近的一个 checkpoint 或 success entry

  2. 生成目标条件化的恢复序列,prompt 写成:"return to the state shown"(回到所示状态)

  3. 把失败的子目标重新 push 回栈顶

  4. 把这次失败记录也写入 EMM 上下文,防止重复犯错

  5. 最多尝试 Rmax=3 次恢复,再失败就判任务失败

Forward Recovery 变体(HELM-Fwd): 有些真实机器人场景下"回滚"物理上不可行(比如液体已经洒了)。这时候 HC 不做 rollback,而是基于当前 corrupted state 生成向前的恢复计划。实验显示 HELM-Fwd 也能到 76.3% TSR,虽然比 rollback 版低 5.2pp,但为真实部署留了后路。

四、实验设计

Benchmark

  1. LIBERO-LONG:10 个任务,5-6 个子目标,500 eval episodes。

  2. CALVIN ABC→D:测平均完成链数(max 5)。

  3. LIBERO-Recovery(作者新提的协议):在 LIBERO-LONG 基础上,在随机子目标边界注入扰动(物体位移 ±5cm 或夹爪状态翻转),测 Recovery Success Rate (RSR)。

基线(9 个,非常全面)

  • OpenVLA(H=8,默认)

  • OpenVLA H=32(测上下文长度)

  • OpenVLA + Oracle Memory(给模型喂 ground-truth 子目标完成状态,测 EMM 上限)

  • OpenVLA + Rule Verifier(手工可行性检查)

  • OpenVLA + Ensemble ×5(5 模型不确定性)

  • OpenVLA + LoRA (50K)(同样 50K 数据预算,看是训 SV 好还是微调 backbone 好)

  • OpenVLA + Reflexion(事后语言反思)

  • HELM-Fwd(前向恢复变体)

  • HELM (Octo)(换 backbone 测通用性)

主结果

关键对比

TSR

OpenVLA

58.4%

OpenVLA H=32

63.8% (+5.4pp)

OpenVLA + Oracle Mem

72.4% (+14.0pp)

OpenVLA + LoRA (50K)

69.3% (+10.9pp)

OpenVLA + Rule Verifier

65.2% (+6.8pp)

OpenVLA + Ensemble ×5

67.9% (+9.5pp, 5× 成本)

HELM (OpenVLA) 81.5% (+23.1pp)

HELM (Octo)

72.8% (Octo 基线 51.2%,相对提升类似)

五、总结

  1. 重新定义了问题。以前大家看到长程失败,直觉是"上下文不够长"或"模型不够大"。这篇论文用扎实的对照实验(H=8→32 只提 5.4pp)证明:失败是结构性的,不是容量性的。这会把社区的关注点从"造更大的 VLA"部分转移到"设计更好的执行闭环"上。

  2. 提出了"预执行验证"这个新问题。SV 不是事后反思,也不是不确定性过滤,而是要在执行前联合推理视觉-动作-历史。这是一个新的问题设定,后续可以往更复杂的验证器架构(Transformer-based、显式物理推理)去发展。

  3. LIBERO-Recovery 协议。这是一个可复用的扰动注入评测标准,以后做 failure recovery 的工作可以直接用这个 protocol 来对比,有标准化价值。

具身智能与空间智能 · 目录
上一篇JoyAI-RA 0.1:多源多层次预训练构建可泛化的 VLA 模型下一篇A2A Flow Matching:历史轨迹到未来轨迹的流匹配|RSS 26
阅读 34
HELM框架

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐