クリスマスはUnity ML-AgentsでAI(愛)を育む


ML-Agentsとは

Q: ML-Agentsって何ですか?彼女ができるんですか?

A: ML-Agentsは、いま流行りのAIを作るための機械学習環境をUnityで構築することができる便利ツールだよ。

機械学習でAIを作るというと難しそうだと思うかもしれないけど、ML-Agentsでは最低限の前提知識さえ身につけておけば拍子抜けする程かんたんにAIを作ることができてしまうんだ。

さあ、みんなもML-AgentsでAI(愛)を育もう!

開発環境

当記事では以下の環境で動作を確認しました。

  • Windows10

  • Unity 2018.2.2f1 ※Unity 2017.4以降であればOK (2018/12/25現在)

  • Anaconda3-5.3.1 + Python 3.6.7 (2018/12/25現在)

  • ML-Agents v0.6.0

前提知識

ML-Agentsを使い始める前に知っておくといい前提知識を以下の記事にまとめました。

Unity ML-Agents 前提知識まとめ

環境構築

環境構築については以下の記事にまとめました。

Unity ML-Agents 環境構築(v0.6.0対応)

囲碁ゲームを作る

作成した囲碁ゲームはGitHubに置いてあるので、実際に動かしたい人はダウンロードしてください。

強化学習を使ったトレーニング

1. Anaconda Promptを起動
2. 仮想環境を有効化
3. ハイパーパラメータを設定
4. 学習開始コマンドを実行
5. Unityでゲームスタート

Anaconda Promptを起動

スタート -> すべてのプログラムの中にあるAnaconda3フォルダを開き、Anaconda Promptを起動します。

仮想環境を有効化

仮想環境を有効化するには以下のコマンドを実行してください。

activate mlagents

ハイパーパラメータを設定

ml-agents/config/ にある trainer_config.yaml に学習を最適化するための各種パラメータを設定していきましょう。

学習用のBrainオブジェクト名に対してパラメータの値を設定すればいいのですが、パラメータ値の調整は機械学習に精通している人でも難しいとされているところです。

とりあえず適当に以下の値を設定して後から調整していきましょう!

trainer_config.yaml

GoGameLearningBlack:
    batch_size: 256
    buffer_size: 2048
    learning_rate: 5.0e-3
    hidden_units: 32
    num_layers: 3
    beta: 5.0e-3
    gamma: 0.9
    max_steps: 5.0e5
    summary_freq: 1000
    time_horizon: 1000

GoGameLearningWhite:
    batch_size: 256
    buffer_size: 2048
    learning_rate: 5.0e-3
    hidden_units: 32
    num_layers: 3
    beta: 5.0e-3
    gamma: 0.9
    max_steps: 5.0e5
    summary_freq: 1000
    time_horizon: 1000

これをtrainer_config.yamlの末尾に追記してください。

この設定をしておかないと、学習開始コマンドを実行するときに 「そんなBrainオブジェクト存在しないよ」 とAnaconda Promptちゃんに振られてしまいます。気を付けましょう。

学習開始コマンドを実行

ハイパーパラメータの設定が出来たところで以下のコマンドを実行します。

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

Unityのロゴが表示されたらOKです!

Unityでゲームスタート

Start training by pressing the Play button in the Unity Editor.

このメッセージがAnaconda Promptに表示された後、Unity側から再生ボタンを押すことで強化学習を開始することができます!

学習が始まるとAnaconda Promptに1000ステップ毎、エージェントが得た報酬のログが出力されます。

Mean Reward の値が継続して増加していれば学習が上手くいっています(100万ステップ以上学習しないと増加しないこともあります)

途中で学習をやめたいときは、Ctrl + Cを押すことで途中までの学習結果をモデルファイルとして出力してくれます。

学習の様子

強化学習したAIと対局してみる

それでは、強化学習によって得た血と涙の結晶(モデルファイル) をUnity側で設定して対局してみましょう!

まずは、Unity側でモデルファイルを入れるModelsフォルダ を作ってください。

次に、ml-agents/models/GoGame-0 の中にbytes形式のファイルが2つ生成されていることを確認しましょう。

そして、それをUnity側のModelsフォルダ にドラッグ&ドロップしてインポートします(Modelsフォルダが無ければ作ってください)

ここまで出来たら、次はUnity側でBrainの設定をしていきましょう。

UnityのProjectビューのBrainフォルダの中にはGoGameLearningBlack, GoGameLearningWhiteという2つのBrainがあるので、1回だけクリックして設定画面をInspectorに出してください。

Modelの箇所にBrain名と同じファイル名のbytesファイルを指定することで、AIの頭脳 をセットしたことになります!

よーし!そんじゃ対局するでー! ...と言いたいところですが、まだ設定することがあるので、もう少しだけお付き合いください><

実はここまで、人間がプレイしない前提の設定で進めていたため、このまま実行すると上手く動きません。

そのため、学習用設定からプレイ用設定に切り替えるには以下の3つの設定を変更する必要があります。

  • GoAcademyのcontrolのチェックを全部外す
  • GoAcademyのisPlayModeのチェックを入れる

  • GoAgent1のBrain項目にGoGamePlayer(PlayerBrain)を指定する

※現在の仕様では、人間側はGoAgent1(後攻)でプレイすることしかできません。ご了承ください。

これでプレイ用の設定が完了しました!

Unityでゲームを実行して、AIが初手を打ってきたら対局開始成功です!

参考文献

  • Unity ML-Agents公式リポジトリ
  • 布留川 英一『Unityではじめる機械学習・強化学習 Unity ML-Agents実践ゲームプログラミング』(ボーンデジタル、2018)