首頁  >  文章  >  科技週邊  >  把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

WBOY
WBOY轉載
2023-04-14 12:49:081084瀏覽

對機器人來說,任務規劃(Task Planning)是一個繞不過去的難題。

想要完成一個真實世界的任務,首先你得知道把大象裝冰箱總共要幾步

即便是比較簡單的丟蘋果任務也包含多個子步驟,機器人得先觀察蘋果的位置,如果沒有看到蘋果就要持續尋找,然後靠近蘋果,把蘋果抓起來找到並靠近垃圾桶

如果垃圾桶關著的,還得先把它打開,然後再把蘋果丟進去關上垃圾桶

但每個任務的具體實作細節不可能都由人來設計,如何透過一句指令來產生動作序列就成了難題。

指令產生序列?這不正是語言模式的工作麼?

過去有研究人員使用大型語言模型(LLMs)根據輸入的任務指令對潛在的下一步行動空間進行評分,然後產生行動序列。 指令由自然語言進行描述,不包含額外的領域資訊。

但這類方法要么需要列舉所有可能的下一步行動進行評分,要么生成的文本在形式上沒有任何限制,其中可能包含在當前環境下特定機器人不可能採取的行動

最近南加州大學和英偉達聯合推出了一個新模型ProgPrompt,同樣使用語言模型對輸入指令進行任務規劃,其中包含了一個程式化的提示結構,使得生成的計畫在不同的環境、具有不同能力的機器人、不同的任務中都能發揮作用。

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

在保證任務的規範性上,研究者採用產生python風格程式碼的形式來提示語言模型哪些動作是可用的、環境中有哪些物件以及哪些程式是可執行的。

例如輸入「丟蘋果」指令就可以產生以下程式。

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

ProgPrompt模型在虛擬家庭任務中達到了sota效能,研究人員也將該模型部署在一個用於桌面任務的實體機器人手臂上。

妙用語言模型

想要完成日常家庭任務(everyday household tasks)既需要對世界具有常識性理解,也需要當前環境的情境知識。

為了創建一個「做晚餐」的任務計劃,智能體最起碼需要知道的常識包括:物體的功能,如爐子和微波爐可以用來加熱;行動的邏輯順序,在添加食物之前必須先預熱烤箱;以及物體和行動的任務相關性,例如加熱和尋找食材首先是與“晚餐”相關的行動。

但如果沒有狀態回授(state feedback),這種推理就無法進行。

智能體需要知道目前環境中哪裡有食物,例如冰箱裡是否有魚,或冰箱裡是否有雞肉。

在大型语料库上训练的自回归大型语言模型可以在输入提示的条件下生成文本序列,具有显著的多任务泛化能力。

比如输入「做晚饭」,语言模型可以生成后续序列,如打开冰箱、拿起鸡肉、拿起苏打水、关闭冰箱、打开电灯开关等。

生成的文本序列需要映射到智能体的行动空间中,比如生成的指令是「伸手拿起一罐泡菜」,对应的可执行动作可能就是「拿起罐子」,然后模型会计算出一个行动的概率评分值。

但缺少环境反馈的情况下,如果冰箱里没有鸡肉,却仍然选择「拿起鸡肉」行动,就会导致任务失败,因为「做晚饭」并没有包含任何关于世界状态的信息。

ProgPrompt模型在任务规划中巧妙地利用了编程语言结构,因为现有的大规模语言模型通常都在编程教程和代码文档的语料中进行过预训练

ProgPrompt为语言模型提供了一个Pythonic的程序头部作为提示,导入了可用的动作空间、预期参数和环境中可用的物体。

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

然后定义了诸如make_dinner, throw_away_banana等函数,其主体是对物体进行操作的动作序列,然后通过断言计划的先决条件,例如在试图打开冰箱之前靠近冰箱,以及用恢复行动来应对断言失败的情况,以此纳入环境的状态反馈

最重要的是,ProgPrompt程序中还包括了自然语言编写的注释,用以解释行动的目标,从而提高了生成的计划程序执行任务的成功率。

ProgPrompt

有了完整的想法,ProgPrompt的整体工作流程就清晰了,主要包括三部分Pythonic函数构建构造编程语言提示任务计划的生成和执行

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

