Unity MLトレーニング学習環境構築(初級編)part3
0.はじめに
本記事では、「ml-agents-release_3(2020年6月10日発売)」のリリースを使って、Unityで "ボール(Agent)" が "ボックス(Target)" を追いかけるトレーニング環境を、全3回に渡って構築していきます。
第3回は、トレーニングと推論です。
1.Trainer Config YAML
トレーニング用のハイパーパラメータは、"mlagents-learn"プログラムに渡す構成ファイルで指定されている。その設定を以下のように行う。
(1)rollerball_config.yamlの設定
①メモ帳(その他テキストエディタ)を開く
②次のコードを入力し、「UnityRollerBall → ml-agents-release-3 → config」内に『rollerball_config.yaml』と名前を付けて保存する。
behaviors:
RollerBall:
trainer_type: ppo
hyperparameters:
batch_size: 10
buffer_size: 100
learning_rate: 3.0e-4
beta: 5.0e-4
epsilon: 0.2
lambd: 0.99
num_epoch: 3
learning_rate_schedule: linear
network_settings:
normalize: false
hidden_units: 128
num_layers: 2
reward_signals:
extrinsic:
gamma: 0.99
strength: 1.0
max_steps: 500000
time_horizon: 64
summary_freq: 10000
3.Pythonを使用したトレーニング
(1)"Anaconda Prompt"を開く
(1.5)Anaconda内のライブラリを更新し、最新のバージョンと対応できるようにする。以下のコマンドを入力し、更新を行う。
conda update --all
(2)環境をアクティブ化する
conda activate rollerball
(3)「ml-agents-release-3」ディレクトリに移動する
cd UnityRollerBall/ml-agents-
(4)次のコマンドを入力して、学習を始める準備をする
mlagents-learn config/rollerball_config.yaml --run-id=RollerBall
コマンド解説:
・mlagents-learn
トレーニングを実行するPythonプログラム
・config/rollerball_config.yaml
構成ファイルへの相対パス
・--run-id=RollerBall
このラウンドのトレーニングに付けるために選択した任意の名前
(5)Unityを実行する
プロンプトが下図のようになったら、スタートの合図です。Unityに戻って実行ボタンを押すと学習が開始されます。
実行したては、ボールが"Floor"の外に向かっているのが分かると思います。
20000ステップ後です。ボールが落ちることなくボックスに向かっているのが分かると思います。
(6)学習を終了する
プロンプトの方で「Ctrl + C」、またはUnityの方で、実行ボタンを押して止めます
終了するとプロンプトが次の図のようになり、赤枠で囲まれた部分が『推論モデル』の保存先+データ名となる。
保存先:results → RollerBall
保存名:RollerBall.nn (←nn形式が推論モデル)
4.『推論モデル』を使って実行
【3.Pythonを使用したトレーニング】でトレーニングしたニューラルネットワークを使用してボール(Agent)自身が決定を下して動きます。また、これにより、Pythonによる操作も必要なくなります。
(1)『推論モデル』をUnityにコピー
①プロジェクトウィンドウの「Assets」内に、「result → RollerBall」の中にある、『RollerBall.nn』をドラッグしてコピーする。
(2)プレハブに組み込む
①インスペクタウィンドウの"RollerAgent"を選択し、インスペクタウィンドウ内の「Behavior Parameters(Script) → Model」に先ほど保存した『RollerBall.nn』をドラッグして追加する。
(3)実行
実行すると、ボール(Agent)がボックス(Target)を追いかけていくようになります。もちろん、落ちたらボールが中央に戻り、再び追いかけます。