ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、競プロ始めましたー!良ければフォローお願いします(`・ω・´)

【Unity ML-Agents】Unity-Agents-Overview.mdを日本語でまとめておく

はじめに

未来の自分用の備忘録記事です。

英語がとーーーーっても苦手で何度も訳すのはストレスで死んじゃいそうなので、、簡単にですが日本語に翻訳&まとめておきます。

英語が苦手+自分用に簡略化しているので、間違っている箇所や分かりづらい箇所もあると思います。是非ご指摘いただけると嬉しいです!

以下、翻訳&まとめ

Learning Environments Overview

上の画像(画像は省略)はML-Agents内で学習環境がどのように構築されているかを視覚的示したものである。

Agents学習環境内の主要な3種類のオブジェクトは次のようになっています。

  • Agent - 各エージェントは状態と観測の独自のセットを持ち、環境内で独自の行動を取ることが出来る。さらに環境内のイベントに対して独自の報酬を得ることが出来る。エージェントの行動は結合しているブレインによって決定される。

  • Brain - 各ブレインは特定の状態と行動空間を明確にし、ブレインと結合しているエージェントが取る行動を決定する責任がある。ブレインは次の4つのモードのいずれかに設定できる。

    • External - Python APIを用いたオープンソケットを介して通信することにより、TensorFlow(または、あなたが選んだMLライブラリ)を使用してアクションの決定が行われる。
    • Internal(Experimental) - TensorFlowSharpを介してプロジェクトに埋め込まれた訓練済みモデルを使用してアクションの決定が行われる。
    • Player - アクションの決定はプレイヤーの入力を使用する。
    • Heuristic - アクションの決定は手動で記述したコードを使用する。
  • Academy - シーン内のAcademyオブジェクトは、環境内のすべての脳を子供として含むことも出来る。各環境には、次のような環境の範囲を定義する単一のアカデミーが含まれている。

    • Engine Configuration(エンジンの構成) - トレーニングと推論モード内でのゲームエンジンのスピードとレンダリング品質。
    • Frameskip(フレームスキップ) - 新たな決定を行う各エージェント間をスキップするためのエンジンステップの数。
    • Global episode length - エピソードがどれぐらい続くか。結果に達すると全てのエージェントはdone(行動済み)がセットされる。

外部に設定されたブレインを持つ全てのエージェントの状態と観察は、外部コミュニケータによって収集され、Python APIを介して通信される。ニューラルネットワーク特有の並列計算方法のように、複数のエージェントを1つの脳に設定することで、アクションをバッチ式で決定できる。これらのオブジェクトがシーン内でどのように連動するかの詳細については、我々のwikiページを参照すること。

Flexible Training Scenarios

Unity ML-Agentでは、エージェント、ブレイン、報酬をどのように接続するか次第でさまざまな種類のトレーニングシナリオが可能である。私たちは、コミュニティがどのような革新的で楽しい環境を作り出しているかを見て楽しんでいる。優秀なエージェントを訓練する人のために、インスピレーションになりそうないくつかの例がある。これらの例は、ML-Agents SDKを使用してどのように作成できるかという説明を含んだ典型的な環境構築方法です。

  • Single-Agent - 1つの脳に結び付けられた1つのエージェント。エージェントを訓練する伝統的な方法。チキン(という名前のゲーム)のようなシングルプレイヤーゲームがこれにあたる。(ビデオリンクは省略)

  • Simultaneous Single-Agent - 1つの脳に結び付けられている独立報酬機能を持つ複数の独立エージェント。伝統的な訓練を並列化したもので、訓練のスピードアップと安定化が可能。十数個のロボットアームを訓練してドアを同時に開けるといった訓練がこれにあたる。(ビデオリンクは省略)

  • Adversarial Self-Play - 逆報酬関数を持ち、互いに影響し合うエージェントが1つの脳に結び付けられている。2人プレイのゲームでは、セルフプレイによって完全な敵と常に戦うことで、エージェントがどんどん熟練していく。これはAlphaGoを訓練する際に利用した方法であり、最近ではDota2の1v1で人間を打ち負かす訓練にも利用された。(デモプロジェクトは近日公開)

  • Cooperative Multi-Agent - 共有報酬機能を持ち、互いに影響し合う複数のエージェントが 1つまたは複数の異なる脳に結び付けられている。全てのエージェントは目標を達成するために単独ではなく、共に作業を行わなくてはならない。例としては、各エージェントが部分的な情報にしかアクセスできない環境があり、その部分的な情報がタスクを達成するために共有する必要があるといったもので、共同でパズルを完成させるといったタスクが具体例である。(デモプロジェクトは近日公開)

  • Competitive Multi-Agent - 逆報酬機能を持ち、互いに影響し合う複数のエージェントが1つまたは複数の異なる脳に結び付けられている。戦いに勝つ、または限られた数のリソースを獲得するために、互いに競争しなければならない。全てのチームスポーツはこれに該当する。(デモプロジェクトは近日公開)

  • Ecosystem - 独立した報酬機能を持ち、互いに影響し合う複数のエージェントが1つまたは複数の異なる脳に結び付けられている。これは、シマウマ、ゾウ、キリンなどのサバンナや都市環境内での自律的な運転シミュレーションなど、さまざまな目標を持つ動物が相互に作用する小さな世界を創造するものと考えることができます。(デモプロジェクトは近日公開)

Additional Features

ML-Agentsには、Academy / Brain / Agentシステムで可能となる柔軟なトレーニングシナリオ以外に、トレーニングプロセスの柔軟性と理解のしやすさを向上させるその他の機能も含まれている。

  • Monitoring Agent’s Decision Making - ML-Agentsでの通信は双方向なので、Unity環境内でのポリシーや値の出力など、訓練されたエージェントの側面を表示できるUnityのAgent Monitorクラスを提供している。これらの出力をリアルタイムで提供することで、研究者や開発者はエージェントの行動をより簡単にデバッグできる。

  • Curriculum Learning - エージェントが初期の訓練で複雑なタスクを習得することが困難な場合がしばしばある。カリキュラム学習(Curriculum Learning)はタスクの難易度を徐々に増加させることでより効率的な学習を可能にしている。ML-Agentsは、環境がリセットされるたびにカスタム環境パラメータのセッティングをサポートする。これにより、難易度または複雑さに関連する環境の要素を、トレーニングの進捗状況に基づいて動的に調整することができる。

  • Complex Visual Observations - エージェントの観察が1つのベクトルまたは画像に限定される可能性がある他のプラットフォームとは異なり、ML-Agentsでは複数のカメラをエージェントごとの観測に使用できる。これにより、異なる視点の複数のカメラを必要とする自走車、航空写真および一人称視点を統合する必要があるナビゲーションエージェント、または、視点の異なる複数のカメラを訓練する場合のように、エージェントは複数のビジュアルストリームから情報を統合することを学ぶことができる。また、エージェントは深度マップやオブジェクトをセグメント化した画像はもちろん、未熟な視覚入力のどちらも受け取れる。

  • Imitation Learning (Coming Soon) - たいていは、試行錯誤で学習を試みるよりも、エージェントに実行して欲しい行動をデモンストレーションする方が直感的である。将来のリリースでは、ML-Agentsは、模倣学習といった教師あり学習シナリオで使用するために、すべての状態/行動/報酬情報を記録する機能を提供する。模倣学習を利用することで、プレイヤーはエージェントが環境内でどのように行動すべきかのデモンストレーションを行い、そのデモンストレーションを利用してスタンドアロン式でエージェントを訓練したり、強化学習プロセスの第一歩として活用することができる。

疑問点

  • 逆報酬機能ってなんだろうか。勝てば+負ければ-の報酬を与える機能って意味で良いのかな。(AlphaGoと同じと書いてあるし...)

さいごに

意味がイマイチわからない部分もありますが、最後まで日本語に出来ました!
誤訳があると思うので、見つけた方はコメントかTwitterで教えて下さい。( ´∀`)

個人的に気になるのは最後のImitation Learningですね。実装されれば、「△△という挙動をさせたいから〇〇すると報酬を与えるようにする。」とやっていたものを「こういう感じでやってね。(実演)」と出来るようになるのでしょうか...?
出来たとしたら便利ですよね〜。

他にも英語チュートリアルはありますので適宜翻訳していきたいと思います。(私以外に需要があるか知りませんが...笑)
「英語得意だから翻訳やってやんよ」という神の出現お待ちしております〜〜!