Code as Policies:能编写自己代码的机器人语言模型程序

煤油灯科技2022-11-07 10:00

一种常用的控制机器人的方法是用代码对它们进行编程以检测物体,按顺序命令移动驱动器,并通过反馈循环指定机器人应该如何执行任务。虽然这些程序可以表达,但是为每个新任务重新编程策略可能很耗时,并且需要领域专业知识。

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

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

为了探索这种可能性,我们开发了Code as Policies (CaP),这是一种以机器人为中心的语言模型生成的在物理系统上执行的程序的公式。CaP扩展了我们之前的工作,PaLM-SayCan,它使语言模型能够用通用Python代码的完整表达式完成更复杂的机器人任务。在CaP中,我们提出使用语言模型,通过少镜头提示直接编写机器人代码。我们的实验证明,与直接学习机器人任务和输出自然语言动作相比,输出代码可以提高泛化和任务性能。CaP允许单一系统执行各种复杂多样的机器人任务,而不需要特定任务的训练。

我们在多个机器人系统中展示了语言模型可以自主解释语言指令以生成和执行代表反应性低级策略(例如,比例导数或阻抗控制器)和基于航路点的策略的Cap (例如,基于视觉的拾取和放置,基于轨迹的控制)。

机器人泛化的另一种方式

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

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

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

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

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

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

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

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

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

限制

这次的Code as Policies受到以下两方面的限制:(i)感知API能够描述什么(例如,迄今为止很少有可视化语言模型能够描述轨迹是“颠簸的”还是“更像C型的”),以及(ii)哪些控制原语可用。只有少数命名的原语参数可以在不使提示过度饱和的情况下进行调整。我们的方法还假设所有给定的指令都是可行的,我们无法判断生成的代码是否会先验地有用。与提供给语言模型提示的少数示例相比,CaPs还难以解释明显更加复杂或操作在不同抽象级别的指令。因此,例如,在桌面领域,我们的特定的CaPs实例化很难“用块建造房子”,因为没有构建复杂3D结构的例子。这些限制为未来的工作指明了道路,包括扩展视觉语言模型来描述底层机器人行为(例如,轨迹)或将CaPs与探索算法相结合,这些算法可以自动添加到控制原语集中。

开源

我们已经在项目网站上(https://code-as-policies.github.io/)发布了重现我们的实验所需的代码和交互式模拟机器人演示,其中还包含了附加的现实世界演示视频和生成的代码。

结论

Code as Policies是向机器人迈出的一步,机器人可以相应地修改自己的行为并扩展自己的能力。这可能是有利的,但是灵活性也增加了潜在的风险,因为合成程序(除非在每个运行时手动检查)可能导致物理硬件的意外行为。我们可以通过内置的安全检查来减少这些风险,这些检查绑定了系统可以访问的控制原语,但是需要更多的工作来确保已知原语的新组合同样安全。我们欢迎广泛讨论如何最小化这些风险,同时最大限度地提高对更多通用机器人的潜在积极影响。


原文链接:https://ai.googleblog.com/2022/11/robots-that-write-their-own-code.html


---煤油灯科技victorlamp.com翻译整理---

你可能也喜欢这些文章

科技互联网,科技,资讯,动态,洞察,量子,计算,AI,人工智能,机器人,区块链,Web3,分布式,操作系统,OS,芯片,视频,深度,论文