引言
想象一下你在学一项新运动——比如网球。你挥动球拍,以为能打出一记完美的对角线球,但球却狠狠地飞出了界外。你会怎么做?你不会置之不理。你会分析“你以为会发生的”和“实际发生的”之间的差异。你会调整挥拍的认知模型,然后再次尝试。这种从失败中学习的过程是人类智能的基础。
然而,对于机器人来说,这极其困难。大多数在现实世界中运行的机器人依赖于在仿真环境中训练的模型。虽然仿真器很强大,但它们很少能完美复制混乱、非结构化的现实世界。当机器人遇到训练数据中从未见过的情况——比如桌子上特定的杯子摆放方式,或者比预期稍显拥挤的架子——它通常会失败。通常情况下,机器人没有更新其理解的机制;它只会一遍又一遍地失败。
在犹他大学和 NVIDIA Research 最近发表的一篇题为 “Fail2Progress” 的论文中,研究人员提出了一种新的框架,让机器人能够像人类一样: 推理其失败原因,并利用这些失败变得更聪明。

如图 1 所示,其核心理念非常优雅: 当机器人在现实世界中失败时,它不应直接停止。相反,它应该利用这次失败生成一个针对性的仿真环境,在这个虚拟世界中练习以更新其内部模型,然后回到现实世界中取得成功。本篇博客文章将探讨 Fail2Progress 如何利用一种称为 Stein 变分推断 (Stein Variational Inference) 的复杂技术来实现这一目标。
背景: 技能效果模型的问题
要理解这篇论文的贡献,我们首先需要了解这些机器人是如何进行规划的。作者是基于 技能效果模型 (Skill Effect Models) 进行构建的。
技能效果模型预测当机器人执行某个动作时世界会如何变化。例如,如果机器人对一个箱子执行 push (推) 技能,模型会预测箱子的新位置。这些模型正越来越多地转向 符号预测 (symbolic predictions) 。 模型不再预测箱子的精确毫米级坐标 (这很难且脆弱) ,而是预测符号状态,例如关系: in-contact(box, shelf) (箱子接触架子) 或 inside(apple, bowl) (苹果在碗里) 。
机器人规划一系列技能 (规划骨架) 以实现目标。如果机器人执行了一项技能,且产生的符号状态与预测相符,那就成功了!但现实世界往往会出人意料。
失败的类型
研究人员将失败归为两类:
- 仿真到现实 (Sim2Real) 的差距: 机器人的内部物理模型是错误的。它试图推箱子,但摩擦力不同,所以箱子没有移动预期的距离。
- 错误的符号预测: 这是一种更微妙、更危险的失败。机器人成功执行了它规划的动作,但结果并非它所预测的那样,因为情况属于“分布外” (OOD) 。例如,它试图把书放在架子上,但没有考虑到旁边有一个物体挡路,因为它在训练中从未见过这种特定的几何结构。
Fail2Progress 专门针对第二种类型: 错误的符号预测 。 目标是将单个失败实例转化为教训,以防止未来的失败。
核心方法: Fail2Progress
Fail2Progress背后的直觉是,单个数据点 (即失败本身) 不足以重新训练庞大的神经网络。机器人需要与该失败相关的整个数据集。但是,让机器人在现实世界中胡乱尝试以收集数据既危险又缓慢。
相反,作者提出了一种 现实到仿真 (Real-to-Sim) 的方法。他们希望在仿真中生成一个合成数据集,以满足两个相互冲突的目标:
- 针对性 (Targeted) : 数据必须类似于现实世界的失败场景 (以便机器人学会解决这个问题) 。
- 信息丰富 (Informative) : 数据应该挑战机器人的模型,专注于机器人不确定的领域 (最大化信息增益) 。
优化问题
这构成了论文数学贡献的核心。研究人员将其框架化为一个约束优化问题。他们希望找到一个数据集 \(\mathcal{D}^+\),它能最大化信息增益 (通过旧模型与更新后模型之间的 KL 散度来衡量) ,同时受限于仿真状态 \(S^+\) 必须与观察到的现实世界失败相匹配这一约束。
完整的优化目标可视化如下:

