こちらのページでは、ML-Agentsのライブラリ(ml-agents-masterフォルダ)をダウンロードすると必ず付いてきます公式サンプル集(「ml-agents-master/UnitySDK/Assets/ML-Agents/Examples」に保存)についての解説ページになります。
ML-Agentsの公式サンプルは何と10種類以上あり、ただ機械学習する様子を眺めるのも一興(個人的にはそれでも充分楽しい(笑))ですが、実は中身のスクリプト文等をよくよく眺めますと、非常に沢山のことを勉強出来ます。それだけ非常によく出来たサンプル集なので、折角ならサンプルから様々なことを勉強していきましょう!というページになります。
なお、本ページはML-Agents(ver0.5)に基づいて解説していきます。2018年12月17日に、ML-Agents(ver0.6)が新規にリリースされました。ver0.6では、Brain Typeの設定方法が大きく変更されております。設定方法についてはこちらのページにまとめましたので、ML-Agents(ver0.6)でサンプルをいじる際は本ページと併せて参考にして下さい。
こちらがサンプルの一覧表になります。それぞれのサンプルゲームのついて、別ページにて詳細に解説をしておりますので、併せて参考にして下さい。各ゲーム名の所にリンクを貼ってあります。
フォルダ名 | 概要 |
Basic | Agent(立方体)を左右に移動させてゴール(球)に到達させるゲーム、Agentは1つ |
3DBall | Agent(平板)を傾けてBallを落とさないようにするゲーム、Agentは複数 |
GridWorld | Agent(四角)を上下左右に操作してゴール(+)に到達させるゲーム、ただし落とし穴(×)に注意、Visual Observationによる機械学習 |
Tennis | 2つのAgent(ラケット)がお互いにボールを打ち合うゲーム、Agent vs Agentの対戦による機械学習 |
PushBlock | Agent(青小立方体)を上下左右に操作してブロック(橙立方体)をゴールまで押し込むゲーム、RayPerceptionを用いた機械学習 |
WallJump | Agent(青小立方体)を上下左右に操作してゴールに到達させるゲーム、ただし途中に高い壁がある場合、土台(橙立方体)の上からのジャンプが必要、Brainの切り替えが入る機械学習 |
Reacher | |
Crawler | |
BananaCollectors | |
Hallway | |
Bouncer | |
Soccer | |
Walker | |
Pyramids |
次に、UnityのML-Agents学習環境を構成する基本の3要素について説明していきます。最低限、学習環境の基本をおさえておいた方が、上記公式サンプルの中身の理解もより進むと思いますので、本ページで解説しておきます。なお、こちらからの引用になりますが上のイメージ図も分かり易いので併せて参考にして下さい。
まず、基本の3要素とは、「Academy」、「Brain」、「Agent」になります。それぞれの役割を簡単に書きますと…、
・Academy:Unity内部のレンダリング品質・実行速度などの環境調節をしたり、Unity外部のPython(Tensorflow)=機械学習するAI様との連絡役。
・Brain:Agentに行動を指示する脳。Agentが観測したことや得た報酬を元に行動を決定する。機械学習の場合、Brainは(Academyを介して)AI様の指示に従うことになる。
・Agent:Brainにより操作される主人公オブジェクト。良い動作をするとプラスの報酬を得るが、間違った動作をするとマイナスの報酬を得て損をする。各Agentには1つのBrainが割り当てられている。
これら3要素はUnityのML-Agents学習環境に必須になります。特定のクラスを継承したスクリプトをUnity内のオブジェクトに付けることで、これら3要素を組み込むことが出来ます。
次に、各要素の概要をもう少し説明していきます。各要素の詳細な機能などについては、各サンプルの解説ページにて必要に応じて解説していきますのでここでは概要に留めます。m(_ _)m
Academyクラスを継承するスクリプトをUnity内のオブジェクトに付けることで、Academyの出来上がりです。スクリプトを付けるオブジェクトの名前は「○○Academy」として下さい。
スクリプトのテンプレートは「ml-agents-master/UnitySDK/Assets/ML-Agents/Examples/Template/Scripts」に「TemplateAcademy.cs」という名前で保存されていますので、新規に作成する場合はこれをコピーして編集することをオススメします!この「TemplateAcademy.cs」は大きく以下の3つの(オーバーライド)メソッドから成り立っています。
メソッド名 | 概要 |
void InitializeAcademy() | 環境初期化時に呼び出される |
void AcademyReset() | 環境リセット時に呼び出される |
void AcademyStep() | ステップ毎に呼び出される |
「ml-agents-master/UnitySDK/Assets/ML-Agents/Scripts」に保存されているスクリプト「Brain.cs」をUnity内の「□□Brain」オブジェクトに付けることでBrainの出来上がりです。「□□Brain」オブジェクトは、先程作成した「○○Academy」オブジェクトの子供にします。
「Brain Type」はどのようにAgent(主人公オブジェクト)を操作するかの設定項目になりまして、以下の4つの選択肢があります(注:ver0.6ではここの設定方法が大きく変更されました、こちらのページ参照)。
・「Brain Type:Player」…プレイヤーがAgentを操作してゲームを遊びます。操作キーは右上の画面で設定します(Playerを選択すると「Brain Type」設定項目下に操作キーを設定する画面が追加で現れます)。
・「Brain Type:External」…AgentはUnity外部のPython(Tensorflow)=機械学習するAI様の指示に従う。機械学習を実施する際はコチラの設定で。
・「Brain Type:Internal」…先程の機械学習の結果、得られた推論モデル(○○.bytes)に基づきAgentが操作されます。
・「Brain Type:Heuristic」…Agentの操作方法が書かれたスクリプト(○○Decision.cs)に基づきAgentが操作されます。なお、スクリプトを新規に作成する際は、テンプレートが「ml-agents-master/UnitySDK/Assets/ML-Agents/Examples/Template/Scripts」に「TemplateDecision.cs」という名前で保存されていますので、これをコピーして編集することをオススメします!
Agentクラスを継承するスクリプトをUnity内のオブジェクトに付けることで、Agentの出来上がりです。スクリプトを付けるオブジェクトの名前は「△△Agent」として下さい。
スクリプトのテンプレートが「ml-agents-master/UnitySDK/Assets/ML-Agents/Examples/Template/Scripts」に「TemplateAgent.cs」という名前で保存されていますので、新規に作成する場合はこれをコピーして編集することをオススメします!この「TemplateAgent.cs」には大きく以下の5つの(オーバーライド)メソッドから成り立っています。
メソッド名 | 概要 |
void InitializeAgent() | Agent初期化時に呼び出される |
void AgentReset() | エピソード終了時=Agentリセット時に呼び出される |
void CollectObservations() | Stateの取得時に呼び出される Actionの結果、Agentの状態をBrainに教えるために使用 |
void AgentAction (float[] vectorAction, string textAction) |
ステップ毎に呼び出される Brainからの指示をどう処理するかの手続きや、Agentに与える報酬のルールが示されている |
void AgentOnDone() | エピソード完了時に呼び出される |
このページの後半では、UnityのML-Agents学習環境を構成する基本3要素の話をしました。ほんの入り口の話をしただけですので、少しピンと来ない点があるかもしれません。その場合は、サンプル集解説その1の方で公式サンプル「Basic」の解説をしておりますので、簡単な具体例の一つとして併せてご覧いただくと、より理解が深まるかと思います。是非ご覧ください!