見出し画像

Unity ML-Agents 0.14.0 のチュートリアル (1)

1. Unity ML-Agents

「Unity ML-Agents」は、Unity で「強化学習」の「環境」を構築し、「エージェント」の学習および推論を行うためのフレームワークです。サンプルの学習環境「3DBall」を使って、学習および推論の手順を解説します。

Unity ML-Agents

前バージョンからの変更点は、「UnitySDKフォルダ」が、「com.unity.ml-agentsフォルダ」と「Projectフォルダ」に分離した部分になります。

2. Unity ML-Agentsの学習アルゴリズム

Unity ML-Agentsで利用可能な学習アルゴリズムは次のとおりです。

◎ 強化学習(PPO, SAC)
・エージェントは経験から学ぶ。
・最適になるまで多くの試行錯誤が必要で時間がかかる。
・人間を超える能力を得ることができる。

◎ 模倣学習(BG, GAIL)
・エージェントはデモンストレーションから学ぶ。
・行動をすばやく模倣できる。
・人間に似た能力を得ることができる。

◎ 強化学習+模倣学習
・エージェントは経験とデモンストレーションを通じて学ぶ。
・エージェントはデモンストレーションを使用してよりよく探索。
・エージェントは経験を活用してデモンストレーションを改善。

◎ その他の学習方法
・RNN / LSTM
・ICM (Intrinsic Curiosity Module)
・カリキュラム学習
・On-Demand Decision
・汎化トレーニング
・マルチプロセッシング(Unity環境のインスタンスの複数起動)
・マルチGPU

2. Unityの開発環境のインストール

「Unity ML-Agents」を利用するには、「Unity 2018.4」以降が必要になります。今回は「2019.3.0f1」を使っています。以下のサイトからダウンロード後、インストールしてください。

Unityのダウンロード

◎ Unity ML-Agentsのリポジトリのダウンロード
「Unity ML-Agents」のリポジトリには、
・強化学習の環境を作成するためのUnityアセット
・強化学習の学習を行うためのPythonスクリプト
が含まれています。

以下のコマンドで、リポジトリをクローンします。

$ git clone https://github.com/Unity-Technologies/ml-agents.git -b 0.14.0

ml-agentsフォルダが生成されます。

◎ ml-agentsのフォルダ構成
ml-agentsフォルダのフォルダ構成は、次のとおりです。

com.unity.ml-agents : 強化学習の環境を作成するためのUnityアセット
・Projectフォルダ : サンプルプロジェクト
・notebooksフォルダ : サンプルノートブック
・ml-agentsフォルダ : 強化学習の学習を行うPythonパッケージ
・ml-agents-envsフォルダ : Unity環境とml-agentsパッケージ間のインタフェースとなるPythonパッケージ
・configフォルダ: 学習のハイパーパラメータを指定するファイル
・gym-unityフォルダ: OpenAI Gymと連携するためのパッケージ
・docsフォルダ: ドキュメント

◎ Pythonの仮想環境の作成
「Unity ML-Agents」では「Python 3.6.1」以降が必要です。今回は「Anaconda」で「Python 3.6.1」の仮想環境を作成します。

$ conda create -n mlagents python=3.6.1
$ conda activate mlagents

Pythonパッケージ「ml-agents」「ml-agents-env」をインストールするには、mlagentsのルートで以下のコマンドを入力します。

cd ml-agents-envs
pip install -e ./
cd ..
cd ml-agents
pip install -e ./
cd ..

3. Unity ML-Agentsのプロジェクトの準備

「Unity ML-Agents」のプロジェクトの準備の手順は、次のとおりです。

(1) Unityを起動し、Unityのプロジェクトを「3D」で新規作成。
(2) メニュー「WindowPackage Manager」を開き、「Add package from disk」を選択し、「com.unity.ml-agents/package.json」を選択。

画像1

画像2

◎ Unityアセット内のフォルダ構成 
Uniryアセット(Packages/ML Agents)内のフォルダ構成は、次のとおりです。

・Editorフォルダ : エディタ関連のスクリプト
・Pluginsフォルダ : Unity ML-Agentsの各種プラグイン
・Resourcesフォルダ : Unity ML-Agentsの各種リソース
・Runtimeフォルダ : Unity ML-Agentsの各種スクリプト
・Testフォルダ : Unity ML-Agentsのテスト用のスクリプト

4. サンプルの学習環境の準備

「Unity ML-Agents」が提供しているサンプルの学習環境の1 つ「3DBall」を準備します。台の傾きでバランスを取り、ボールを落下させないようにキープする学習環境です。

サンプルの学習環境の準備の手順は、次のとおりです。

(1) 「Project/Assets」にある「ML-Agents」を作成したプロジェクトのAssets下にコピー。

(2) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Scene」にあるシーン「3DBall」を開く。

画像3

5. Pythonスクリプトによる学習

「Pythonスクリプト」を使って「サンプルの学習環境」を学習を行います。学習が完了すると「推論モデル」が生成されます。

