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 環境構築(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
を押すことで途中までの学習結果をモデルファイルとして出力してくれます。
学習の様子
ML-Agents v0.6.0で囲碁ゲーム作ってみた動画 part1
— 欧米か@詰碁アプリ公開中! (@oubeika11) 2018年12月22日
これは大体50000Stepくらい学習してる状態! pic.twitter.com/nIZjAfvbXy
ML-Agents v0.6.0で囲碁ゲーム作ってみた動画 part2
— 欧米か@詰碁アプリ公開中! (@oubeika11) 2018年12月22日
これは大体350000Stepくらい学習してる状態!
あんまり変わってないように見えるけど、TensorBoardを見る限りは少し賢くなってる! pic.twitter.com/75H0Lv36r3
強化学習した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)