Unity を検索

「好奇心」を使用して報酬の疎なタスクを解決する

2018年6月26日 カテゴリ: Engine & platform | 7 分 で読めます
シェア

Is this article helpful for you?

Thank you for your feedback!

ML-Agents ツールキット(v0.4) の新しいバージョンがリリースされました。そのエキサイティングな新機能のひとつが、好奇心に基づく内発的報酬を使用してエージェントのトレーニングを行う機能です。

この機能については多くの説明が必要となるため、追加の記事をお届けすることにしました。この機能によって、(報酬が疎な場合に)エージェントにより効率的に環境を探索させるための動機付けが簡単に行えるようになりました。これは、「エージェントが自分自身に与える報酬」を使用して行われます。この報酬は、エージェントが自分自身の行動の結果に対してどの程度「驚いた」か(自身の行動がどの程度「目新しい」結果をもたらしたか)に応じて与えられます。本記事では、この新機能の仕組みを解説し、バニラな強化学習(Reinforcement Learning / RL)アルゴリズムでは解決が非常に困難なタスクを、この機能を使用して解決しやすくする方法をご紹介します。

好奇心駆動探索

強化学習においては、主要な学習信号は報酬(エージェントが決断を行う度にエージェントに提供されるスカラー値)という形で提供されます。この報酬は通常は環境自体によって提供され、環境の作成者によって設定されます。例えば目的地点への到達が +1.0、死亡が -1.0、などといった形で決められます。こういった報酬はエージェントの外から与えられるものなので、外発的な報酬(extrinsic reward)と考えることができます。外発的な報酬があるということは、内発的な報酬(intrinsic reward)もあるはずです。内発的報酬は環境から提供されるのではなく、特定の基準に沿ってエージェント自体によって生成されます。もちろん、内発的報酬であればどんなものでも良いという訳ではなく、最終的に何かしらの役に立つものである必要があります。例えば、その内発的報酬を得たエージェントが、さらに大きな外発的報酬を得るべく挙動を変えたり、より能動的に世界を探索するようになるなどです。人間(およびその他の哺乳類)の場合、このような内発的報酬はしばしば「内発的動機付け」(intrinsic motivation)と呼ばれ、私たちの運動主体感(feelings of agency)と密接に関係しています。

強化学習の分野においては、自然界のエージェントの動機付けと同じような動機付けをエージェントに与える良いシステムを開発するために、非常に多くの研究が成されて来ました。一般的なアプローチのひとつは、エージェントに好奇心を与え、それが自身の周囲の世界に対してどの程度「驚いた」(目新しさを認識した)かに応じてエージェントに報酬を与えるというものです。赤ん坊が世界について学ぶ時、その子は何か特定の目的のために学習しているというよりは、経験自体に目新しさを見い出すゆえに遊び、探索しています。つまり、子供は好奇心を持っていると言うことができます。好奇心駆動探索の考え方とは、このような動機付けをエージェントに組み込むということです。「目新しい」状態の達成によって報酬を得られたエージェントは、より多くの「目新しい」状態を見つけるべく、環境探索の方法を学習して行きます。その過程で、上手くいけば外発的報酬(迷路の奥にあるゴール地点や、まばらにある資源など)も見つけることができます。

今回実装したアプローチは、昨年カリフォルニア大学バークレー校の博士課程学生である Deepak Pathak 氏らによって公開された論文で紹介されたものです。これは「Curiosity-driven Exploration by Self-supervised Prediction」(自己教師あり学習による予測を用いた好奇心駆動探索)と呼ばれています。(論文はこちらでお読みいただけます。)著者はこの論文中で、「好奇心」を導入するという考え方を分かり易く説明した上で、2 つの別々のニューラルネットワーク(順モデルと逆モデル)をトレーニングすることを提唱しています。逆モデルのニューラルネットワークはエージェントの受け取った現在および次の観測を取得してその両方を同一のエンコーダーでエンコードし、その結果を使って 2 つの観測の間に取られた行動を見積るようにトレーニングされます。その後に順モデルのニューラルネットワークが、エンコード済の現在の観測および行動を取得してエンコード済の次の観測を見積るようにトレーニングされます。そして、見積りのエンコード結果と実際のエンコード結果の差が内発的報酬として使用され、エージェントに与えられます。この差が大きいほど「驚き」(目新しさ)が大きくなり、したがって内発的報酬も大きくなります。

これら 2 つのモデルを併用することで、報酬は、「目新しい物事」を単純に全てキャッチするのではなく、エージェントがその行動によって作用を及ぼすことのできる「目新しい物事」のみをキャッチするようになります。このアプローチを用いると、一切の外発的報酬を使用せずに、純粋に内発的報酬のみによってエージェントをトレーニングしてスーパーマリオブラザーズを進行することができます。以下の図はこのプロセスを簡易的に示したものです。

