1.CaP:自分で自分の制御プログラムを書くロボットの実現に向けて(1/2)まとめ
・ロボットが人間からの指示を受けて自分自身の制御コードを書く時代が到来
・最新の言語モデルはプログラミング言語を記述できるのでロボット制御も可能
・言語モデルが生成したプログラムをロボット上で実行するCode as Policiesを開発
2.Code as Policiesとは?
以下、ai.googleblog.comより「Robots That Write Their Own Code」の意訳です。元記事は2022年11月2日、Jacky LiangさんとAndy Zengさんによる投稿です。
SFじみたお話に感じるかもしれませんが、大規模言語モデルが間に挟まる事でロボットに曖昧なお願いを出来るようになるPaLM-SayCanが実現した時点でこの流れが加速していくのは必然だった気がします。
アイキャッチ画像はstable diffusionの1.5版の生成で自分で自分をプログラミングしているロボット群を昔のSFイラスト風で生成
ロボットを制御するために使用される一般的なアプローチは、物体を検出するためのコード、動力モーターを動かす一連の命令、ロボットがタスクを実行する方法を指定するためのフィードバックループでそれらをプログラムすることです。これらのプログラムは表現力が豊かですが、新しいタスクのためにポリシーを再プログラミングするのは時間がかかり、また専門知識が必要です。
もし、ロボットが人間からの指示を受けながら、自律的に自分自身のコードを書き、世界と対話することができるとしたらどうでしょう?
PaLMのような最新世代の言語モデルは、複雑な推論が可能です。しかも学習データに含まれる何百万行ものコードを使って学習されていることが分かっています。現在の言語モデルは、自然言語で書かれた指示にしたがって、一般的なコードだけでなく、ロボットの動作を制御するコードも書くことができるのです。
言語モデルは、(コメント形式で)いくつかの指示サンプルとそれに対応するコードを与えると、(文脈内学習により)新しい命令を取り込んで自律的に新しいコードを生成し、API呼び出しを再合成し、新しい機能を合成し、フィードバックループを表現して、実行時に新しい動作を組み立てることができるのです。
より広く言えば、これはロボットのための機械学習の代替アプローチを提案するものです。すなわち、
(i)モジュール化による汎用性の追求
(ii)インターネット上の豊富なオープンソースコードやデータを活用する
事です。
サンプルタスクに関するコード(左)が与えられたとき、言語モデルはAPIコールを再構成して、同じ関数を異なる形式で使用する新しいタスク(右)用に新しいロボットの動作を組み立てることができます。
この可能性を探るため、私達は、言語モデルによって生成されたプログラムを物理システム上で実行するロボット中心の定式化であるCode as Policies(CaP)を開発しました。
CaPは、私達の先行研究であるPaLM-SayCanを拡張し、言語モデルが汎用的なPythonコードの表現でより複雑なロボットタスクを実行することを可能にします。
CaPでは、言語モデルを用いて、少数回プロンプトでロボットコードを直接記述することを提案しています。実験では、ロボットタスクを直接学習して自然言語アクションを出力するよりも、コードを出力する方が汎化率やタスクパフォーマンスが向上することが実証されました。CaPは、タスクに特化した学習を行うことなく、一つのシステムで複雑で多様なロボットタスクを実行することを可能にします。
私達は、Everyday Robotsプロジェクトのロボットを含む複数のロボットシステムにおいて、言語モデルが言語命令を自律的に解釈し、reactive low-level policies(例:PD制御またはインピーダンス制御)およびwaypoint-based policies(例:視覚ベースのピックアンドプレース、軌道ベースの制御)を表すCaPを生成し実行できることを実証しています。
ロボットの汎化に関する異なった考え方
CaPは、自然言語による指示から新しいタスクのコードを生成するために、コードを記述する言語モデルを使用します。プロンプトとヒントと共に(例えばどのAPIが利用できるかを示すimport文)やサンプル(どのように命令をコードに変換すべきかの「デモンストレーション」を示す命令とコードのペア)を与えると、新しい命令に対して新しいコードを書くようになります。
このアプローチの中心は階層的コード生成(hierarchical code generation)であり、言語モデルに新しい関数を再帰的に定義させ、時間をかけて独自のライブラリを蓄積し、動的コードベースを自身で設計させるものです。階層的コード生成は、ロボット工学と自然言語処理(NLP:Natural Language Processing)分野の標準的コード生成ベンチマークの両方で最先端技術を改善し、合成プログラムの機能的正しさを測定するために用いられる手書きコーディング問題のベンチマークHumanEvalで39.8%のpass@1を得ています。
コード筆記言語モデルは、様々な算術演算やフィードバックループを言語に根ざして表現することができます。Pythonic言語モデルプログラムは、順次、選択(if/else)、ループ(for/while)などの古典的な論理構造を使って、実行時に新しい動作を組み立てることができます。
また、サードパーティライブラリを用いて、ポイントの内挿(NumPy)、空間幾何学的推論のための形状の解析と生成(Shapely)などを行うことができます。これらのモデルは新しい命令に汎化するだけでなく、文脈に応じて正確な値(例えば速度(velocities))を曖昧な記述(「速く(faster)」や「左へ(to the left)」)に変換し、常識から行動を取り出す事ができます。
Code as Policies(CaP)は、コード筆記言語モデルを用いて、自然言語による指示をロボットコードに割り当て、タスクを完了させます。生成されたコードは、既存の知覚アクションAPIやサードパーティライブラリを呼び出したり、ランタイムに新しい関数を記述したりすることができます。
CaPは、ロボットの特定のレイヤーで一般化します。例えば、自然言語による指示の解釈、知覚出力(例:すぐに利用可能な物体検出器)の処理、そして制御命令のパラメータ化などです。
これは、知覚と制御を統合したシステムに適合であり、エンドツーエンドのロボット学習に必要な大規模なデータ収集なしに、事前に学習された言語モデルから得られる汎化能力を付与するものです。また、CaPは、非英語圏の言語や絵文字の指示など、コードの記述とは関係のない言語モデルの機能も継承しています。
CaPは、多言語対応や絵文字対応など、言語モデルの機能を継承しています。
3.CaP:自分で自分の制御プログラムを書くロボットの実現に向けて(1/2)関連リンク
1)ai.googleblog.com
Robots That Write Their Own Code
2)arxiv.org
Code as Policies: Language Model Programs for Embodied Control
3)code-as-policies.github.io
Code as Policies:Language Model Programs for Embodied Control