人类是“组合泛化 (compositional generalization) ”的大师。如果你知道“旋转 (spinning) ”意味着什么,也知道“拉动红色拉杆 (pulling a red lever) ”意味着什么,那么即使你从未亲手执行过这个特定的动作组合,你也能立刻理解“在旋转时拉动红色拉杆”这条指令。你不需要看遍每一个单词和动作组合的教程;你理解各个组件以及将它们组合起来的规则。
然而,在人工智能领域,这仍然是一个顽固的障碍。深度学习模型往往难以泛化到已知概念的新组合。在具身语言学习 (Grounded Language Learning) 中,这个问题变得更加困难,因为智能体 (如机器人或虚拟化身) 必须根据视觉世界的状态来解释指令。
一种被称为上下文学习 (In-Context Learning, ICL) 的技术——即在要求模型解决查询之前,先给它几个“支持 (support) ”示例——已经显示出了希望。但这里有一个陷阱: 标准的 ICL 依赖于从训练数据中检索好的示例。如果你面临的具体场景在训练数据中不存在,会发生什么?
在论文 “Generating Demonstrations for In-Context Compositional Generalization in Grounded Language Learning” 中,来自阿尔托大学的研究人员提出了一种名为 DemoGen 的新颖解决方案。他们的智能体不再是在数据库中搜索不完美的示例,而是针对当前情况生成自己的支持示例。
本文将探讨 DemoGen 的工作原理,为什么检索在具身环境中会失效,以及生成合成示范如何能在复杂的泛化基准测试中解锁最先进的性能。
问题所在: 具身组合泛化
要理解 DemoGen 的创新之处,我们首先需要定义研究人员正在解决的具体困难类型。
归纳式泛化 vs. 生成式泛化
组合泛化通常分为两类:
- 归纳式 (Inductive) : 模型看到新的输入组合,但产生的是已知的输出符号。
- 生成式 (Productive) : 模型必须产生一种新颖的输出符号组合。
生成式泛化要难得多。想象一个机器人知道如何 WALK (走) 和如何 PUSH (推) 。如果你让它“边走边推”,它必须生成一个它可能在训练中从未产生过的序列 WALK PUSH。
“具身”的挑战
在具身学习中,正确的动作取决于世界的状态 (state) 。 “走到黄色方块处”这条指令所对应的运动动作序列完全取决于智能体站在哪里以及方块位于何处。
这使得标准的上下文学习方法变得困难。通常,如果模型感到困惑,我们会从训练集中检索相似的示例。但在具身环境中,找到一个“相似”的示例简直是一场噩梦。你可能会从训练数据中找到一个“走到黄色方块处”的例子,但如果该例子中的房间布局与当前房间不同,动作序列将完全不同。这个例子非但没有帮助,反而变成了噪音。
为什么检索是不够的
研究人员对 gSCAN 数据集 (一个具身语言学习的标准基准) 中的最近邻相似性进行了深入分析。他们试图寻找与测试用例相似的训练示例。

如图 3 所示,相似度下降得非常快。即使是训练集中最接近的邻居,在环境布局上通常也有显著差异 (汉明相似度通常低于 0.8) 。
这证实了一个关键假设: 你无法仅靠检索来解决生成式泛化问题。 如果特定的“状态-指令”对不存在于训练数据中,检索“最近”的那个通常会得到一个智能体位置错误或障碍物不同的例子,从而导致不相关的动作序列。
解决方案: DemoGen
如果训练数据中不存在完美的支持示例,我们必须创造它们。这就是 DemoGen 的核心理念。
该方法在一个三阶段的流程中运作,旨在为当前特定的查询生成一个“课程”。

1. 指令生成器 (The Instruction Generator)
流程始于指令生成器 (见图 1 中间部分) 。这是一个掩码语言模型 (具体来说是类似 BART 的架构) 。它接收当前的查询指令 (例如,“spin and pull a small yellow cylinder”,即“旋转并拉动一个小黄色圆柱体”) ,并随机掩盖其中的一部分。然后,它重构出与当前视觉场景相关的新指令。
目标是生成与查询相似但更简单或略有不同的指令。对于像“pull the yellow cylinder (拉动黄色圆柱体) ”这样的查询,它可能会生成:
- “Pull a small yellow cylinder (拉动一个小黄色圆柱体) ”
- “Walk to a yellow cylinder (走到一个黄色圆柱体处) ”
- “Pull a red cylinder (拉动一个红色圆柱体) ”
至关重要的是,作者使用一个打分模型来过滤这些生成的指令,只保留那些“分布内 (in-distribution) ”的指令——即智能体应该知道如何执行的有效任务指令。
2. 引导 Transformer (The Bootstrap Transformer)
一旦我们有了一系列有效的相关指令 (\(I_1, I_3, ...\)) ,我们需要知道执行它们的正确动作。
这就是引导 Transformer 发挥作用的地方。这是一个在训练数据上训练过的标准模型。虽然这个模型可能会在复杂的测试查询上失败 (这需要生成式泛化) ,但它通常能够解决第 1 步中生成的较简单的指令。
引导 Transformer 充当模拟器,为生成的指令在当前状态下生成动作序列 (\(A_1, A_3, ...\)) 。
3. 上下文学习 (In-Context Learning, ICL)
现在,智能体拥有一套完美定制的示例: 与查询相关的指令,配对正确的动作序列,并且所有这些都发生在当前的世界状态中。
这些生成的配对与原始的困难查询一起被输入到最终的 ICL Transformer 中。

