VLM/VLA:闭环恢复与失败分析

VLM/VLA:闭环恢复与失败分析

Charles Lv8

这篇回答的问题。 如何理解“VLA 闭环恢复与失败分析”背后的核心机制、适用边界和下一步阅读路径。

一个常见失败是:杯子第一次没被夹爪抓住,机器人却继续执行“移动到托盘上方”。从外面看,它不是不会移动,而是没有意识到前一步已经失败。VLA 的闭环恢复能力,核心不是“动作更准一点”,而是能检测偏差、判断偏差属于哪一类、选择合适恢复动作,并把这段失败变成下一轮数据资产。

真实机器人一定会犯错。物体会滑、遮挡会变化、抽屉会卡住、触摸屏会延迟、相机外参会漂、语言指令也会有歧义。一个可部署系统不能假设自己永远走在演示分布里,它必须有办法把任务从小错误里拉回来。

闭环恢复是一条状态机

闭环恢复可以写成六步:

  1. 观察当前状态。
  2. 检测任务是否仍在正确轨道上。
  3. 归因失败类型。
  4. 选择恢复动作或升级处理。
  5. 执行并验证恢复是否成功。
  6. 把失败和恢复片段写入数据引擎。

这比“重新规划一下”更具体。重新规划只解决第四步的一部分;如果系统没有检测、归因、验证和日志,恢复会变成盲目重试。

策略要消费最新观测

如果把 VLA 想成一次性吐出完整动作序列,它很快会变脆弱。更合理的形式是:

atπθ(atot,l,ht)a_t \sim \pi_\theta(a_t\mid o_{\le t},l,h_t)

oto_{\le t} 是历史观测,ll 是语言任务,hth_t 是任务阶段、最近动作、失败记忆和安全状态等历史摘要。恢复系统还需要一个错误估计:

et=gϕ(ot,atk:t,ht)e_t = g_\phi(o_{\le t}, a_{t-k:t}, h_t)

ete_t 可以是失败类别、风险分数或“不确定,需要确认”的状态。恢复策略可以写成:

atrecoverπrec(atot,l,ht,et)a_t^{\mathrm{recover}}\sim \pi_{\mathrm{rec}}(a_t\mid o_{\le t},l,h_t,e_t)

这个式子的重点不是一定要训练一个单独网络,而是提醒系统设计:主策略、失败检测和恢复策略不是同一个问题。主策略负责把任务往前推进,失败检测负责发现轨道偏离,恢复策略负责用受约束的动作把系统带回可继续执行的状态。

失败要先分桶

失败分析最怕一句“模型不行”。VLA 失败通常至少要按七类记录:

失败桶 典型表现 优先检查
感知失败 看错目标、忽略遮挡、物体状态判断错 相机、深度、视觉 token、标注覆盖
语言/语义失败 指令理解错、指代错、阶段顺序错 任务解析、上下文、子任务状态
动作接口失败 坐标系错、gripper 语义反、限幅后动作变形 action schema、controller log
接触/控制失败 抓取滑落、推不动、插不进、碰撞 力控、chunk、轨迹分布、硬件
记忆失败 忘了已尝试动作、重复同一路径 history state、事件日志、阶段机
安全失败 near-miss、误触、人靠近、危险恢复 safety filter、急停、人工接管
系统失败 延迟、工具接口、时间戳、版本不一致 runtime、传感器同步、部署配置

这个分桶决定数据回流方向。感知失败补更多恢复动作不一定有用;动作接口失败换更大模型也不一定有用。先把失败桶做准,后面的训练和工程改动才不会乱。

检测信号不要只靠视觉

若系统根本不知道自己失败了,就没有恢复。检测信号可以来自多处:

信号 例子
视觉 目标是否仍可见,物体是否被抓起,抽屉是否打开
本体状态 关节是否到位,末端是否卡住,gripper 是否闭合异常
接触/力觉 是否滑脱,是否碰撞,是否推不动
控制器 命令是否被限幅、拒绝或超时
任务状态 当前阶段是否完成,是否违反任务顺序
人机信号 人是否接管,用户是否纠正,安全区是否被侵入

一个实用做法是把检测拆成 success checker、risk checker 和 progress checker。success checker 判断当前子任务是否完成;risk checker 判断是否接近危险;progress checker 判断系统是否卡住或重复犯错。三者分开,比一个泛化的“成功/失败分类器”更容易调试。

恢复动作有层级

恢复不等于重置。不同错误应使用不同代价的动作。

层级 适用情况 例子
微调修正 偏差小、风险低、状态仍清楚 抓手左偏 2cm,重新对准
子任务重试 当前技能失败但环境未破坏 重新抓把手、重新点击按钮
状态重建 物体移动、遮挡变化、阶段不确定 换视角、重新检测目标、更新记忆
子计划重写 原任务路径不再合适 先移开障碍,再继续抓取
请求帮助 不确定或风险高 人工确认目标、人工接管一次
安全退出 继续尝试可能伤人或损坏 急停、退回安全位、上报

恢复层级越高,代价越大,但风险也更可控。部署策略应该有 recovery budget:一个子任务最多重试几次、每次重试是否必须换动作、何时升级到人工确认、何时直接安全退出。没有 budget 的恢复很容易变成死循环。

失败案例比成功 demo 更有信息

RT-2 的真实机器人失败例子很适合提醒读者:web-scale 视觉语言知识可以迁移到动作,但并不会自动解决物体动力学和接触变化。

RT-2 failure dynamics

图源:RT-2,Figure 9。原图展示模型在 unseen object dynamics 上的真实机器人失败案例。本站读法:语义泛化和动作执行是两层证据;失败图要进入 failure bucket 和恢复数据,而不是只作为 demo 之外的附录。

