Foundation Model x Roboticsの動向とその課題（論文紹介を交えて）

# はじめに

こんにちは。[mendy](https://twitter.com/menomendy)です。
この記事は、[基盤モデル×Roboticsのカレンダー](https://qiita.com/advent-calendar/2022/robot-ai)の14日目の記事になります。

https://qiita.com/advent-calendar/2022/robot-ai

# この記事について

この記事では、Foundation Model for Robotの動向とその課題というテーマでいくつか論文を紹介しながら、ロボットにおける基盤モデルとは一体何なのかについて**ゆるく**書かせていただきます。基盤モデルというけど、何に使えるの？という方がイメージをつけるのに参考になれば幸いです。

いわゆるロボットに加えて、意思決定におけるFoundation Modelの内容も含んでいます。

聴講で参加したNeurIPS2022にも、[Foundation Model for Decision Makingというworkshop](https://sites.google.com/view/fmdm-neurips/)があり、基盤モデルxロボットは1つのトレンドになっていると思います。特に、[SayCan](https://sites.google.com/view/fmdm-neurips/)のような、Large Language Model(LLM)を用いたプランニングは、多く提案されはじめているように感じます。

https://sites.google.com/view/fmdm-neurips/

https://youtu.be/ysFav0b472w

# 基盤モデルとは？

これについては、MeRTさんが[初日の記事](https://trail.t.u-tokyo.ac.jp/ja/blog/22-12-01-foundation-model/)で述べていたり、他の記事でも言及されていますが、

> 「大量で多様なデータを用いて訓練され, 様々なタスクに適応（ファインチューニングなど）できる大規模モデル」 

という意味で定義されており、多くの人がこの意味で使っていると思います。（図は、[On the Opportunities and Risks of Foundation Models](https://arxiv.org/abs/2108.07258)より）

https://trail.t.u-tokyo.ac.jp/ja/blog/22-12-01-foundation-model/

<img width="700" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/ce5c74b5-2b42-27b4-8cb4-8a8103fa2c50.png">

# ロボットにおける基盤モデルとその使い方

では、ロボットにおいての基盤モデルとは何でしょうか？
こちらも基本的には、いわゆる（認識分野などでいわれている）基盤モデルと同じで、多様なデータを使い学習され、後段のタスクで有用な大規模モデルを指していると思います。（図は、[On the Opportunities and Risks of Foundation Models](https://arxiv.org/abs/2108.07258)より）
<img width="700" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/29f65e7f-0b52-bfb3-e544-8da23be405d1.png">
しかし、その使い方が、認識分野と少し異なり、いくつかあると思います。
どのように分類するのかが難しいところですが、自分の方では次のように考えています。

1. [方策の特徴抽出器として使う](#1.方策の特徴抽出器として使う)
1. [プランナーとして使う](#2.プランナーとして使う)
1. [報酬推定器として使う](3.報酬推定器として使う)
1. [世界モデル（状態遷移モデルなど）として使う](4.世界モデル（状態遷移モデルなど）として使う)

これら4つについて、論文紹介を交えながらお話させてください。

## 1.方策の特徴抽出器として使う

これは、シンプルに、事前に多様なデータを使い、Encoderをpretrainしておいて、後段のタスクに使うというものです。
ここでは、関連する研究として、2つ簡単に紹介します。

### [RRL: Resnet as representation for Reinforcement Learning[ICML 2021]](https://arxiv.org/abs/2107.03380)

#### 論文を一言で
- Image Classificationのタスクでpre-trainedされたResnet34をRLさせる際のencoderとして使用する手法を提案した論文
<img width="400" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/aecf1d6f-8390-d072-0614-e1d8a8df0f26.png">

#### 結果について
- ADROIT manipulation suiteで検証され、下図に示したように、stateに直接アクセスできる方法と比較しても十分に性能が出ていることが分かります。

<img width="400" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/1a81a5e9-787c-21c4-caa3-16bb5cda2c71.png">

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/8fa1b8aa-3df2-8b20-600b-022b446a7e95.png">

#### 提案手法の概要

- 本研究では、シンプルに、ImageNetのクラス識別タスクで学習させたResNet34を画像ベースのRLのタスクに適用する方法を提案。
- ImageNetで学習させることによって、当然、タスクスペシフィックにはなっていないことが良い点。
- 手法としては、DAPG（Data Augmentation Policy Gradient）という、Natural Policy Gradientを人のデモを効率良く使えるように学習した方法をベースに構成されている。stateは観測できないことが期待されるため、すべてResnet34から取得できる特徴を使う

### [Can Wikipedia Help Offline Reinforcement Learning?](https://arxiv.org/abs/2201.12122)

#### 論文を一言で
- offline強化学習において、languageでのpretrainの効果について検証した論文
<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/6ba903cf-1243-6e73-d1e9-559f24dec0ae.png">

#### 結果について
- ChibiTがWikitext-103 dataset（100million tokens from Wikipedia articlesで構成）でpretrainしたもの、GPT2-smallがGPT2の小さいモデル、iGPTがImageGPTになります。
- 下図（Table2）に示した結果を見ると、言語データセットでpretrainしたモデルは、従来手法と同等の性能を発揮していることが分かります。
- さらに、下図（Table3）に示した結果を見ると、Decision Transformerと比較して、学習の収束速度が速くなっていることが分かります。

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/610f0c89-a0ce-12ba-dd4a-efdd82ee84e7.png">

<img width="400" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/250a9823-6113-bbb1-d61b-99fda4fa98f5.png">


### 課題: pretrainに適したタスクは何か？
このように事前に多様なデータで学習させておくことで、有効性があることが分かっていますが、pretrainされているタスクによっては、ロボットがタスクを行うのに必要な特徴抽出が行われていない可能性があります。特に、単純な識別系のタスクでpretrainすると、全体を抽象的にとらえるような学習になっている可能性があるかもしれません。さらにロボットにとっては、時系列的な情報も重要で、一枚の画像の識別タスクでpretrainされたencoderでは、様々なロボットのタスクを行うのには不十分であると思います。どのような、pretrainが良いのかを考える必要があると考えています。

※シミュレーション環境を使う手もあると思いますが、その場合はどのようにシミュレーション環境とリアル環境のギャップを埋める（シミュレーション環境とリアル環境、双方で機能するような方策/Encoderを学習）のかが求められると思います。

### 課題: 推論時間
また、大規模なモデルを方策に適用する場合、その推論時間は問題になる可能性もあります。ロボットに載せられるような小さい計算リソースで推論を動かしたい場合、大規模すぎるモデルは当然実行が難しいため、ここについても解決が求められます。（クラウドで計算するような仕組みを整えるやり方もあるとは思いますが。）

## 2.プランナーとして使う

次に近年、多くの論文が提案されはじめている、プランナーとして使う方法です。ここでいうプランナーとは、事前に定義されたスキルセットから、どのスキルを選んで実行すれば、タスクを達成できるかを計画するものを指します。

特にLLMは潜在的に動作の理解（例えば、Task: Get Glass of Milkというのに対して、Kitchenに行き、冷蔵庫を開け、Milkを掴む）ができている可能性があり、それを使おうという研究が多く提案されています。

### [Language Models as Zero-Shot Planners: Extracting Actionable Knowledge for Embodied Agents](https://arxiv.org/abs/2201.07207)

#### 論文を一言で

- 大規模言語モデル（GPT-3など）を用いてhigh-levelなタスク（Get Glass of Milk）からシンボリックな行動（Walk to kitchen, open fridge）を生成、計画する手法を提案した論文

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/9f5bcc21-5195-958f-cdde-059fd4a7c063.png">

#### 結果について
- [Virtual Home](http://virtual-home.org/)という環境を使って評価（なお、Virtual Homeという環境はOpen-endedなため人による評価を実行したとのこと）
- 提案手法を入れることで実行可能かつ、セマンティック的に正しい行動を生成することに成功

http://virtual-home.org/

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/c9508d0d-ad91-cf83-55b9-cc2b2a5ee47a.png">

#### 提案手法の概要

- 本研究では、大規模言語モデルを用いてmid-levelな行動へ翻訳、変換する方法を提案。（taskを与えて文章を生成していく。）
- 大規模モデルは追加学習なしでもある程度は性能を発揮することができる（~20%）とのことだが、しばしば不可能なmid-levelの行動へ変換してしまう。
- そこで、3つの改善案を提案
    - 1つ目が、事前に用意された実行可能な行動との類似度を取って生成する方法（類似度が高いものが生成されやすくなる）
    - 2つ目が、自己回帰的に文章を生成する方法（行動生成した後にそれもPromptに入れて使う。）
    - 3つ目が、環境的な情報を埋め込むための方法で、事前に集めた人のexample（デモ）から、与えられたタスクに最も近いデモの行動系列もPromptとして使う。

### [Do As I Can, Not As I Say: Grounding Language in Robotic Affordances](https://arxiv.org/abs/2204.01691)

#### 論文を一言で

- 大規模言語モデルを用いてhigh-levelな言語指示から実行可能なシンボリックな行動を生成、計画する手法を提案し、実際のロボットで検証した論文

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/48db4ff8-e7c2-3bb5-f4e7-05674f73306a.png">

#### 結果について
- 実環境で様々なinstructionを実行できることを確認。Youtubeを一度確認するのがおすすめ。

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/5271c8a5-ec60-50f1-8c4d-9b144e5d03e6.png">

https://youtu.be/ysFav0b472w

#### 提案手法の概要

- 本研究では、大規模言語モデルを利用した行動計画に価値関数を組み込んだ方法を提案。
- 事前に用意した行動群において、与えられた言語指示からLLM的に出現する可能性が高いかどうかと観測された情報として価値関数的に実行可能かどうかをそれぞれ算出し、それらを両方考慮することで、大規模言語モデルを用いたシンボリックな計画に観測情報の考慮を実現している。（なお、価値関数はUniversal（すべての行動群でそれぞれ作られているわけではない）ことに注意）
- 事前に用意した行動群を実行するための方策（こちらもUniversal）は、Behavior Cloning（[BC-Z](https://arxiv.org/abs/2202.02005)という手法がベース）で学習され、また、価値関数は強化学習アルゴリズムのMtOptを使って学習される。

### 課題: 保持しておくスキルセットの作り方
このように、言語モデルはある一定の計画能力を保持していることが分かっています。しかし、こういった手法は、事前に用意したスキルセットにその計画能力が制限されます。どういったスキルセットを用意しておけば良いのか（スキルセットの粒度や、スキルセットのレベル感）は、まだ未解決の問題のように思えます。

### 課題: スキルセットの追加
さらに、新たなスキルセットを後から追加できるような枠組みにしておかないと、こちらもロボットの行動能力を大きく制限してしまうことになり、この枠組みは重要となるはずです。

## 3.報酬推定器として使う

こちらは以前から多く提案があったように思います。通常ロボットの実環境のデータを収集するのは非常に困難です。ある程度、学習が進んでいるロボットを使って実環境データ使いたいところですが、そのためのデータはどこから集めるのだという、にわとりと卵の問題が発生します。

そこで、大量の人が何かしらのタスクを行っている動画を使うことで、タスクの達成を評価できないか？というモチベーションで、提案されているのがこちらになります。

### [Concept2Robot: Learning Manipulation Concepts from Instructions and Human Demonstrations [RSS2020]](https://sites.google.com/view/concept2robot)

#### 論文を一言で
- inputとして、言語指示、とシーンのイニシャルの画像を与え、outputとして行動系列を出力させるような方策で、かつ様々なタスクに対応できる方策を学習させる手法の提案。
- ※ここで大事なのは、行動識別器が[something-something](https://developer.qualcomm.com/software/ai-datasets/something-something)という人のデモ動画から学習されたものということです。

https://developer.qualcomm.com/software/ai-datasets/something-something

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/c483fed1-b64d-0c56-cf2d-0c03f7ad447f.png">

#### 結果
- pybulletで作られた78のマニピュレーションタスクで検証。
- 手で設計した報酬による強化学習と同等の性能が出ていることを確認しています。（論文のFig.4を確認してみてください。）

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/71705245-0775-80f9-12d4-4cc7ed6f4750.png">

#### 提案手法の概要

- 手法のキモとしては、大量のデータを用いたことにある。（Something to Somethingのデータセット）その他、こまごましたテクニックとして、次がある。
- (1) シングルタスクを学習させる際に、強化学習を用いるけど、報酬設計が面倒なので、行動識別器を学習させるが、その際に、ゴール画像ではなく一連の画像を与える。
- (2) シングルタスクからマルチタスクを学習させる際には、シングルタスク方策を強化学習で作り、その後、そのシングルタスク方策を使って、蒸留させて、マルチタスク対応の方策を作る
- (3) 方策の出力はDMP（正確にいうとDMPではないが。。。）パラメータを出力させる。（yはstate, gがgoal pose, fが力、通常のDMPだとこの項をdecayさせるが、タスクによっては力を与え続ける必要があるそうで、なので、DMPではないそうです。）
- (4) DMPのパラメータの出力の際に、UpConvを使う。（UpConvを使うと軌道に共通の重みが使えるので学習がすすみやすい、UpConvによって時変要素も捉えられる。（RNNを使わないのと比較?））
- (5) 言語情報のinstructionの特徴抽出にはBERTを使い、MLPでfinetuneする、画像情報の特徴抽出にはResNet18を使い、MLPでfinetuneする。BERTは固定でMLPは学習、ResNet18とMLPは学習させる。
- (6) シングルタスクの学習アルゴリズムにはDDPG+CEMを使う。DDPGの推定解をCEMの初期解にするという手法。

### [Learning Generalizable Robotic Reward Functions from "In-The-Wild" Human Videos [RSS2021]](https://arxiv.org/abs/2103.16817)

#### 論文を一言で

- 人が行っている大量のデモ動画（e.g., Youtube）と、実際のロボットが行っている少量のデモ動画から報酬関数を獲得するという手法を提案している論文。（2つの動画が同じかどうかを判定）
- ※この論文は強化学習ではなく、画像予測モデルと学習した報酬関数を使い、CEM（Cross Entropy Method）を使って計画しています。

<img width="400" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/d2eec987-4b61-26f5-e342-c563f24b374f.png">

#### 結果について
- 与えられた人のデモ動画のタスクを達成できることを確認
- Concept2Robotと比較しても性能が向上

<img width="400" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/811d900a-5e11-e662-39d3-b02470e246d7.png">

#### 提案手法の概要

- Hステップ間の状態に報酬は依存するとして、今の状態からHステップさかのぼった状態を報酬推定器に、そして、人のデモ動画はすべてのタスクステップを報酬推定器に入れ、それらから、s1:Hの報酬を推定する。（同じかどうか判定する。）
- ネットワークの構成は、Figure3を参考、encoderに関しては、Concept2robotと同じ構成となっている。（encoderはsomething-somethingというデータセットで事前に学習してあり、学習時も固定とのこと
- 学習させるときは、あるベースの動画に対して、同じタスク、違うタスク、の動画でバッチを作り学習させる。人の動画が多すぎるため、そっちにFitしすぎないように、ロボットのデータが0.5の確率でサンプルされるように補正。
- 上記の方法で獲得された、報酬推定器を使って行動を計画する際は、SV2Pというaction-conditionedな画像予測器を使う。つまり、行動a1:atをいれていって、画像を予測する。予測した画像を報酬推定器に入れて、どの程度の値が取れるか判定。このスコアを基準にして、CEM（Cross entropy method）で最適化。

### 課題: 追加の学習、または、世界モデル（状態予測モデル）が必要

このように、人がタスクを行った動画から報酬関数を学習することができることが分かっていますが、もちろん報酬関数を学習しただけでは、ロボットはタスクを実行することはできないので、何かしらの形で方策を獲得する必要があります。例えば、その報酬関数を使って強化学習することや、世界モデル（状態予測モデル）と合わせて使うことで行動系列を計画することが考えられます。前者の場合は、強化学習を行える環境が必要であること、後者の場合は、精度の高い世界モデルが求められる（報酬関数も学習されており、計画が不安定になる可能性）という課題があり、どのように学習した報酬関数を使うかがポイントになりそうです。

### 課題: 人のデモのSub-Optimality性

大量にかつ容易に集められる人のデモも必ずOptimalではないため、Optimalではないものから報酬関数を学習することが求められます。人のデモのクオリティを評価するような枠組みも必要になるかもしれません。

## 4.世界モデル（状態遷移モデルなど）として使う

自分の行動によって世界がどう変化するかを予測できれば、自分の行動を決定する手掛かりになるというモチベーションで、大規模なデータセットから世界モデルを学習する方法も考えられます。

一番シンプルなのは状態遷移モデル`st+1 = f(st, at)`を学習することです。

この発想はいわゆるモデルベース強化学習です。（だと思っています。）

こちらはあまり良い論文が見つけられなかったので、もし良い論文をご存知の方がいれば教えていただけますと幸いです。

### [GNM: A General Navigation Model to Drive Any Robot](https://arxiv.org/abs/2210.03370)

#### 論文を一言で
- 様々なロボットで収集したナビゲーションタスクのデータセットを使い、今観測された画像とゴールの画像、観測された系列画像（ロボットのEmbodimentを推定するのに使う）から、距離とwaypointを推定する方策を学習する方法を提案した論文
- **※2つの画像の距離を学習しているということで、一応世界？（MAPに近いかもしれませんが...）のようなものを学習できているとして、ここでは紹介しています**

<img width="800" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/129eb893-7284-88a9-8b59-29aa74f9f19c.png">

#### 結果について
- 実環境のロボットを使い、多くの環境でナビゲーションに成功することを確認

<img width="400" alt="RRL" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261584/3e5691c8-c62e-4b57-a5cd-a5f21f36ec2d.png">

### 課題: 世界モデルで獲得する世界とは？

自分のとった行動によって変化する画像を予測することは一番シンプルだと思います。しかし、ロボットが計画する上で完全に画像を予測することは本当に、必要なのでしょうか？人が行動による変化を予測する際も、ピクセルレベルでの画像を予測しているわけではないと思います。（物を掴んだ手を開いたら、物が落ちるよねといったレベル感）じゃあ人は一体何を予測しているんだといわれると難しいです...このように、世界モデルといってもそれが一体何なのかがまだ分かっていないように感じています。Diffusion Modelといった生成モデルが多く出現する中で、何をどのように世界としてモデリングするのかが、ロボットにおいての世界モデルには求められそうです。

# 最後に

この記事では、Foundation Model for Robotの動向とその課題を論文紹介を交えて説明させていただきました。一部、自分の意見が入っているところもありますが、参考になれば幸いです。
　
## 宣伝

nnabla-rlという強化学習のライブラリを開発しています。もしよければ見ていってください。（スター大歓迎です...）

https://github.com/sony/nnabla-rl