Unity
機械学習
ML-Agents
模倣学習

ML-Agents v0.3のImitation Learning(模倣学習)サンプルで個性的なAIを作成してみた

はじめに

ML-Agents v0.3からImitation Learning(模倣学習)が追加されたということで、このサンプルを使って個性的なAIを作成してみました。
まだあまり日本語のドキュメントがなく、TensorFlowによる学習環境の作成も必要なため、サンプル実行のための手順も合わせて簡単に説明します。

Imitation Learning(模倣学習)とは

Unite2018のML-Agentsに関する講演資料(リンク)を読んで理解して程度ですが、Reinforcement Learning(強化学習)とImitation Learning(模倣学習)は以下のような違いがあります。

・強化学習:報酬に対して最適な行動をするように学習する。報酬の仕組みによっては人間の思いもよらないような行動も可能。
・模倣学習:教師となる人間の行動をもとに学習する。人間の失敗を含めて学習するので、人間臭い動きになる(教師の個性が出る)。

環境

・Windows10(64-bit)
・Unity 2018.1.0f2 (64-bit)
・ML-Agents Beta 0.3.1b
・Miniconda3

TensorFlowによる学習環境を作成する

  1. Minicondaをインストールし、conda create --name mlagent python=3.5でpython3.5の環境を作成します
  2. conda activate mlagentで作成した環境をアクティベート
  3. {ML-Agentsの解凍パス}\ml-agents-0.3.1b\にカレントディレクトリを移動
  4. pip install -r ./requirements.txtで必要なモジュールをインストール

後続の手順で引き続きこのコンソールで作業するのでコンソールは閉じずに残してください。
閉じてしまったら、conda activate mlagentでアクティベート後に、{ML-Agentsの解凍パス}\ml-agents-0.3.1b\にカレントディレクトリを移動してください。

Imitation Learning(模倣学習)のサンプルのビルド

  1. {ML-Agentsの解凍パス}\ml-agents-0.3.1b\unity-environmentをUnity 2018.1.0f2で開きます。(バージョンが違いますが、そのまま開いて大丈夫)
  2. Assets\ML-Agents\Examples\BananaCollectorsにあるBananaImitationを開きます。 image.png
  3. あとはそのままBuild Settingsでビルド(出力先のフォルダ名はBananaImitationとしました。)
  4. 以下のファイルが出力されればOKです。

image.png

模倣学習させる

先ほど作成したTensorFlowによる学習環境で開いたコンソールに戻り、python python/learn.py {BananaImitationの出力先ディレクトリ\BananaImitation.exe --train --slowのコマンドを実行します。

コマンドが成功すればUnityのアプリが起動します。起動したらキーボードのWASDキーで黄色いバナナを頑張って獲得してください。
周りにいる生徒役のAIは最初はうまく動いてくれませんが、そのうち学習し、動いてくれるようになります。
image.png

学習したモデルを組み込む事前準備①(モデルのインポート)

数分間ゲームをプレイすると学習が完了し、自動的にアプリが終了します。ml-agents-0.3.1b\models\ppo配下に学習したモデルデータ(BananaImitation_ppo.bytes)が作成されているので、これをml-agents-0.3.1b\unity-environment\Assets\ML-Agents\Examples\BananaCollectors\TFModelsにコピーします。

学習したモデルを組み込む事前準備②(TensorFlowSharp in Unityのインポート)

Unity上で作成したモデルを動かすためにTensorFlowSharp in UnityのUnitypackageをダウンロードし、インポートします。
インポート後にPlayer Settings→Other Setttingsを開き、Scripting Define SymbolsにENABLE_TENSORFLOWの文字列を追加します。

学習したモデルを組み込む

  1. BananaImitationのシーンを開きます
  2. ヒエラルキービューのAcademyオブジェクトの子オブジェクトのStudentBrainを選択
  3. インスペクターでBrain TypeをInternalに設定
  4. 下にでてくるGraph Modelにインポートしたモデルを設定

image.png

実行結果

あとはPlayボタンを押せばAIが動きだします。私がやった結果はこんな感じになりました。まだ賢いとはいえませんが、バナナをとってくれていますね。
ダウンロード (2).gif

個性を出してみる

最初のモデルの学習時は紫色のバナナを取らないように、慎重に操作して学習させてみましたが、今度はアグレッシブに操作して学習させてみました。結果は以下のとおりです。元気ですね!
ダウンロード (3).gif

終わりに

今回は詳細な学習の設計まで踏み込めてはいませんが、サンプルを動かすだけで簡単に結果を得ることができました。
教師役のふるまいによって個性を持つので、是非自分だけのAIをつくってみて下さい!