让我们拆解一下:
- 最大化 (Maximization) : 我们正在寻找一个数据集 \(\mathcal{D}^+\) (包含状态和动作) 。
- 目标函数 (\(D_{KL}\)) : 该项代表信息增益。我们希望新数据集能显著更新模型的后验分布。如果数据只是告诉模型它已经知道的事情,这一项就会很低。
- 约束条件: \(S^+ \sim P(\mathcal{R}^F, O^F | S)\)。生成的仿真状态必须仅在不改变失败背景的方式上与现实世界不同。它们必须与观察到的失败关系 \(\mathcal{R}^F\) 和观察到的点云 \(O^F\) 保持一致。
这创建了一个后验分布,它平衡了匹配失败观测的需求与有效仿真状态的先验:

在这里,\(\Gamma(r|O=\Psi(S))\) 确保了仿真状态在渲染成点云时,会产生与失败案例相同的符号关系。
利用 Stein 变分推断 (SVI) 使问题可解
直接求解上述优化问题在计算上是不可行的 (intractable) 。这将需要在优化循环内运行仿真器并重新训练模型——对于需要行动的机器人来说太慢了。
作者通过使用 熵 (Entropy) 作为信息增益的代理 (具体来说,是模型预测分布的熵) 来简化目标。高熵意味着模型是不确定的;因此,解决这种不确定性提供了高信息增益。
简化后的问题如下所示:

为了解决这个问题,作者利用了 Stein 变分推断 (SVI) , 特别是 Stein 变分梯度下降 (SVGD) 。SVGD 是一种强大的方法,它使用一组粒子来近似概率分布。
为什么要用 SVI?
- 多模态 (Multi-modal) : 失败场景是复杂的。可能有五种不同的桌子物体摆放方式都会导致同样的失败。标准的梯度下降方法会坍缩到单一解。SVI 维护一组多样化的粒子,捕捉失败的不同“模态”。
- 可并行化 (Parallelizable) : SVI 并行更新粒子,使其在 GPU 上非常高效。
推断过程分为两个阶段: 生成状态和生成动作。
第一阶段: 生成多样化状态
首先,系统生成一组仿真状态 (粒子) ,这些状态在视觉和符号特征上与失败相匹配。这些粒子的更新规则使用了 Stein 算子 (Stein Operator) :

这个方程看起来可能很吓人,但它有一个物理学解释。项 \(\nabla \ln P\) 就像引力,将粒子拉向看起来像失败案例的状态。第二项涉及核函数 \(k\),就像斥力。它防止粒子聚集在一起,确保机器人考虑可能导致失败的多样化场景。
第二阶段: 生成富含信息的动作
一旦场景设定好,机器人需要决定练习什么动作。它不仅想重复失败的动作;它还想探索该动作周围的参数空间,以理解成功与失败的边界。
这里的目标是最大化模型的熵 (不确定性) :

动作粒子的更新规则将它们推向高不确定性区域:

完整流程
图 2 展示了整个 Fail2Progress 的流程。

- 检测 (Detect) : 机器人试图拿起杯子但失败了。它记录点云和关系 (例如,“杯子未被握持”) 。
- 生成 (Generate (SVI)) : 系统启动 SVI 引擎。它生成 20 个看起来像那个凌乱桌子的不同仿真环境 (状态) 和 20 个不同的抓取参数 (动作) 。
- 仿真与标注 (Simulate & Label) : 它在一个快速物理仿真器 (IsaacGym) 中运行这 20 个场景。
- 微调 (Fine-Tune) : 机器人使用这批新鲜的、针对性的数据更新其神经网络模型。
- 恢复 (Recover) : 机器人使用更聪明的模型重新规划并取得成功。
实验与结果
作者在三个具有挑战性的长视距任务上评估了 Fail2Progress:
- 分层桌面整理 (Hierarchical Tabletop Organization) : 将物体放入杯子/碗中。
- 多物体运输 (Multi-object Transport) : 将多个物品放入袋子并移动袋子。
- 受限装箱 (Constrained Packing) : 将物品放入拥挤的架子上。
他们将自己的方法与几个基线进行了比较,包括:
- Original (原始) : 未经微调的基础模型。
- Replanning (重规划) : 只是再次尝试而不进行学习。
- Sampling (采样) : 使用拒绝采样来寻找数据 (随机猜测) 。
- Gradient (梯度) : 使用标准随机梯度下降 (SGD) 来生成数据。
仿真成功率
仿真结果差异巨大。如表 3 所示,标准方法在这些复杂任务中表现挣扎。

Fail2Progress 达到了 70-90% 范围的成功率,而原始模型通常徘徊在 15% 以下。即使是代表标准机器人方法的“重规划”基线,也仅达到约 24%。这证实了仅仅再次尝试是不够的;机器人必须从根本上更新其对世界的理解。
现实世界表现
但这能转移到物理机器人上吗?作者在移动操作机器人上部署了该系统。

图 3(a) 显示了现实世界的成功率。在包含 3、5 和 7 个物体的场景中,Fail2Progress (紫色柱) 始终优于梯度和采样基线。
然而,图 3(b) 强调了一个重要的限制。该方法依赖于良好的“仿真到现实”转换。如果现实世界感知的噪声过高 (Sim2Real 差距 > 0.6) ,性能就会下降。如果机器人无法准确感知失败状态,它就无法生成相关的仿真来学习。
效率
使用 SVI 而非其他采样方法的主要理由之一是效率。

图 6 以对数刻度显示了优化时间。虽然 Fail2Progress 花费的时间与 Gradient 方法大致相同,但它产生的数据质量要高得多 (如成功率所示) 。与拒绝采样 (青色柱) 相比——随着问题变难 (7 个物体) ,拒绝采样的时间复杂度呈爆炸式增长——Fail2Progress 得益于 GPU 上的并行化,保持了计算效率。
泛化能力
一个关键问题是,机器人是否只是死记硬背了它刚刚看到的特定失败的解决方案,还是真正学会了一项可泛化的技能。

作者通过在涉及 3 个物体的失败上微调模型,然后在包含 5 或 7 个物体的场景上测试来验证这一点。图 8 展示了这些未见过的场景。结果 (详见论文表格) 表明,模型即使在这些新颖的情况下也能保持高性能,这表明它学会了交互的概念,而不仅仅是记住了失败的特定几何结构。
定性示例
最后,眼见为实。图 4 展示了机器人的实际操作。

在第二行 (多物体运输) 中,机器人最初未能理解移动袋子会带动里面的物体——它把袋子放在了地板上。经过 Fail2Progress 后,它学会了“容器”关系,并成功将袋子 (及其内容物) 放在了桌子上。
结论与启示
Fail2Progress 代表了在使机器人更加自主和具有韧性方面迈出的重要一步。通过承认预训练模型在开放世界中不可避免地会失败,作者提供了一个用于恢复的结构化框架。
主要收获包括:
- 失败即数据: 失败不是死胡同;它是一个高信号的数据点,能准确指出模型的薄弱环节。
- 仿真作为思考工具: 我们不只在预训练中使用仿真。我们可以在“运行时”使用它来为当前问题构想解决方案。
- 多样性至关重要: 使用 SVI 生成多样化的合成数据远优于寻找单一解 (梯度法) 或随机猜测 (采样法) 。
尽管仍存在局限性——特别是关于 Sim2Real 差距和感知噪声——但这项工作为机器人能够在我们家中长期运行铺平了道路。它们不需要每次遇到新型架子时都进行软件更新,只需暂停、“思考” (仿真) 、学习,然后继续前进。
](https://deep-paper.org/en/paper/2509.01746/images/cover.png)