🧠

PaLM-SayCan解説

2022/12/31に公開

はじめに

この記事は基盤モデル×RoboticsのAdventCalendarの20日目の記事です.
基盤モデルのロボット応用がに関する研究は最近増えてきたので,勉強も兼ねてGoogleが発表したSayCanについて書かせていただきました.間違ってる部分ありましたらコメントで指摘して頂ければありがたいです!
今回解説するSayCanはcolabで動くサンプルコードが公式から配布されています[1].気になる方は是非試してみてください.

基盤モデル

基盤モデルについては@MeRTさんが詳しく記事にまとめられているので,こちらを参照して頂ければと思います.
簡単に説明すると,超大規模データで学習したモデルのことを基盤モデルと言い,これを様々なタスクに応用することで高い評価を得ています.基盤モデルをファインチューンすることで特定のタスクに適応する方法のほかに,CLIPやGPT等の言語入力がある基盤モデルの場合,入力する言語の形を調整することでファインチューンなしてタスクに適応する方法もあります.これを"prompt engineering"と言ったりします.

SayCan:概要


PaLM-SayCan原著論文 図3より引用
ロボットの実世界応用のためにはまだまだ多くの課題があります.その中の1つに指示文からのスキル分解があります.例えば,「お茶をこぼしたので助けてください」という命令を我々人間が受け取れば,

  1. キッチンに行き布巾を探す
  2. 布巾をもってこぼした場所に行く
  3. 布巾で拭く

のように何をすればいいかを理解できます.また,もし目の前に布巾があれば1のスキルをパスすることが出来ます.
このように人間であれば何てことのない能力もロボットにとっては非常に難しい訳です[2]

この課題に対する解決手法として提案されたのがGoogleのSayCan[3]になります.SayCanはロボットができるスキルを予め設定しています.これを論文ではスキルセットと定義しています.与えられた指示文をSayCanに通し,どのスキルを実行すればいいかを判断します.
SayCanには以下の2つのモジュールで構成されます.

Sayモジュール(上図左)

大規模言語モデル(LLM)を用いて指示文から次に実行する可能性の高いスキルを予想します.論文中では同じくGoogleが開発したPaLMというLLMを用いています.論文の肝はこの部分で次の節で詳しく説明します.

Canモジュール(上図右)

カメラやセンサなどから外界の情報を取得し,どのスキルが実行できる可能性が高いかを予測します.例えばカメラの画角内に布巾があれば「布巾を掴む」というスキルの成功確率が高くなり,逆に画角内になければ「布巾を掴む」の成功確率は低くなり,「キッチンに行く」等の成功確率が高くなります.この部分を論文中ではAffordance functionと定義しており,強化学習で実現しています.

上記の2つのモジュールの結果を合算し,次に実行するスキルを予想します.Sayモジュールで指示文の理解,Canモジュールで外界の情報からの判断,これらの結果を総合的に考えて次のスキルを決める,というのは人間に近い判断だと思います.

Sayモジュール: 解説

SayCanの根幹であるLLMは文章を単語毎に入力し,次の単語を確率と共に出力します(図上).
文章の続きを予測する場合,持っている文章を単語毎に入力し,それまでの結果は使いません.そして持っている文章の先は予測した単語を入力していきます.まあ一般的な回帰モデルと同じ感じですね.

さて,SayCanでは少し違った使い方をします.まずSayCanでは予測する単語の確率を利用します.例えば指示文が「I spilled my drink, can you help?」だとします.この時,Sayモジュールへの入力文章は「I spilled my drink, can you help? <スキルの説明>」になります.そして,スキルの説明の単語毎の確率を合算します.下記の例だと「I can bring you a sponge」がSayモジュールで最も高く,Canモジュールでもこのスキルの成功確率が高ければ実行します.そして2番目のスキルを予想する際の入力は「I spilled my drink, can you help? I can bring you a sponge. <スキルの説明>」になります.終了の判定はスキルセットに含まれる「done」の確率が最も高くなるまでです.

評価

論文では以下の7種類101の指示文で評価をしています.シンプルなもの,長めのものなど様々な指示文で評価しています.スキル数は合計で551個です.

PaLM-SayCan原著論文 表1より引用

結果は下記のようになってます.Totalを見てもらえれば分かる通り,スキルの予測のみ(Plan)では8割程度,実行(execute)では6~7割くらいになってます.実行の成功率は強化学習の精度も関わってくるのでどちらがボトルネックになって精度が下がっているのかは分かりませんが,少なくともSayCanの実力が非常に高いものであることが分かります.
そして結果で面白いのが,Canモジュールなし(No Affordance)でも結構な精度が出ていることです.Canモジュールの強化学習はデータセットを取るのが非常に大変な一方で,SayモジュールはOpenAIのAPIを使えば実装できます.

PaLM-SayCan原著論文 表2より引用

感想

SayCanすごいですね.家庭用サービスロボットの競技会であるRoboCup@HomeにGPSRという人が命令してロボットがそれを実行する,というタスクがあります.これが非常に難しいタスクで今までまともに出来てるチームいなかったと思うのですが,SayCanの登場で競技会も面白い方向に進みそうな気がしています.
一方で,SayCanに使われてるCanモジュールの強化学習は簡単に作れるものではないので,ロボットに実装するなら別の方法を考える必要がありそうです.Sayモジュールも指示文+スキル を全パターンで試す必要があるので,スキル数が増えていけば予測が遅くなったりします.また,スキルセットを事前に定義する必要があるので,ここが今後の課題になっていきそうです.

おわりに

最近様々な分野に応用されてて,特にロボットへの応用は今後増えていくんだろうなぁ,と感じてます.SayCanが登場して半年程ですが,既にGoogleは新たな手法であるRT-1を提案しています.(こちらも@MeRTさんが解説しています.)自分の研究にも基盤モデルが応用できるところがありそうなので,今後も勉強していきたいと思います!

脚注
  1. https://sites.research.google/palm-saycan ↩︎

  2. このことをモラベックのパラドックスと言ったりします ↩︎

  3. https://say-can.github.io/ ↩︎

Discussion