成功演示告诉模型“顺利时怎么做”,失败轨迹告诉系统“现实怎样偏离演示”。抓空后的二次对准、滑脱后的重新夹紧、触摸屏未响应后的等待和重按、抽屉半开后的再拉一点,都是比普通成功轨迹更稀缺的训练资产。

记忆防止重复犯错

闭环恢复需要记忆,不只是更长上下文。至少要记录:

记忆项 为什么
最近执行过的动作 避免同一路径反复撞同一个障碍
当前任务阶段 知道是接近、接触、操作、放置还是收尾
失败尝试 知道哪种抓法、路径或按钮点击已经失败
环境变化 知道物体被碰倒、抽屉已半开、障碍物出现
安全状态 知道是否触发过 near-miss 或人工接管

例如“把杯子放进盒子”第一次失败是因为盒口被另一个物体挡住。一个无记忆策略可能下一步继续硬塞;有记忆的恢复策略应该先清理或换路径,再尝试放置。

恢复要接数据引擎

每次恢复都应该留下 episode 级证据:

F={(ot,l,at,et,atrec,yrec,m)}\mathcal F=\{(o_{\le t},l,a_{\le t},e_t,a_t^{\mathrm{rec}},y^{\mathrm{rec}},m)\}

ete_t 是失败估计,atreca_t^{\mathrm{rec}} 是恢复动作,yrecy^{\mathrm{rec}} 是恢复是否成功,mm 是机器人、场景、策略版本和安全事件等 metadata。这些片段可以分流到训练回流、hard set、replay set 或安全集。

恢复失败也有价值。它能告诉团队:当前失败是否不可恢复、是否需要人工接管、是否要修改安全策略,或者是否缺少感知证据。把恢复失败删掉,会让系统误以为所有错误都可以靠多试几次解决。

评测要看恢复质量

闭环恢复不能只看最终成功率。至少要报告:

指标 含义
首次成功率 不触发恢复时任务能否完成
最终成功率 恢复链路加入后能否完成
恢复成功率 进入失败桶后能否回到正确轨道
平均重试次数 恢复是否高效,是否过度重试
恢复耗时 恢复成本是否可接受
危险恢复率 恢复动作是否带来碰撞、误触或 near-miss
人工接管率 系统是否经常需要人救场
错误归因混淆 感知失败是否被当成控制失败,反之亦然

首次成功率一般但最终成功率高,说明恢复链路在发挥作用;首次成功率高但恢复成功率低,说明系统在规整状态强,一旦偏离就脆;最终成功率高但危险恢复率也高,说明系统可能靠冒险动作完成任务,不适合部署。

两个具体场景

开抽屉取物时,第一次抓把手失败后,系统应重新观察把手位置,判断是视觉定位偏差还是 gripper 接触失败;若抽屉只开了一半,要更新阶段状态,追加“再拉一点”而不是直接抓取内部物体;若拉动阻力异常,应退出或请求帮助。

触摸屏操作时,第一次点击未生效,系统要判断是没点中、页面加载慢、权限弹窗遮挡,还是页面已经跳转但识别错了。对应恢复动作分别是重新对准、等待、处理弹窗、重新识别页面。若只会重复“点下一步”,系统会很快进入死循环。

这两个场景表面不同,一个是接触操作,一个是 UI 操作;共同点是恢复动作必须依赖任务阶段、失败归因和最新观测。

上线前的恢复门禁

上线前可以设置一组硬门禁:

门禁 例子
失败检测 每个高风险任务至少有 success / risk / progress checker
恢复预算 每个子任务有最大重试次数和升级规则
安全集 near-miss、误触、碰撞边缘样本必须单独评测
人工接管 接管入口清晰,接管后 episode 被完整记录
回归测试 旧 failure bucket 在新模型上不能退化
日志完整性 观测、动作、controller、事件、策略版本都能追溯

这些门禁听起来保守,但真实机器人里“承认不会”通常比盲目继续更高级。恢复能力不是无限自治,而是在能力边界内尽量修正,边界外及时降级。

VLA 闭环恢复可以按这条链路收口:先用检测器发现偏离,再用失败桶做归因,然后按代价选择微调、重试、重建、重规划、请求帮助或安全退出,最后把失败与恢复片段回流到数据引擎。没有这条链,VLA 只能证明自己在演示分布附近会动;有了这条链,系统才开始具备真实部署所需的韧性。

继续读相邻内容时,可以接 VLA 评测与数据引擎VLA 数据与策略学习VLA 动作分块、层级策略与潜在技能Sim2Real 与具身数据引擎世界模型评测与失效模式

外部精读

  • 本页来源台账:记录闭环恢复、失败分桶、图片使用和中文讲法边界。
  • DAgger:理解顺序决策中学习器自己造成的状态分布为什么需要被训练集覆盖。
  • RT-2:看 web-scale VLM 知识迁移到动作后的真实机器人能力和失败边界。
  • SayCan:理解语言技能选择为什么要被 affordance / value function 约束。
  • π0.5:看 open-world VLA 如何报告真实家庭任务、数据消融和 high-level subtask。
  • VLA 评测与数据引擎来源台账:对接 hard set、failure replay 和数据回流。
  • Datawhale Every-Embodied:学习具身智能中文教程如何组织数据、仿真、复现与部署路线;事实 claim 仍回到论文和项目页。
  • Title: VLM/VLA:闭环恢复与失败分析
  • Author: Charles
  • Created at : 2026-02-15 09:00:00
  • Updated at : 2026-02-15 09:00:00
  • Link: https://charles2530.github.io/2026/02/15/ai-files-vla-closed-loop-recovery-and-failure-analysis/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments