【Unity】ML-Agentsで機械学習を実践する!|Macでの環境構築と学習方法
世の中では様々なAIを利用したサービスが普及し始めています。そのAIの基礎となるのが「機械学習」です。
そんな機械学習をUnityでも簡単に利用することができます!
今回はUnityの機械学習ツールである「ML-Agents」という機械学習用のツールの環境構築方法とサンプルシーンの動かし方をご紹介します。
ML-Agentsとは
ML-Agents(Unity Machine Learning Agents)ツールキットはゲームやシミュレーションで機械学習を利用するためのオープンソースプラグインです。エージェント(機械学習によってトレーニングされるオブジェクト)の学習には「強化学習」や「模倣学習」など、Python APIによる様々な機械学習を利用することが可能です。
参考記事)Unity機械学習
つまり、ML-Agentsを用いることで機械学習の難しい理論を詳しく理解していなくても簡単に機械学習を利用することができるということです。
今回はMacでの環境構築方法を詳しくご紹介していきます。
その中でGitやpipのようなツールを使用しますが、ここでは詳しく解説致しませんのでご了承ください。
※Unityをまだダウンロードしていない方は以下記事をご参考ください。
参考記事)Unityセットアップについて
参考記事)Unity Hubについて
環境構築(Mac)
それではここからMacでの環境構築方法についてご紹介していきます。
簡単に手順をご紹介しておくと、以下のような流れになります。
- GitからML-Agents Toolkitをダウンロード
- Python&ML-Agentsパッケージをダウンロード
以上の作業が済んだら実際にML-Agentsのサンプルシーンを元に解説をしていきます。
GitからML-Agents Toolkitをダウンロードする
GitからML-Agents Toolkitをダウンロードします。
まずはじめにターミナルを開いて任意のディレクトリを作成してください。
ここでは「ML-Agents-Sample」という名前のディレクトリを作成します。続けて作成したディレクトリに移動してください。
1 2 |
$ mkdir ML-Agents-Sample $ cd ML-Agents-Sample |
次にGitからML-Agentsをダウンロードします。
1 |
$ git clone https://github.com/Unity-Technologies/ml-agents.git |
これによってML-Agentsのダウンロードが完了しました。
Python&ML-Agentsパッケージをダウンロードする
次にPython3.6をダウンロードしていない方は下記リンクからダウンロードしてください。
ML-AgentsはPython3.5もしくはPython3.7では利用することができませんのでご注意ください。
Pythonをインストール済みだけど自分のバージョンがわからないという方は下記コマンドでバージョンを確認できます。
1 |
$ python --version |
次にPythonのML-Agentsパッケージをダウンロードします。
1 |
pip3 install mlagents |
ここまでの操作に関して、以下コマンドを実施してUnityのロゴが表示されれば問題ありません。
1 |
mlagents-learn --help |
最後にml-agentsディレクトリ内の「ml-agents」「ml-agents-env」の2つのディレクトリにそれぞれ移動して以下のコマンドを実行してください。
1 |
$ pip3 install -e ./ |
これで環境構築は完了です。
サンプルを実行する
いよいよ実際にML-Agentsを動かしてみたいと思います。
まずは学習済みのサンプルを利用して動きを見てみましょう。
ml-agentsディレクトリ内のUnitySDKをUnityアプリケーションで開いてください。
次にサンプルシーンを開きます。
ML-Agents→Example→Scenes→3DBallを開いてください。
開いたら実行して動きを確認してみましょう。
ボールを落とさないように板がバランスを取っていることがわかりますね。
これはすでに学習されたモデルを用いています。ここからは自分で学習させてモデルを作成します。
実際に学習させる
それでは学習方法をご紹介します。
ヒエラルキーウィンドウのBall3DAcademyを選択してください。
次にインスペクターウィンドウのControlにチェックを入れてください。これによって学習モードになりました。
続けてターミナルでの操作です。
ml-agentsディレクトリ(親ディレクトリ)に移動して以下コマンドを実行してください。
1 |
$ mlagents-learn ../config/trainer_config.yaml --run-id=firstRun --train |
ターミナルに以下のような出力があれば問題ありません。
コマンドを実行したらUnityエディタで実行します。
これで学習が開始します。
ゲームビューでは学習中の過程を見ることができます。
デフォルトの試行回数は50,000回で10分かからないくらいで学習が終了すると思います。
ここで学習したモデルは「ml-agents-envs/models/firstRun-0/3DBallLearning.nn」として保存されます。
このモデルをFinderもしくはターミナルを利用して名前を変更し、Examples→3DBall→TFModelに複製してください。
ここでは名前を「3DBallLearning_50000.nn」に変更して複製します。
複製したモデルをBrainに適用します。
プロジェクトウィンドウのBrainsディレクトリの3DBallLearningを選択してください。次にModelを先ほど複製してきた3DBallLearning_50000.nnに変更します。
最後にヒエラルキーウィンドウのBall3DAcademyを選択して一番最初にチェックを入れたControlのチェックを外して実行すれば、学習させたモデルを実行することができます。
デフォルトのモデルも50,000回試行した結果ですので挙動は変わりません。
そこで試行回数を減らすとどのような変化が見られるのかを確認してみましょう。
試行回数を変更する
先ほどのボールを落とさないようにするサンプルを例に試行回数を変更してみましょう。
試行回数はml-agents→config→trainer_config.yamlファイルを編集することで変更することができます。
以下の例ではmax_steps(試行回数)を5.0e3(5,000回)に設定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
default: trainer: ppo batch_size: 1024 beta: 5.0e-3 buffer_size: 10240 epsilon: 0.2 hidden_units: 128 lambd: 0.95 learning_rate: 3.0e-4 max_steps: 5.0e3 memory_size: 256 normalize: false num_epoch: 3 num_layers: 2 time_horizon: 64 sequence_length: 64 summary_freq: 1000 use_recurrent: false vis_encode_type: simple reward_signals: extrinsic: strength: 1.0 gamma: 0.99 〜以下省略〜 |
まずは試行回数を5,000回に変更した場合の結果は以下の通りです。
5,000回だと挙動が安定しないことがわかります。
次に100,000回に変更して実行してみましょう。
5,000回に比べると圧倒的に挙動が安定していることがわかります。
このように試行回数を変更するだけでも結果に大きな差が出ることがわかります。
そもそも何をやっているのかいまいちわからないという方もいらっしゃると思いますが、一旦ここでは勉強時間の違いくらいの認識で問題ありません。今回使用しているアルゴリズムはPPO(Proximal Policy Optimization)アルゴリズムというものでOpenAIが発表した強化学習アルゴリズムの一種です。
詳しくは以下記事をご参考ください。
参考記事)PPOアルゴリズムについて
その他のサンプルを試す
3DBallのサンプルだけでなく他のサンプルでも試行回数を変化させて学習結果の違いを確認してみましょう。
Tennis
Pyramids
Walker
Banana
Soccer
以上のように試行回数によって結果に大きな違いが出ることや、動作の難易度によって同じ試行回数でも精度に差が出ていることがわかります。
※今回の検証ではイプシロン等のパラメータを全て同じ値にして試行回数のみを変更しています。
まとめ
いかがでしたでしょうか。
今回はUnityで機械学習を扱うことができる「ML-Agents」の使い方についてご紹介してきました。
サンプルシーンで実験してみるだけでも機械学習の面白さに気づくことができたのではないでしょうか。
本記事ではアルゴリズムに関する解説はしておりませんが、次回以降の記事にて詳しく解説していきたいと思っておりますので乞うご期待ください。
参考記事)Unity ML-Agents
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!