#はじめに
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による学習環境を作成する
- Minicondaをインストールし、
conda create --name mlagent python=3.5
でpython3.5の環境を作成します -
conda activate mlagent
で作成した環境をアクティベート - {ML-Agentsの解凍パス}\ml-agents-0.3.1b\にカレントディレクトリを移動
-
pip install -r ./requirements.txt
で必要なモジュールをインストール
後続の手順で引き続きこのコンソールで作業するのでコンソールは閉じずに残してください。
閉じてしまったら、conda activate mlagent
でアクティベート後に、{ML-Agentsの解凍パス}\ml-agents-0.3.1b\にカレントディレクトリを移動してください。
#Imitation Learning(模倣学習)のサンプルのビルド
- {ML-Agentsの解凍パス}\ml-agents-0.3.1b\unity-environmentをUnity 2018.1.0f2で開きます。(バージョンが違いますが、そのまま開いて大丈夫)
- Assets\ML-Agents\Examples\BananaCollectorsにあるBananaImitationを開きます。
- あとはそのままBuild Settingsでビルド(出力先のフォルダ名はBananaImitationとしました。)
- 以下のファイルが出力されればOKです。
#模倣学習させる
先ほど作成したTensorFlowによる学習環境で開いたコンソールに戻り、python python/learn.py {BananaImitationの出力先ディレクトリ\BananaImitation.exe --train --slow
のコマンドを実行します。
コマンドが成功すればUnityのアプリが起動します。起動したらキーボードのWASDキーで黄色いバナナを頑張って獲得してください。
周りにいる生徒役のAIは最初はうまく動いてくれませんが、そのうち学習し、動いてくれるようになります。
#学習したモデルを組み込む事前準備①(モデルのインポート)
数分間ゲームをプレイすると学習が完了し、自動的にアプリが終了します。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
の文字列を追加します。
#学習したモデルを組み込む
- BananaImitationのシーンを開きます
- ヒエラルキービューのAcademyオブジェクトの子オブジェクトのStudentBrainを選択
- インスペクターでBrain TypeをInternalに設定
- 下にでてくるGraph Modelにインポートしたモデルを設定
#実行結果
あとはPlayボタンを押せばAIが動きだします。私がやった結果はこんな感じになりました。まだ賢いとはいえませんが、バナナをとってくれていますね。
#個性を出してみる
最初のモデルの学習時は紫色のバナナを取らないように、慎重に操作して学習させてみましたが、今度はアグレッシブに操作して学習させてみました。結果は以下のとおりです。元気ですね!
#終わりに
今回は詳細な学習の設計まで踏み込めてはいませんが、サンプルを動かすだけで簡単に結果を得ることができました。
教師役のふるまいによって個性を持つので、是非自分だけのAIをつくってみて下さい!