Unityの機械学習フレームワーク
ML-Agents
1
1. 機械学習/強化学習 入門
2
機械学習とは? 強化学習とは?
3
機械学習(Machine Learning)は人工知能技術の一分野。
強化学習(Reinforcement Learning)は機械学習の一分野。
人工知能
機械学習
強化学習
etc…
教師あり学習
教師なし学習
機械学習をゲームに使うメリット/デメリット
 メリット
 自動でAIを作れる
 複雑な動きをするAIが
作れる
 デメリット
 直打ちのAIと異なり、
AIの学習フェーズが必要
 人間から見て、AIの内部
がどのようになっている
か理解しにくい
→デバッグ困難
 プログラミング、調整が
難しい
4
強化学習とは?
ざっくり言うと、Agentが試行錯誤を繰り返して、
ある状態(HPや座標など)における最適な行動はどれか?
を求める機械学習アルゴリズム。
5
状態:盤上の駒
行動:どこの駒を動かす?
状態:キャラの位置,HP…
行動:攻撃?防御?
強化学習の学習アルゴリズム
Agentは報酬の総和を最大化することを目標に学習を行う。
Agentに与える報酬は、 Agentが
正しい行動をした場合 → 正
間違った行動をした場合 → 負
にする。
具体的な値は勘で適当に決める。
6
定式化
 目的関数
𝜽∗ = maxarg
𝜽
𝑅𝑡 , 𝜽は𝒔 → 𝒂の写像関数の内部パラメータ
 累積報酬
𝑅𝑡 =
𝑡=0
𝑇
𝛾 𝑡
𝑟 𝒔 𝒕, 𝒂 𝒕, 𝒔 𝒕+𝟏 , 𝛾は割引率 0 < 𝛾 < 1
 状態価値関数
𝑣 𝜋 𝒔 = 𝔼 𝜋 𝑅𝑡|𝒔 𝟎 = 𝒔
 行動価値関数
𝑞 𝜋
𝒔, 𝒂 = 𝔼 𝜋
𝑅𝑡|𝒔 𝟎 = 𝒔, 𝒂 𝟎 = 𝒂
現在の時刻を𝑡 = 0とし、未来に渡って得られる報酬の(重み付き)和を
現在の状態の価値として考える。過去に得られた報酬は考えない。
7
𝒔 𝟎 𝒔 𝟐𝒔 𝟏 … 𝒔 𝑻𝒂 𝟎 𝒂 𝟏 𝒂 𝟐
𝑟0 𝑟1 𝑟𝑇
未来
今
強化学習の具体的なモデル
 Q-Learning
 Q-Network (Actor Critic)
ML-Agentsで使用できるモデル ?
 遺伝的アルゴリズム
 …
8
2. ML-Agents
9
TensorFlowとは?ML-Agentとは?

 機械学習を簡単に行うためのフレームワーク (Google開発)
 通常PythonかC++でコーディング
 人工知能の研究開発に使われている
 ML-Agents(Machine Learning Agents)
 UnityとTensorFlowをうまく繋げるフレームワーク
(Unity Techronogies開発)
 強化学習のAIを簡単にUnityのゲームに組み込める
 結構最近できたらしい (2017/9~)
10
セットアップとサンプルプログラムの実行
11
セットアップ
https://github.com/Unity-Technologies/ml-agents/tree/master/docs/ の
Getting Started を参考にする
1. Unity 2017.1以降をインストール
2. https://github.com/Unity-Technologies/ml-agents.git
を適当なディレクトリにクローン
3. Anacondaをインストール
https://www.anaconda.com/download/#windows
4. ターミナルでTensorFlow(GPU)をインストール
5. TFSharpPlugin.unitypackageをプロジェクトにインポート
https://github.com/Unity-Technologies/ml-
agents/blob/master/docs/のDownload here
12
conda install tensorflow-gpu
 科学計算用のPythonプログラミング環境
 conda
Pythonパッケージ管理システム (Anacondaに付属)
Linuxのapt/yum, Macのbrewみたいなもの
 (科学計算する人はとりあえずインストールするみたいな風潮)
13
Examples (3D Ball)
1. https://github.com/Unity-Technologies/ml-agents.git
からクローンする
2. …/ml-agents-master/unity-environment
がUnityのプロジェクトディレクトリなので、Unityで開く
3. https://github.com/Unity-Technologies/ml-
agents/blob/master/docs の Download here から
TFSharpPlugin.unitypackageをダウンロードし、プロジェクト
にインポート
4. 3D Ball のシーンを開く
14
5. Player Settings>Resolution and Presentation>Resolution の
Run In Background を true にする
6. Player Settings>Other Settings>Configuration の .NETバー
ジョンを4.x系にし、 Scripting Define Symbols に
ENABLE_TENSORFLOW を記述する
15
7. Hierarchy View>Ball3DAcademy>Ball3DBrain の
Brain コンポーネントの Brain Type を External にする
16
8. 適当なパスに Build する
9. ターミナルで …/ml-agents-master/python に移動する
10. ターミナルで python を実行する
11. Import package is not found. みたいなエラーが出たら、
conda install でインストールする
17
cd …/ml-agents-master/python
python learn.py (3DBall.exeのパス) --train
conda install docopt
conda install tensorboard
12. 学習が終了したら TensorBoard で詳細を確認する
(TensorBoard をインストールした場合のみ)
もしくは
の後に、ブラウザを開いて localhost:6006/ にアクセス
18
tensorboard --logdir=summaries
python -m tensorflow.tensorboard --logdir=summaries
13. …/ml-agents-master/python/models/ppo/3DBall_ppo.bytes
が出力されているので、
…/ml-agents-master/unity-environment/Assets/ML-
Agents/Examples/3DBall/TFModels/
にコピーする
14. Hierarchy View>Ball3DAcademy>Ball3DBrain の
Brain コンポーネントの Brain Type を Internal にする
Graph Model に 13. でコピーした .bytes ファイルを指定する
19
15. 実行すると、学習した AI が動作する
20
ML-Agents によるプログラミング
21
注意!
このスライドで扱う ML-Agents は version 0.3β です。
これ以前のバージョンは仕様が異なる点があります。
22
大まかな手順
1. Unity で AI 訓練用のプログラムをビルドする
2. Python/TensorFlow で AI を訓練する
3. 学習済みモデルを Unity で読み込んでリリースビルド!
23
最低限必要なゲームオブジェクトと
スクリプト
 HogeAcademy
+ HogeAcademy スクリプト
|___ HogeBrain
+ Brain スクリプト
 HogeAgent
+ HogeAgent スクリプト
※ Brain スクリプトは ML-
Agents に用意されており、自分
で作る必要はない ?
※ HogeAcademy スクリプトは
Academy クラスを継承してコー
ディング
※ HogeAgent スクリプトは
Agent クラスを継承してコー
ディング
24
HogeAcademy スクリプト
 Academy クラスは “環境” を表す
 とりあえず何も書かなくてOKらしい
25
HogeAgent スクリプト
 Agent クラスは “エージェント” を表す (一番重要)
 エージェントの状態を観測し、TensorFlow に受け渡す
 TensorFlow で計算した結果を、エージェントに反映させる
(エージェントを実際に行動させる)
 エージェントに与える報酬もここに記述する
26
27
 HogeAgent スクリプトのひな形
HogeAcademy の Inspector 設定項目
28
Max Steps
Academy がリセット
される周期 ?
TimeScale
早送りしたいときに
設定する
Brain の Inspector 設定項目
29
Vector Observation
エージェントの観測状
態に関するパラメータ
Vector Action
エージェントの行動に
関するパラメータ
Brain Type
Player/Heuristic/Extern
al/Internal のいずれか
Space Type と Space Size
 Space Type
Discrete か Continuous
 Space Size
 Space Type = Discrete の場合
1次元ベクトル
範囲は [0, …, Space Size – 1]
離散量(攻撃 or 防御 など)に使用
 Space Type = Continuous の場合
Space Size 次元ベクトル
範囲は決まってない?
連続量(座標や角度)に使用
30
Brain Type
Agent の動かし方を表す
 Player
プレイヤーが を直接動かす
デバッグ用
 Heuristic
HogeDecision スクリプトの記述通りに動かす
デバッグ用
 External
AI の学習をするビルド時はこれにする
 Internal
学習済みの AI を使うリリースビルド時はこれにする
Graph Model に学習済み AI パラメータファイルを
指定すること
31
HogeAgent の Inspector 設定項目
32
Max Step
1 エピソードの長さ ?
(エージェントがリ
セットされる周期 ?)
Brain
HogeBrainゲームオブ
ジェクトを指定する
3. サンプルプログラム
(カートポール問題)
33
カートポール問題
 カートは左右に動かせる
 カートにはポールが立っている
 なるべく長時間ポールを倒さないように、カートを動かして
うまくバランスをとることが目的
34
観測状態、行動、終了条件、報酬
 観測状態
𝑥
𝜃
𝜃′
=
カートの座標
ポールの角度
ポールの角速度
 行動
𝑎 = カートの移動量
 終了条件
ポールが倒れた or カートがステージの端に行った
 報酬
ポールが倒れていない間、増やし続ける
35
学習結果
36
ソースコード
https://github.com/s059ff/unity-ml-agents-cartpole
37

Introduction of Unity ML-Agents