编写自己的代码的机器人

1726077029693.jpg

控制机器人的常用方法是使用代码对机器人进行编程以检测物体、使用序列命令移动执行器以及使用反馈循环指定机器人应如何执行任务。虽然这些程序可以表达性强,但为每个新任务重新编程策略可能非常耗时,并且需要领域专业知识。

如果机器人在收到人类指令后,能够自主编写代码来与世界互动,情况会怎样?事实证明,最新一代语言模型(如PaLM)能够进行复杂的推理,并且已经接受了数百万行代码的训练。根据自然语言指令,当前的语言模型不仅能够熟练地编写通用代码,而且正如我们发现的那样,还能编写控制机器人动作的代码。当提供几个示例指令(格式化为注释)和相应的代码(通过上下文学习)时,语言模型可以接受新指令并自主生成新代码,这些新代码可以重新组合 API 调用、合成新函数并表达反馈循环以在运行时组装新行为。更广泛地说,这为机器人使用机器学习提出了一种替代方法,即 (i) 通过模块化追求泛化,(ii) 利用互联网上丰富的开源代码和数据。

给定示例任务的代码(左),语言模型可以重新组合 API 调用,以使用相同功能但以不同方式为新任务组装新的机器人行为(右)。

为了探索这种可能性,我们开发了“代码即策略”(CaP),这是一种以机器人为中心的语言模型生成程序,在物理系统上执行。CaP 扩展了我们之前的工作PaLM-SayCan,使语言模型能够使用通用 Python 代码的完整表达来完成更复杂的机器人任务。借助 CaP,我们建议使用语言模型通过少量提示直接编写机器人代码。我们的实验表明,与直接学习机器人任务和输出自然语言动作相比,输出代码可以提高泛化能力和任务性能。CaP 允许单个系统执行各种复杂多样的机器人任务,而无需针对特定任务进行训练。

我们在多个机器人系统(包括来自Everyday Robots的机器人)中证明,语言模型可以自主解释语言指令以生成和执行代表反应式低级策略(例如,比例-微分或阻抗控制器)和基于航点的策略(例如,基于视觉的拾取和放置、基于轨迹的控制)的 CaP。

从不同角度思考机器人泛化

为了根据自然语言指令为新任务生成代码,CaP 使用了一种代码编写语言模型,当收到提示(即,告知哪些 API 可用的导入语句)和示例(指令到代码对,提供如何将指令转换为代码的少量“演示”)时,该模型会为新指令编写新代码。此方法的核心是分层代码生成,它提示语言模型以递归方式定义新函数、随着时间的推移积累自己的库并自行构建动态代码库。分层代码生成提高了机器人技术以及自然语言处理 (NLP) 子领域的标准代码生成基准的最新水平,在 HumanEval 上的 pass@1率为 39.8% ,HumanEval 是用于衡量合成程序功能正确性的手写编码问题基准。

代码编写语言模型可以表达基于语言的各种算术运算和反馈循环。Python 语言模型程序可以使用经典逻辑结构(例如序列、选择(if/else)和循环(for/while))在运行时组装新行为。它们还可以使用第三方库来插入点(NumPy)、分析和生成形状(Shapely)以进行空间几何推理等。这些模型不仅可以推广到新指令,还可以根据上下文将精确值(例如速度)转换为模糊描述(“更快”和“向左”)以引出行为常识。

Code as Policies 使用代码编写语言模型将自然语言指令映射到机器人代码以完成任务。生成的代码可以调用现有的感知操作 API、第三方库或在运行时编写新函数。

CaP 在机器人的特定层上进行泛化:解释自然语言指令、处理感知输出(例如来自现成的物体检测器),然后参数化控制原语。这适用于具有分解感知和控制的系统,并赋予一定程度的泛化能力(从预先训练的语言模型中获得),而无需进行端到端机器人学习所需的大量数据收集。CaP 还继承了与代码编写无关的语言模型功能,例如支持使用非英语语言和表情符号的指令。

CaP 继承了语言模型的功能,例如多语言和表情符号支持。

通过描述代码生成问题中遇到的泛化类型,我们还可以研究分层代码生成如何提高泛化能力。例如,“系统性”评估将已知部分重新组合以形成新序列的能力,“替代性”评估对同义代码片段的鲁棒性,而“生产力”评估编写比示例中更长的策略代码的能力(例如,对于可能需要定义和嵌套新函数的新长期任务)。我们的论文提出了一个新的开源基准,用于评估一组与机器人相关的代码生成问题的语言模型。使用这个基准,我们发现,一般来说,更大的模型在大多数指标上表现更好,而分层代码生成对“生产力”泛化的改进最大。

不同泛化类型在 RoboCodeGen 基准测试中的表现。较大的模型 ( Davinci ) 比较小的模型 ( Cushman ) 表现更好,分层代码生成对提高生产力的贡献最大。

我们还对代码编写模型的潜力感到兴奋,它可以为具有不同形态的机器人表达跨体现计划,这些机器人根据可用的 API(感知动作空间)以不同方式执行相同的任务,这是任何机器人基础模型的重要方面。

语言模型代码生成展现出跨体现的能力,根据可用的 API(定义感知动作空间)以不同的方式完成相同的任务。

限制

如今,代码即策略受到以下范围的限制:(i) 感知 API 可以描述的内容(例如,迄今为止,很少有视觉语言模型可以描述轨迹是“颠簸的”还是“更像 C 形的”),以及 (ii) 哪些控制原语可用。只有少数命名的原语参数可以调整,而不会使提示过度饱和。我们的方法还假设所有给定的指令都是可行的,并且我们无法判断生成的代码是否有用。CaP还难以解释比语言模型提示提供的少数样本示例复杂得多或在不同的抽象级别上运行的指令。因此,例如,在桌面领域,我们的特定 CaP 实例很难“用积木建造房屋”,因为没有建造复杂 3D 结构的例子。这些限制指明了未来研究的方向,包括扩展视觉语言模型来描述低级机器人行为(例如轨迹)或将 CaP 与可以自主添加到控制原语集的探索算法相结合。

开源发布

我们已经在项目网站 上发布了重现实验所需的代码和交互式模拟机器人演示,其中还包含带有视频和生成代码的额外真实演示。

结论

代码即策略是朝着能够修改行为并相应扩展功能的机器人迈出的一步。这可以实现,但灵活性也带来了潜在风险,因为合成程序(除非每次运行时都手动检查)可能会导致物理硬件出现意外行为。我们可以通过内置安全检查来限制系统可以访问的控制原语,从而减轻这些风险,但还需要做更多的工作来确保已知原语的新组合同样安全。我们欢迎就如何最大限度地降低这些风险同时最大限度地发挥对更多通用机器人的潜在积极影响展开广泛讨论。

致谢

本研究由 Jacky Liang、Wenlong Huang、Fei Xia、Peng Xu、Karol Hausman、Brian Ichter、Pete Florence 和 Andy Zeng 完成。特别感谢 Vikas Sindhwani 和 Vincent Vanhoucke 对写作的有益反馈,以及 Chad Boodoo 提供的操作和硬件支持。早期预印本可在 arXiv 上找到。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论