この図は Intrinsic Curiosity Module(内発的好奇心モジュール)の仕組みを表したものです。白いボックスは入力、青いボックスはニューラルネットワークのレイヤーと出力、青い実線はネットワーク内のアクティベーションの流れ、緑の点線は差分計算のための比較、緑のボックスは内発的報酬の計算を表します。

サンプル環境「Pyramids」

好奇心を導入したテストは、普通の環境では行えません。ML-Agents ツールキット v0.3 のサンプル環境のほとんどは報酬が比較的密なので、好奇心などの探索強化の方法を用いてもあまり効果が見られません。このため、新しい要素である好奇心のテストを行えるように、「Pyramids」という報酬の疎な環境を新たに作成しました。この環境には報酬がひとつしか含まれておらず、エージェントはランダムな探索ではめったにそれを見つけることはできません。「Pyramids」に含まれるエージェントは、過去に公開されたいくつかの環境でお馴染みの青いキューブ形です。このエージェントは前進・後退、右折・左折ができ、キューブの前面から発せられるレイキャストによって周囲の世界を「見る」ことができます。

レイキャスト(ここでは分かりやすいように黒線で表示)を使用して周囲を観測するエージェント

このエージェントが、9 つの部屋を含む閉鎖されたスペースに入れられています。このうち 1 つの部屋にはランダムに配置されたスイッチがあり、その他の部屋にはランダムに配置された動かせない石のピラミッドがあります。エージェントがスイッチに(衝突することで)インタラクトすると、スイッチは赤から緑に変わります。この色の変化と共に、動かせる茶色いブロックのピラミッドが 1 つ、多数ある部屋のうちの 1 つにランダムに生成されます。このピラミッドの頂上には黄金のブロックが 1 つ載っています。エージェントがこのブロックに衝突すると +2 の外発的報酬を得ます。チャレンジ要素は、新しい部屋に移動したりスイッチを切り替えたりタワーを崩したりしても即座に得られる報酬はないことです。エージェントはこの一連の流れを、一切の中間的補助なしで学習しなければなりません。

Proximal Policy Optimization(近接方策最適化 / PPO)と好奇心を併用してトレーニングされたエージェントが、スイッチとのインタラクト後にピラミッドに向かって移動しています。

バニラな Proximal Policy Optimization(近接方策最適化 / PPO)(ML-Agents のデフォルトの強化学習アルゴリズム) でトレーニングされたエージェントはこのタスクを効率的に遂行できず、200,000 ステップ後でも偶然(平均報酬 -1)より高い結果を出せないことがしばしばあります。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

これに対し、PPO と好奇心駆動の内発的報酬を併用してトレーニングしたエージェントの場合、常に 200,000 ステップ以内で解決できるばかりでなく、その半分の時間で解決できることも少なくありません。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

PPO と好奇心でトレーニングされたエージェント(青)と PPO のみでトレーニングされたエージェント(赤)の、外発的報酬の累計獲得量の経時変化(それぞれ 5 回実行した平均)

また、内発的報酬信号のみを使ってトレーニングしたエージェントについてもテストしました。この場合、タスクの解決は学習しませんが、外発的報酬信号のみの場合に学習された方策(1 つの部屋の中で小さな円を描くように動く)よりも面白い方策(複数の部屋を移動する)を学習します。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

PPO と好奇心を併用しよう

ご自分の環境内でも、好奇心を使用したエージェントのトレーニングは簡単に行えます。まず、最新のML-Agents ツールキットを入手し、トレーニングしたいブレインのハイパーパラメーターファイルに「`use_curiosity: true`」というラインを追加してください。後は通常の手順でトレーニングを行っていただけます。TensorBoard をお使いの場合は、いくつかのメトリックがトラッキングされていることにお気付きになると思います。これには、順モデルの損失および逆モデルの損失や、エピソードごとの内発的報酬の累積などが含まれます。

エージェントに好奇心を与えても、全ての状況で有益な訳ではありません。例えば「Crawler」や「Walker」のように環境に密な報酬機能が既に含まれていて、ゼロ以外の報酬がほとんどのアクション後に与えられる場合は、大きな改善は見られません。環境の報酬が疎な場合には、内発的報酬を追加することで元は解決不可能だったタスクが(強化学習によって)簡単に解決可能になる可能性があります。特に、報酬が「勝ち / 負け」や「クリア / 失敗」などのように単純な場合に適しています。

---

好奇心に関連した機能をお使いの方は、ぜひご意見・ご感想をお聞かせください。GitHub の「Issues」のページで、または Eメール(ml-agents@unity3d.com)で、皆様のフィードバックをお待ちしています。それでは、楽しいトレーニングを!

2018年6月26日 カテゴリ: Engine & platform | 7 分 で読めます

Is this article helpful for you?

Thank you for your feedback!