Introducing: Unity Machine Learning Agents
Unity ML-Agentsを使えば、Unity環境で強化学習を行うことができます。
チュートリアルは簡単に試すことができるのでまずはやってみましょう。
#まず動かしてみる
Unityを起動して適当な名前でプロジェクトを作ります。
公式GitHubからML-Agents package with TensorflowSharpをダウンロード。実行して環境をインポートします。
Examples > Areaの中にあるWallSceneをやってみましょう。
HierarchyのAcademy > Brainを選択。BrainTypeがPlayerになっていることを確認して実行してみましょう。
キーボードのWASDで移動、スペースでジャンプ。
壁の向こうにある緑色のところに行けばゴールです。しかし、ただジャンプするだけでは壁は越えられないので、オレンジの箱を利用しなければいけません。
#学習済みデータを利用する
このチュートリアルには学習済みのデータが付属しています。これを使ってみましょう。同じフォルダのTFModelsに入っているファイルがそれです。
まず、Edit > Project Settings > PlayerからOtherSettingsタブを開き、
Scripting Runtime Version を Experimental(.NET 4.6 Equivalent)
Scripting Define Symbols を ENABLE_TENSORFLOW
にします
今度は先ほどと違って、BrainTypeをInternalにします。
Graph Modelに強化学習のデータが入ります。デフォルトですでに入っていると思います。これがさっきのTFModelsに入っていたデータですね。
これで実行してみましょう。
強化学習されたモデルによって自動で動くと思います。
同様の手順でほかのサンプルも動かすことができます。
#サンプル紹介
3DBall
Reacher
Tennis
#Unity ML-Agentsの仕組み
移動したり、ジャンプしたりするAgentsはBrainとAcademyによって動作が制御されています。
BrainTypeがPlayerのときは人間が動かすことができ、Internalのときは学習済みモデルによって自動で動きました。
ExternalにするとPython APIを使用して、オープンソケットを介して通信することで、外部から行動を制御できます。
これを使って、強化学習を実際にやってみましょう。
#ビルドして強化学習
WallSceneの隣にあるPushSceneを使います
Pushの場合はオレンジの箱を緑のところに持っていけばゴールです。
GitHubのリポジトリをダウンロード。その中のPythonフォルダをいまのプロジェクトにコピーします。(Assetsの外)
次にBrainTypeがExternalになっていることを確認
Edit > Project Settings > Player からResolution and Presentationタブを開く。
Run In BackGround にチェック
Display Resolution Dialog をDisabled
にする
その後、設定を確認してビルド。保存先は先ほどのPythonフォルダ。名前はAreaPushにしておきましょう。
PythonフォルダでAnacondaプロンプトを開きます。
python ppo.py AreaPush --train
これで学習が開始します。
オプションで--max-steps=1e5
といった感じで学習回数を決められます。デフォルトでは1e6(100万回)
--load
などで途中から学習を再開できます。
詳しくはppo.pyを見てみてください。
学習が完了するとmodelsというフォルダが作成され、その中のppo
フォルダにAreaPush.bytesファイルが生成されていると思います。
これをUnityのArea > TFModelsフォルダにコピーしましょう
前のときと同様BrainTypeをInternalにし、Graph ModelにAreaPushファイルをセット
#結果
10万回学習
緑のところがゴールということは理解してますが、オレンジの箱がどう関係しているかはわかっていない様子。
50万回学習
オレンジの箱をゴールに持っていくのを理解した模様
Unityは無料で使え、誰でもクオリティの高いゲームを作ることができるソフトです。
チュートリアル以外にも自分でゲームを作ったり、ほかの人が作ったゲームで強化学習を行うこともできます。
#参考