【Unity】ML-Agentsで機械学習を実践する!|Macでの環境構築と学習方法


世の中では様々なAIを利用したサービスが普及し始めています。そのAIの基礎となるのが「機械学習」です。

そんな機械学習をUnityでも簡単に利用することができます

今回はUnityの機械学習ツールである「ML-Agents」という機械学習用のツールの環境構築方法とサンプルシーンの動かし方をご紹介します。

ML-Agentsとは

Unity-ML-Learning

ML-Agents(Unity Machine Learning Agents)ツールキットはゲームやシミュレーションで機械学習を利用するためのオープンソースプラグインです。エージェント(機械学習によってトレーニングされるオブジェクト)の学習には「強化学習」や「模倣学習」など、Python APIによる様々な機械学習を利用することが可能です。

参考記事)Unity機械学習

つまり、ML-Agentsを用いることで機械学習の難しい理論を詳しく理解していなくても簡単に機械学習を利用することができるということです。

今回はMacでの環境構築方法を詳しくご紹介していきます。

その中でGitやpipのようなツールを使用しますが、ここでは詳しく解説致しませんのでご了承ください。

※Unityをまだダウンロードしていない方は以下記事をご参考ください。

参考記事)Unityセットアップについて

参考記事)Unity Hubについて

環境構築(Mac)

それではここからMacでの環境構築方法についてご紹介していきます。

簡単に手順をご紹介しておくと、以下のような流れになります。

  1. GitからML-Agents Toolkitをダウンロード
  2. Python&ML-Agentsパッケージをダウンロード

以上の作業が済んだら実際にML-Agentsのサンプルシーンを元に解説をしていきます。

GitからML-Agents Toolkitをダウンロードする

GitからML-Agents Toolkitをダウンロードします。

まずはじめにターミナルを開いて任意のディレクトリを作成してください。

ここでは「ML-Agents-Sample」という名前のディレクトリを作成します。続けて作成したディレクトリに移動してください。

次にGitからML-Agentsをダウンロードします。

これによってML-Agentsのダウンロードが完了しました。

Python&ML-Agentsパッケージをダウンロードする

次にPython3.6をダウンロードしていない方は下記リンクからダウンロードしてください。

Pythonダウンロードページ

ML-AgentsはPython3.5もしくはPython3.7では利用することができませんのでご注意ください。

Pythonをインストール済みだけど自分のバージョンがわからないという方は下記コマンドでバージョンを確認できます。

次にPythonのML-Agentsパッケージをダウンロードします。

ここまでの操作に関して、以下コマンドを実施してUnityのロゴが表示されれば問題ありません。

ML-Agentsのインストール確認
Unityロゴを確認できればOK

最後にml-agentsディレクトリ内の「ml-agents」「ml-agents-env」の2つのディレクトリにそれぞれ移動して以下のコマンドを実行してください。

これで環境構築は完了です。

サンプルを実行する

いよいよ実際にML-Agentsを動かしてみたいと思います。

まずは学習済みのサンプルを利用して動きを見てみましょう。

ml-agentsディレクトリ内のUnitySDKをUnityアプリケーションで開いてください。

UnitySDKを開く

次にサンプルシーンを開きます。

ML-Agents→Example→Scenes→3DBallを開いてください。

3dBallシーン

開いたら実行して動きを確認してみましょう。

3DBallサンプルの実行結果

ボールを落とさないように板がバランスを取っていることがわかりますね。

これはすでに学習されたモデルを用いています。ここからは自分で学習させてモデルを作成します。

実際に学習させる

それでは学習方法をご紹介します。

ヒエラルキーウィンドウのBall3DAcademyを選択してください。

次にインスペクターウィンドウのControlにチェックを入れてください。これによって学習モードになりました。

Controlにチェック

続けてターミナルでの操作です。

ml-agentsディレクトリ(親ディレクトリ)に移動して以下コマンドを実行してください。

ターミナルに以下のような出力があれば問題ありません。

学習開始

コマンドを実行したら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のチェックを外して実行すれば、学習させたモデルを実行することができます。

3DBallLearning_50000の実行結果
3DBallLearning_50000の実行結果

デフォルトのモデルも50,000回試行した結果ですので挙動は変わりません。

そこで試行回数を減らすとどのような変化が見られるのかを確認してみましょう。

試行回数を変更する

先ほどのボールを落とさないようにするサンプルを例に試行回数を変更してみましょう。

試行回数はml-agents⁩→config⁩→trainer_config.yamlファイルを編集することで変更することができます。

以下の例ではmax_steps(試行回数)を5.0e3(5,000回)に設定しています。

まずは試行回数を5,000回に変更した場合の結果は以下の通りです。

3DBallLearning_5000の実行結果
3DBallLearning_5000の実行結果

5,000回だと挙動が安定しないことがわかります。

次に100,000回に変更して実行してみましょう。

3DBallLearning_100000の実行結果
3DBallLearning_100000の実行結果

5,000回に比べると圧倒的に挙動が安定していることがわかります。

このように試行回数を変更するだけでも結果に大きな差が出ることがわかります。

そもそも何をやっているのかいまいちわからないという方もいらっしゃると思いますが、一旦ここでは勉強時間の違いくらいの認識で問題ありません。今回使用しているアルゴリズムはPPO(Proximal Policy Optimization)アルゴリズムというものでOpenAIが発表した強化学習アルゴリズムの一種です。

詳しくは以下記事をご参考ください。

参考記事)PPOアルゴリズムについて

その他のサンプルを試す

3DBallのサンプルだけでなく他のサンプルでも試行回数を変化させて学習結果の違いを確認してみましょう。

Tennis

Pyramids

Walker

Banana

Soccer

以上のように試行回数によって結果に大きな違いが出ることや、動作の難易度によって同じ試行回数でも精度に差が出ていることがわかります。

※今回の検証ではイプシロン等のパラメータを全て同じ値にして試行回数のみを変更しています。

まとめ

いかがでしたでしょうか。

今回はUnityで機械学習を扱うことができる「ML-Agents」の使い方についてご紹介してきました。

サンプルシーンで実験してみるだけでも機械学習の面白さに気づくことができたのではないでしょうか。

本記事ではアルゴリズムに関する解説はしておりませんが、次回以降の記事にて詳しく解説していきたいと思っておりますので乞うご期待ください。

 

参考記事)Unity ML-Agents


この記事はいかがでしたか?よければシェアをお願いします。

Furui