如图 2 所示,该架构将支持示例 (状态、指令、动作) 与查询 (状态、指令) 连接起来。编码器处理这个巨大的上下文,解码器生成最终的目标动作。
通过在当前的房间布局中看到“如何拉动”和“如何旋转”的例子,模型可以推断出如何“在旋转时拉动”,即使它以前从未这样做过。
实验结果
研究人员在 gSCAN 上评估了 DemoGen,这是一个专门设计用来难倒那些依赖简单模式匹配的模型的基准测试。gSCAN 中最著名的挑战是 Split H (H 划分) 。
在 Split H 中,模型必须执行像“pull a [object] while spinning (旋转时拉动某物体) ”这样的任务。在训练数据中,模型见过“pulling (拉动) ”,也见过“spinning (旋转) ” (与其他动词如 pushing 搭配) ,但它从未见过“pulling while spinning (旋转时拉动) ”。这需要真正的生成式泛化。
定量性能
结果令人震惊。

查看 Table 2 , 请密切关注 H 行:
- No ICL (TF): 基线 Transformer 完全失败 (成功率为 0.22) 。
- Retrieval (CovR / GandR): 试图寻找现有示例的方法表现挣扎 (0.56 和 0.17) 。它们找不到“旋转时拉动”的例子,而且从不同状态检索例子会混淆智能体。
- DemoGen: 获得了 0.80 的分数,大幅超越检索基线。
这一结果验证了核心假设: 当任务需要以新颖的方式组合概念时,向模型展示这些组件的生成示例 (例如,在这里拉动,在这里旋转) 可以使其合成出解决方案。
为什么有效?支持集分析
为了理解为什么 DemoGen 能在检索失败的地方成功,作者分析了支持集的内容。

Table 3 揭示了示范的质量。
- Row (2) Agent Pos: DemoGen (DG) 总是提供具有正确智能体位置 (1.00) 的示例,因为它是在当前状态下生成它们的。检索方法 (CovR/GandR) 经常从不同状态检索示例,导致位置不匹配。
- Row (6) & (7): DemoGen 始终生成包含正确动词和副词 (单独或一起) 的支持示例。检索方法经常完全遗漏副词,因为数据库中不存在“pull while spinning”。
扩展到自然语言
对 gSCAN 这样的网格世界数据集的一种批评是,语言过于机械化 (“walk to small red square”) 。为了证明 DemoGen 不仅仅是在利用合成模式,作者使用 GPT-3.5 将数据集改写为更自然、更多变的英语 (NL-gSCAN) 。

Figure 6 显示了语言复杂度的变化。原始 gSCAN (橙色) 的词汇量很小。新的 NL-gSCAN (蓝色) 遵循自然语言典型的齐普夫分布 (Zipfian distribution) 。
即使在这个更难、语言更多样化的数据集上,DemoGen 仍保持领先地位。

如 Table 4 所示,在自然语言版本的 Split H 上,基线下降到 0.19 , 检索方法 (GandR) 下降到 0.17 。 DemoGen 保持了强劲的 0.59 。 虽然比合成数据的分数低,但这表明该方法对语言变化具有鲁棒性。
消融实验: 什么最重要?
论文包含了几个消融研究,以精确指出生成的示范中哪些部分是有价值的。

Table 6 提供了对模型“逻辑”的迷人见解。研究人员尝试从提供给模型的集合中移除特定类型的支持示例:
- 移除目标物体 (Removing Target Object) : 性能小幅下降 (0.13) 。模型并不迫切需要看到完全一样的物体来理解任务。
- 移除动词 (Removing Verb,例如 Pull) : 性能大幅下降 (0.59) 。如果模型没有看到当前语境下“拉动”的例子,它就会失败。
- 移除副词 (Removing Adverb,例如 While Spinning) : 性能大幅下降 (0.50) 。
这证实了 DemoGen 的工作原理是有效地分解问题。它在当前环境中分别为动词和副词向模型提供“单元测试”,允许模型将它们缝合在一起以应对最终的查询。
结论
“DemoGen”这篇论文强调了我们对少样本学习 (few-shot learning) 思考方式的重大转变。很长一段时间以来,范式一直是 检索 \(\rightarrow\) 解决 (Retrieve \(\rightarrow\) Solve) 。 这对于纯文本任务非常有效,因为互联网上包含了与你想说的任何内容相似的句子。
然而,在具身 (grounded) 环境——机器人、虚拟智能体和多模态系统——中,状态空间太过巨大,无法依赖检索。你永远找不到一个训练示例能完美匹配你当前杂乱的客厅以及你刚刚给机器人的具体复杂指令。
Spilsbury 等人证明,具身学习的未来可能在于 生成 \(\rightarrow\) 解决 (Generate \(\rightarrow\) Solve) 。 通过赋予智能体想象相关子任务并在心理上解决它们 (通过引导 Transformer) 的能力,然后再尝试主要任务,我们解锁了静态数据集根本无法提供的组合泛化水平。
关键要点
- 检索在具身环境中失效: 当环境状态发生变化时,寻找“相似”的示例是无效的。
- 合成 > 检索: 生成定制的支持示例允许模型看到相关概念 (动词、副词) 在当前语境下的执行情况。
- 解锁组合泛化: 通过看到复杂命令的组件被分别演示,模型可以生成性地泛化到新颖的组合。
这种方法为更自主的智能体铺平了道路,它们不仅是死记硬背指令,而是能主动推理如何将技能应用于新的、未见过的挑战。
](https://deep-paper.org/en/paper/file-3134/images/cover.png)