Slide 1

Slide 1 text

PythonとUnityで 手軽に強化学習を やってみよう! PyCon JP 2021 Oct. 16, 2021 山田 周平

Slide 2

Slide 2 text

山田 周平 沖縄にあるちゅらデータという会社で エンジニアをやっています 以前はUnityでソーシャルゲームを作った りしていました 4年前に東京から沖縄に移住しました

Slide 3

Slide 3 text

ちゅらデータは、『最高に面白い仕事』を沖縄に創りたい!という想いのも と創業しました。沖縄の労働問題をぶち破り、高賃金で、最先端かつやりが いのある仕事を、最高の仲間と一緒に創り上げることを目指しています。 クレイジーな仲間を募集しています ちゅらデータは、データ分析の力で顧客のビジネスを進化させることをミッ ションにしています。 自らがワクワクできることを大事にしている人、常識に囚われずに本質的な 課題解決に取り組める人を募集しています。 ちゅらデータHPより引用

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

今日はPythonとUnityを使った強化学習につい て話します • 強化学習について • PythonとUnityを使った強化学習のやり方 • Unity ML-Agents Toolkitについて

Slide 7

Slide 7 text

今日の発表を聞くと以下について何となく 理解できると思います • 機械学習の一分野として強化学習がある • PythonとUnityを使って強化学習ができる

Slide 8

Slide 8 text

ここで動画

Slide 9

Slide 9 text

強化学習について

Slide 10

Slide 10 text

機械学習は大きく3つにわけることができる 強化学習はその中の1つ 機械学習 教師あり 学習 教師なし 学習 強化学習

Slide 11

Slide 11 text

強化学習とは環境内の状態に応じてエージェントが 行動し報酬が最大化するような推論モデルを生成する 手法 エージェント 環境 行動 報酬 状態

Slide 12

Slide 12 text

例)車の自動運転AIを強化学習を用いて開発する場合 エージェント 自動運転AI 環境 教習所 のコース 行動 報酬 状態 車の位置 周囲の状況 車道を1秒走行するごとに+1 車道からはみ出たら1秒ごとに−1 壁にぶつかったら−10で終了 ハンドル アクセル ブレーキ

Slide 13

Slide 13 text

PythonとUnityを使った 強化学習のやり方

Slide 14

Slide 14 text

Python (PyTorch) Unity 環境をUnity、エージェントをPythonが担当する エージェント 環境 行動 報酬 状態

Slide 15

Slide 15 text

Unity • Unity社が提供しているゲーム開発エンジン • 多くのモバイルゲームやPCゲームの制作に使われている • 3Dモデルの物理演算やシミュレーションを手軽に実施できる

Slide 16

Slide 16 text

Python • 機械学習用のライブラリやフレームワークが豊富にある • PyTorch • オープンソースの機械学習ライブラリ

Slide 17

Slide 17 text

Unity ML-Agents Toolkit • Unity社から提供されているツール(公式ツール) • 含まれているもの • PyTorchなどのPython環境 • Python環境とUnityとをやりとりする仕組み • Unityで環境を構築する際に使用するソースコード • 公式Exampleプロジェクト多数

Slide 18

Slide 18 text

Unity ML-Agents Toolkitの仕組み • UnityとPythonは別のアプリケーションとして起動しており、 ネットワーク越しに通信してデータをやりとりする 行動 報酬 状態 Unity Python(コンソール)

Slide 19

Slide 19 text

Unity ML-Agents Toolkitのインストール • Githubの公式ページにインストール方法が書かれている • ただし英語 • 日本語の解説記事がいくつか公開されている • 日本語の書籍もあるが情報が古くなってしまっている • 「Unity ML-Agents実践ゲームプログラミング」 • 説明やデモの紹介を日本語で読むことができる数少ない資料なので買っ ても損はない

Slide 20

Slide 20 text

Unity ML-Agents Toolkitで強化学習をする流れ 1. Unityで環境をつくる Unityの知識が必要 2. 状態と行動と報酬を設定する Unityと強化学習の知識が必要 3. 学習させる 強化学習の知識が必要 4. 2と3のくりかえし

Slide 21

Slide 21 text

公式Exampleより:3DBall • 公式がExampleをたくさん用意して くれている • 3DBall:箱の上からボールを落と さないようにうまく箱を傾けさせる ことをAIに学習させる

Slide 22

Slide 22 text

1. Unityで環境をつくる • Unity上で作業する

Slide 23

Slide 23 text

2. 状態と行動と報酬を設定する • 状態 • 箱の角度(2軸) • ボールの位置(3次元位置) • ボールの速度と移動方向(ベクトル) • 行動 • 箱の角度(2軸) • 報酬 • ボールが落ちていない:+0.1(学習を継続する) • ボールが落ちた:-1.0(学習を終了する) • ボールが落ちない限り報酬が増え続ける

Slide 24

Slide 24 text

3. 学習させる • 学習モデルに応じてハイパーパラメータを調節する • バッチサイズ、学習率、エポック数など • 学習状況を確認することができる CumulativeReward: 累積報酬 高いほどよい EpisodeLength: エピソード(1回の学習) の長さ 長い方がいいか短い方がい いかはタスクによる

Slide 25

Slide 25 text

4. 行動と報酬設定と学習のくりかえし • 状態、行動、報酬の設定やハ イパーパラメータを変更して 学習をくりかえす • 同時並行で多数の学習を同時 にできる

Slide 26

Slide 26 text

状態と行動と報酬の設定が難しい • タスクによって全く異なる • 例)自動運転、将棋、迷路脱出など • 報酬の設定によってはこちらが意図しない行動を学習してしまう • 例)自動運転の場合にその場でぐるぐる回るのが最適解になってしまう など • 状態を与えすぎないようにする • 例)自動運転の場合に壁の向こうに人がいることを教えてしまうなど

Slide 27

Slide 27 text

公式のExampleがたくさん用意されているのでそれを 見ることで状態と行動と報酬の設定について学ぶこと ができる • 今日は2つのExampleを紹介する • Crawler • 4脚8関節のロボットを歩行させてゴールに向かわせる • Soccer Twos • 2対2でサッカーをする

Slide 28

Slide 28 text

Crawler(4脚8関節のロボット) • 状態 • ゴールの方向 • ロボットの向かっている方向 • 関節の角度 • 行動 • 関節の角度 • 報酬 • ロボットの速度と方向がゴールに向いているかどうか:+0〜1(ゴール に向いていると1で反対だと0) • ロボットのボディが地面に接触した:-1.0で学習終了

Slide 29

Slide 29 text

Soccer Twos(2対2でサッカー) • 状態 • 自分の前方11方向にある物体と物体までの距離 • 自分の後方3方向にある物体と物体までの距離

Slide 30

Slide 30 text

Soccer Twos(2対2でサッカー) • 行動 • 前進、後退 • 左右移動 • その場で回転 • 報酬 • 相手ゴールにボールを入れた:+0〜1の範囲(経過時間が短いほど高い) で学習終了 • 自分のゴールにボールを入れた:-1.0で学習終了

Slide 31

Slide 31 text

事例紹介 • Source of Madnessというアクションゲーム • ML Agetns ToolKitを使って敵のモンスターの動きを決めるAIを 作成した

Slide 32

Slide 32 text

強化学習とUnity ML Agents イケてるところとツラいところ イケてる • UnityとPythonのいいところが合わさっている • 他のツールでは実現が難しいことができる • 学習の様子が見ていて楽しい ツラい • 自動運転やロボットなど現実世界のプロダクトに反映させようと するとシミュレータをしっかり作り込む必要がある • 強化学習を適用できるタスクがそれほど多くない • 強化学習ではなくルールベースのAIでも結構いい感じにできる

Slide 33

Slide 33 text

まとめ • 強化学習 • 環境中でエージェントが行動して学習していく • PythonとUnityを使って強化学習ができる • Unity ML-Agents Toolkitというツールがある