はじめに
Unity環境で強化学習ができる「ML-Agents」が気になっていたので試してみることにしました。
今回は公式の手順に沿って環境構築から学習まで行った内容を記載します。
[Unity ML-Agents Toolkit]
準備
作業は全てWindows10で行いました。
ML-Agentsのバージョンとしては、Release20がちょうど出たばかりのようでしたが、
今回はRelease19(現時点でのlatest sbable版)を使用しました。
まず、以下からML-Agents一式を取得して適当な場所に展開。
GitHub - Unity-Technologies/ml-agents at release_19
Unity Hubを起動してプロジェクトの「開く」プルダウンで「ディスクから加える」を選び、上で展開したフォルダ内の"Project"を指定。これをUnityエディタで開けばOK。
Python側の準備としては、Anacondaでpython3.7の環境を作成し、以下をインストール。
pip3 install torch~=1.7.1 -f https://download.pytorch.org/whl/torch_stable.html
python -m pip install mlagents==0.28.0
学習環境の作成
以下の手順に沿って簡単な学習環境を作成してみました。ボールを箱にぶつけるだけのシンプルなタスクです。
C#スクリプトにてAgentクラスを継承し、観測や報酬、エピソード終了条件などを記述します。
(Unityエディタ上のインスペクタでも学習に関するパラメータをいくつか設定します)
最後に、作成した環境をPrefab化して複製することで、経験の収集を並行して進められるようになり学習を効率化できます。
学習・テスト
学習のハイパーパラメータをyamlファイルに記述し、以下のコマンドを実行します。
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall
そして、Unityエディタで再生を押すと学習が開始します。(学習中の様子↓)
学習中の報酬の推移等はTensorBoardで表示可能です。
学習終了後、生成されるonnxファイルをAgentにアタッチすると学習後の動きを確認できます。
Environment Executable
学習環境をビルドして実行する方法も試しました。手順は以下の通りです。
学習中の様子↓
今回はWindows向けにビルドして実行しましたが、これをLinux用にビルドしてGPUサーバ等に持って行くことで、学習をより高速化できるものと思います。
おわり
Unity ML-Agentsで環境作成と学習を動かしてみました。
今回のはごく単純なタスクですが、もっと複雑なゲーム環境への適用も時間があれば試してみたいです。