1、将机器人计划表述为Pythonic函数

计划函数包括对动作原语(action primitive)的API调用,总结动作并添加注释,以及跟踪执行的断言。

每个动作原语需要一个物体作为参数,比如「把三文鱼放进微波炉」任务中,包括对find(salmon)的调用,其中find就是一个动作原语。

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

利用代码中的注释来为后续的动作序列提供自然语言的总结,注释有助于将高层次的任务分解成合乎逻辑的子任务,即「抓取三文鱼」和「把三文鱼放进微波炉」。

注释也可以让语言模型了解当前的目标,减少不连贯、不一致或重复输出的可能性,类似于思维链(chain of thought)生成中间结果。

断言(assertions)提供了一个环境反馈机制,以确保前提条件成立,并在不成立时实现错误恢复,比如在抓取行动之前,计划断言智能体已经接近了三文鱼,否则智能体需要先执行find行动。

2、构造编程语言prompt

prompt需要向语言模型提供关于环境和主要行动的信息,包括观察、行动原语、例子,并生成了一个Pythonic提示,供语言模型补全。

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

然後,語言模型將預測為可執行的函數,即microwave_salmon()

在微波爐鮭魚在這個任務中,LLM可以產生的且合理的第一步是取出鮭魚,但負責執行計劃的智能體可能沒有這樣一個動作原語。

為了讓語言模型了解智能體的動作原語,將其在prompt中透過import語句導入,也就將輸出限制為在目前環境下可用的函數上。

要改變智能體的行為空間,只需要更新import的函數清單即可。

變數objects以字串清單的形式提供了環境中的所有可用物件

prompt還包括一些完全可執行的程式計劃作為範例,每個範例任務都示範如何使用給定環境中的可用動作和目標來完成一個給定的任務,如throw_away_lime

3、任務計劃的生成和執行

##給定任務之後,計劃完全是由語言模型根據ProgPrompt提示推斷出來的,然後可以將生成的計劃在虛擬智能體或實體機器人系統上執行,需要用到一個解釋器,針對環境執行每個行動命令。

在執行過程中,斷言檢查以閉環的方式進行,並根據當前環境狀態提供回饋。

在實驗部分,研究人員在虛擬家庭(VH)模擬平台評估了此方法。

VH的狀態包括一組物體和對應的屬性,例如鮭魚在微波爐內部(in),或靠近(agent_close_to)等。

行動空間包括抓取(grab)、放入(putin)、放回(putback)、行走(walk),尋找(find)、打開(open)、關閉( close)等。

最終實驗了3個VH環境,每個環境包括115種不同的物體,研究人員創建了一個包含70個家務任務的資料集,抽象程度很高,指令都是「微波鮭魚」這類的,並為之創造一個ground-truth的行動序列。

在虛擬家庭上對生成的程序進行評估後,評估指標包括成功率(SR),目標條件召回(GCR)和可執行性(Exec),從結果上可以看到ProgPrompt明顯優於基準和LangPrompt,表格中也展示了每個特徵是如何提升效能的。

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

研究人員同樣在真實世界進行了實驗,使用一個帶有平行爪子的Franka-Emika熊貓機器人,並假設可以獲得一個拾取和放置(pick-and-place)的策略。

該策略將目標物件和目標容器的兩個點雲作為輸入,並執行拾取和放置操作,將物件放在容器上或裡面。

系統實作引入一個開放詞彙的物件偵測模型ViLD來辨識和分割場景中的物體,並建立prompt中的可用物件清單。

與在虛擬環境中不同的是,這裡物件列表是每個計畫函數的局部變量,這樣可以更靈活地適應新物件。

語言模型輸出的計畫中包含形式為grab和putin等函數呼叫。

由於現實世界的不確定性,實驗設定中並沒有實作基於斷言的閉環選項

把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃

可以看到,機器人在分類任務中,能夠識別出香蕉和草莓是水果,並產生計劃步驟,將它們放在盤子裡,而將瓶子放在盒子裡。

以上是把大象裝冰箱總共要幾步?英偉達發布ProgPrompt,讓語言模式為機器人安排計劃的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除