(1) Pythonの仮想環境で、「ml-agents」のルートに移動し、「mlagents-learn」コマンドで「学習」を開始。

「mlagents-learn」の書式は次のとおりです。

$ mlagents-learn <学習コンフィグファイルのパス> --run-id=<実行ID> --train

「コンフィグファイル」は学習用のハイパーパラメータをまとめたyamlファイルで、「ml-agents/config/trainer_config.yaml」にあります。
「実行ID」は異なる訓練結果を分離するために使用する任意の文字列です。
「--train」は推論でなく学習であることを指定します。

今回は、ml-agentsのルートで次のようにコマンドを入力します。

$ mlagents-learn ./config/trainer_config.yaml --run-id=firstRun --train

以下のようなログが表示されます。


                       ▄▄▄▓▓▓▓
                 ╓▓▓▓▓▓▓█▓▓▓▓▓
            ,▄▄▄m▀▀▀'  ,▓▓▓▀▓▓▄                           ▓▓▓  ▓▓▌
          ▄▓▓▓▀'      ▄▓▓▀  ▓▓▓      ▄▄     ▄▄ ,▄▄ ▄▄▄▄   ,▄▄ ▄▓▓▌▄ ▄▄▄    ,▄▄
        ▄▓▓▓▀        ▄▓▓▀   ▐▓▓▌     ▓▓▌   ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌  ╒▓▓▌
      ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓      ▓▀      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌   ▐▓▓▄ ▓▓▌
      ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄     ▓▓      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌    ▐▓▓▐▓▓
        ^█▓▓▓        ▀▓▓▄   ▐▓▓▌     ▓▓▓▓▄▓▓▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▓▄    ▓▓▓▓`
          '▀▓▓▓▄      ^▓▓▓  ▓▓▓       └▀▀▀▀ ▀▀ ^▀▀    `▀▀ `▀▀   '▀▀    ▐▓▓▌
             ▀▀▀▀▓▄▄▄   ▓▓▓▓▓▓,                                      ▓▓▓▓▀
                 `▀█▓▓▓▓▓▓▓▓▓▌
                      ¬`▀▀▀█▓

      
Version information:
 ml-agents: 0.14.0,
 ml-agents-envs: 0.14.0,
 Communicator API: API-14,
 TensorFlow: 2.0.1
INFO:mlagents_envs:Listening on port 5004. Start training by pressing the Play button in the Unity Editor.

「Start training by pressing the Play button in the Unity Editor」(Unity EditorのPlayボタンを押して訓練を開始してください)と表示されたら準備完了です。

(2) UnityのPlayボタン(▶)を押して学習開始。
最初のうちはボールを落としますが、徐々に上達する様子が見れます。

画像4

ログには「Mean Reward」(平均報酬)と「Std of Reward」(標準偏差)が出力されます。

INFO:mlagents.trainers: firstRun: 3DBall: Step: 12000. Time Elapsed: 13.605 s Mean Reward: 1.190. Std of Reward: 0.727. Training.
INFO:mlagents.trainers: firstRun: 3DBall: Step: 24000. Time Elapsed: 26.395 s Mean Reward: 1.291. Std of Reward: 0.813. Training.
INFO:mlagents.trainers: firstRun: 3DBall: Step: 36000. Time Elapsed: 38.185 s Mean Reward: 1.642. Std of Reward: 1.178. Training.
INFO:mlagents.trainers: firstRun: 3DBall: Step: 48000. Time Elapsed: 49.660 s Mean Reward: 2.331. Std of Reward: 1.684. Training.
 :

50000ステップ(学習コンフィグファイルの初期設定)に達すると学習完了です。十分学習できているようであれば、「Control+C」で中断しても良いです。「ml-agents/models/firstRun/3DBall.nn」に「推論モデル」が出力されています。

6. Unityでの推論モデルの実行

「推論モデル」の利用手順は次の通りです。

(1) 推論モデル「3DBall.nn」をプロジェクトの「Assets」にコピー。
(2) Projectウィンドウで「Assets/ML-Agents/Examples/3DBall/Prefabs」にある「3DBall」を選択し、Inspectorで「Open Prefab」をクリック。

画像7

(3)プレハブ「3DBall」内の「Agent」を選択し、Inspectorで設定を確認。

画像7

画像7

「Agent」(今回はBall 3D Agent)は強化学習のエージェント情報を管理するコンポーネントです。シーン「3DBall」内には12個のプレハブ「3DBall」のインスタンスが存在します。12個すべてのインスタンスの「Agent」に対して設定更新する代わりに、プレハブ「3DBall」でまとめて更新できます。

(4)「Agent」の「Behavior Parameters」の「Model」に、「3DBall.nn」をドラッグ&ドロップ。
(5) UnityのPlayボタン(▶ボタン)を押して推論開始。

推論が実行され、ボールがバランスをとる様子を見ることができます。
「学習を行うPythonスクリプト」が実行されているかどうかに応じて、UnityのPlayボタンで学習と推論のどちらが実行されるかが決まります。

画像8



この記事が気に入ったらサポートをしてみませんか?