UnityとPython(TensorFlow)を連携させることで、シミュレータを利用した強化学習をおこなうことができます。 Unity社が公式に提供している「Unity ML-Agents Toolkit」を利用することで手軽に環境構築が可能です。 この発表を聞くことで強化学習やUnityに対する理解が深まるとともに、「Unity ML-Agents Toolkit」の仕組みや使い方を知ることができます。
PythonとUnityで手軽に強化学習をやってみよう!PyCon JP 2021 Oct. 16, 2021山田 周平
View Slide
山田 周平沖縄にあるちゅらデータという会社でエンジニアをやっています以前はUnityでソーシャルゲームを作ったりしていました4年前に東京から沖縄に移住しました
ちゅらデータは、『最高に面白い仕事』を沖縄に創りたい!という想いのもと創業しました。沖縄の労働問題をぶち破り、高賃金で、最先端かつやりがいのある仕事を、最高の仲間と一緒に創り上げることを目指しています。クレイジーな仲間を募集していますちゅらデータは、データ分析の力で顧客のビジネスを進化させることをミッションにしています。自らがワクワクできることを大事にしている人、常識に囚われずに本質的な課題解決に取り組める人を募集しています。ちゅらデータHPより引用
今日はPythonとUnityを使った強化学習について話します• 強化学習について• PythonとUnityを使った強化学習のやり方• Unity ML-Agents Toolkitについて
今日の発表を聞くと以下について何となく理解できると思います• 機械学習の一分野として強化学習がある• PythonとUnityを使って強化学習ができる
ここで動画
強化学習について
機械学習は大きく3つにわけることができる強化学習はその中の1つ機械学習教師あり学習教師なし学習強化学習
強化学習とは環境内の状態に応じてエージェントが行動し報酬が最大化するような推論モデルを生成する手法エージェント環境 行動報酬状態
例)車の自動運転AIを強化学習を用いて開発する場合エージェント自動運転AI環境教習所のコース行動報酬状態車の位置周囲の状況車道を1秒走行するごとに+1車道からはみ出たら1秒ごとに−1壁にぶつかったら−10で終了ハンドルアクセルブレーキ
PythonとUnityを使った強化学習のやり方
Python(PyTorch)Unity環境をUnity、エージェントをPythonが担当するエージェント環境 行動報酬状態
Unity• Unity社が提供しているゲーム開発エンジン• 多くのモバイルゲームやPCゲームの制作に使われている• 3Dモデルの物理演算やシミュレーションを手軽に実施できる
Python• 機械学習用のライブラリやフレームワークが豊富にある• PyTorch• オープンソースの機械学習ライブラリ
Unity ML-Agents Toolkit• Unity社から提供されているツール(公式ツール)• 含まれているもの• PyTorchなどのPython環境• Python環境とUnityとをやりとりする仕組み• Unityで環境を構築する際に使用するソースコード• 公式Exampleプロジェクト多数
Unity ML-Agents Toolkitの仕組み• UnityとPythonは別のアプリケーションとして起動しており、ネットワーク越しに通信してデータをやりとりする行動報酬状態UnityPython(コンソール)
Unity ML-Agents Toolkitのインストール• Githubの公式ページにインストール方法が書かれている• ただし英語• 日本語の解説記事がいくつか公開されている• 日本語の書籍もあるが情報が古くなってしまっている• 「Unity ML-Agents実践ゲームプログラミング」• 説明やデモの紹介を日本語で読むことができる数少ない資料なので買っても損はない
Unity ML-Agents Toolkitで強化学習をする流れ1. Unityで環境をつくるUnityの知識が必要2. 状態と行動と報酬を設定するUnityと強化学習の知識が必要3. 学習させる強化学習の知識が必要4. 2と3のくりかえし
公式Exampleより:3DBall• 公式がExampleをたくさん用意してくれている• 3DBall:箱の上からボールを落とさないようにうまく箱を傾けさせることをAIに学習させる
1. Unityで環境をつくる• Unity上で作業する
2. 状態と行動と報酬を設定する• 状態• 箱の角度(2軸)• ボールの位置(3次元位置)• ボールの速度と移動方向(ベクトル)• 行動• 箱の角度(2軸)• 報酬• ボールが落ちていない:+0.1(学習を継続する)• ボールが落ちた:-1.0(学習を終了する)• ボールが落ちない限り報酬が増え続ける
3. 学習させる• 学習モデルに応じてハイパーパラメータを調節する• バッチサイズ、学習率、エポック数など• 学習状況を確認することができるCumulativeReward:累積報酬 高いほどよいEpisodeLength:エピソード(1回の学習)の長さ長い方がいいか短い方がいいかはタスクによる
4. 行動と報酬設定と学習のくりかえし• 状態、行動、報酬の設定やハイパーパラメータを変更して学習をくりかえす• 同時並行で多数の学習を同時にできる
状態と行動と報酬の設定が難しい• タスクによって全く異なる• 例)自動運転、将棋、迷路脱出など• 報酬の設定によってはこちらが意図しない行動を学習してしまう• 例)自動運転の場合にその場でぐるぐる回るのが最適解になってしまうなど• 状態を与えすぎないようにする• 例)自動運転の場合に壁の向こうに人がいることを教えてしまうなど
公式のExampleがたくさん用意されているのでそれを見ることで状態と行動と報酬の設定について学ぶことができる• 今日は2つのExampleを紹介する• Crawler• 4脚8関節のロボットを歩行させてゴールに向かわせる• Soccer Twos• 2対2でサッカーをする
Crawler(4脚8関節のロボット)• 状態• ゴールの方向• ロボットの向かっている方向• 関節の角度• 行動• 関節の角度• 報酬• ロボットの速度と方向がゴールに向いているかどうか:+0〜1(ゴールに向いていると1で反対だと0)• ロボットのボディが地面に接触した:-1.0で学習終了
Soccer Twos(2対2でサッカー)• 状態• 自分の前方11方向にある物体と物体までの距離• 自分の後方3方向にある物体と物体までの距離
Soccer Twos(2対2でサッカー)• 行動• 前進、後退• 左右移動• その場で回転• 報酬• 相手ゴールにボールを入れた:+0〜1の範囲(経過時間が短いほど高い)で学習終了• 自分のゴールにボールを入れた:-1.0で学習終了
事例紹介• Source of Madnessというアクションゲーム• ML Agetns ToolKitを使って敵のモンスターの動きを決めるAIを作成した
強化学習とUnity ML Agentsイケてるところとツラいところイケてる• UnityとPythonのいいところが合わさっている• 他のツールでは実現が難しいことができる• 学習の様子が見ていて楽しいツラい• 自動運転やロボットなど現実世界のプロダクトに反映させようとするとシミュレータをしっかり作り込む必要がある• 強化学習を適用できるタスクがそれほど多くない• 強化学習ではなくルールベースのAIでも結構いい感じにできる
まとめ• 強化学習• 環境中でエージェントが行動して学習していく• PythonとUnityを使って強化学習ができる• Unity ML-Agents Toolkitというツールがある