Slide 1

Slide 1 text

AI 2023.04.20 宇都 恭平 株式会社ディー・エヌ・エー + GO株式会社 Kaggleシミュレーションコンペで 強化学習に取り組むときのTips

Slide 2

Slide 2 text

AI 2 現行含め過去に3つのシミュレーションコンペに参加して得た、コンペで強化学習に取り組む 時の役立ち情報をまとめました。強化学習は面白いので興味を持ってもらうorコンペ参加の ハードルを少しでも下げられると嬉しいです。 ● 1年前に書いたこちらのブログをもとにお話しします ○ タイトル: シミュレーションコンペで強化学習を始める時のTips ○ (https://kutohonn.hatenablog.com/entry/2021/12/16/230644) ● 現行コンペ(LuxAI season2)については触れないものとします ○ (終了後に追記予定) ● 強化学習アルゴリズムについてはあまり言及しません ○ (off-policy or on-policyなど) ● 私は金メダル取れていないので話半分に聞いてください はじめに 過去のコンペ結果

Slide 3

Slide 3 text

AI 3 目次 01|シミュレーションコンペの基礎知識 02|強化学習の基礎知識 03|強化学習に取り組む際のTips

Slide 4

Slide 4 text

AI 4 目次 01|シミュレーションコンペの基礎知識 02|強化学習の基礎知識 03|強化学習に取り組む際のTips

Slide 5

Slide 5 text

AI 5 過去コンペ紹介① サッカーゲームのコンペ (以降のスライドの説明でもこちらのゲームを参照します) ■ルール ● Google Researchが強化学習用に作ったゲームエンジン ● ルールは基本的に通常のサッカーと同じ ● 時間内の得点数で勝敗を決める ■状態 ● リッチなゲーム画面 ● ゲーム画面を簡略化したミニマップ ● 全プレイヤーとボールの状態ベクトル ■行動 ボールの近くにいるプレイヤー1人のみ操作可能 各方向への移動、パス、シュートなど全19種の行動を選択 https://www.kaggle.com/competitions/google-football

Slide 6

Slide 6 text

AI 6 過去コンペ紹介② https://www.kaggle.com/c/lux-ai-2021 ストラテジーゲームのコンペ ■ルール ● 複数のUnitとCityを操作 ● 最終的に残ったCityの数が相手より大きければ勝ち ■状態 ● 盤面とUnitとCityの情報 ■行動 ● Unit - Cityを立てる、資源採集など全8つの行動 ● City - Unitを生み出すor研究するの2つの行動 ■ポイント 1度に複数対象の行動を決めるため協調的な戦略が求められる

Slide 7

Slide 7 text

AI 7 参加者が提出したエージェント同士を戦わせその勝敗でLBの順位が決まる 対戦はスコア帯が近いエージェント同士で行われる スコアの伸びは対戦を重ねるにつれ減衰していく。 評価方法

Slide 8

Slide 8 text

AI 8 コンペごとに提出用のテンプレートコードが提供されている 例)LuxAIではagent.pyに処理を記述し以下を圧縮ファイルとして提出する方式 submission形式 # agent.py def agent(observation, configuration): # observation(ゲームの状態)からaction(とる行動)を算出する処理(ex;モデルの推論) return action   ①ホストが用意したそのほかのスクリプト   ②agent.py   ③学習済みモデル   ④kaggle imageに含まれていないライブラリのソース

Slide 9

Slide 9 text

AI 9 初参加で勘所がいまいちわからないという方にはこちらがおすすめ。 https://www.kaggle.com/code/dott1718/kdb-workshop チュートリアル ● GMのdott氏によるkaggle days championship finalの ワークショップ講演 ● ConnectXというゲームを題材に以下の手法を紹介 ○ ルールベース ○ ゲーム木探索アルゴリズム ○ 模倣学習 ○ 強化学習(DQN) ● シミュレーションコンペでとりうるアプローチを順序立て て説明しており雰囲気が掴める

Slide 10

Slide 10 text

AI 10 目次 01|シミュレーションコンペの基礎知識 02|強化学習の基礎知識 03|強化学習に取り組む際のTips

Slide 11

Slide 11 text

AI 11 用語の説明 サッカーゲームを例に説明 状態(State) 環境 (Environment) 報酬(Reward) エージェント (Agent) 行動(Action) 得点したら+1 失点したら-1 下記論文中の画像をもとに作成 Kurach, Karol, et al. "Google research football: A novel reinforcement learning environment." (2020) https://arxiv.org/pdf/1907.11180.pdf 目的関数 最大化したいものを自分で定義する ゲーム状態を表すデータ 形式は様々 プレイヤーの操作対象 より良い方策(Policy)を得るのが強化学習の目的 方策とは行動確率のこと policy=[シュート:0.0, パス:0,2, 左移動:0.5…] 受け取った状態がプレイヤーにとって優勢かどう かを示す状態価値(Value)をAgentに推定させる こともある ゲームエンジンのこと。 以下が基本的なインターフェイス ● エージェント行動を受け取る ● stepを進める ● 次の状態と報酬を返す

Slide 12

Slide 12 text

AI 12 目次 01|シミュレーションコンペの基礎知識 02|強化学習の基礎知識 03|強化学習に取り組む際のTips

Slide 13

Slide 13 text

AI 13 まずは模倣学習に取り組んでみる 模倣学習とはエキスパートの対戦ログをもとにした教師あり学習のこと。 ● 参加者が提出したsubの対戦ログはMeta Kaggle datasetに格納される ● 上位チームの対戦ログを取得し状態と行動の組み合わせからデータセットを作成し教師ありとして解くこと で上位の方策を模倣できる ● 完全に模倣できるわけではないため模倣元の下位互換ではあるがこれだけでも十分に強いAgentが作れる ● 単一のチームで学習した方が純粋にそのチームの方策を学習できる ● 対象チームが勝利した対戦結果のみ学習することが多い ● モデルは基本NNが望ましい 模倣学習(Imitation Learning) 状態 行動 正解ラベル 特徴量 対戦ログ Meta Kaggle

Slide 14

Slide 14 text

AI 14 強化学習に取り組む前に模倣学習に取り組むとよい理由 ● モデル・データの試行錯誤がしやすい ○ 強化学習は学習効率が悪くモデルの評価に時間がかかるため、新しい特徴量やモデルの試行錯誤 がしにくい ○ 模倣学習で有用な特徴量やモデルは強化学習でも有用と考えられる ○ 模倣学習で試行錯誤のサイクルを回して良さげな構成が決まったら、その構成で強化学習を行う ことで、モデル選定時間を短縮可能 ● 強化学習の事前学習モデルとして利用可能 ○ 強化学習で一からそこそこ強いAgentを作るのにはかなり時間がかかる 模倣学習だと数時間でそこそこ強くなる ○ 模倣学習モデルを事前学習モデルとして強化学習で利用することで学習時間を短縮可能 ○ ファインチューニング直後に元の方策を忘却する挙動が起こりうる。その場合は後述の損失関数 の調整やハイパーパラメータチューニングが必要。 模倣学習(Imitation Learning)

Slide 15

Slide 15 text

AI 15 強いAgentを作る上で対戦数が何よりも重要 時間あたりの対戦効率をあげるために、CPUで並列に対戦を実行し GPUで学習を行う分散強化学習手法を利用 ● 分散強化学習手法は色々あるがkaggleでよく利用されている のはIMPALAというアーキテクチャ。 ○ (Football2nd, HungryGeese1st, LuxAI1stで使用) ● これ以外にも強化学習ライブラリを利用することで本来分散 処理を前提としていない強化学習アルゴリズム(DQN,PPOな ど)を分散環境で使用することも可能 ● KaggleやColabのようにCPU数が少ない計算環境では有効で ないためリソースは適切にかける必要あり(特にCPUの数) 分散強化学習 IMPALAの論文より引用 https://proceedings.mlr.press/v80/espeholt18a/espeholt18a.pdf

Slide 16

Slide 16 text

AI 16 報酬設計も学習への影響が大きく重要な要素。 これが正解ではないが私が考えている方針はこんな感じ。 ● 目的を直接表現するシンプルな報酬を選択 ○ 目的達成に直接作用する勝敗や得失点のようなシンプルなものを報酬にする ● 学習初期は補助的な即時報酬を与える ○ 報酬が勝敗のみの場合学習序盤のAgentはゴールに辿り着くこと自体がそもそも難しい ○ 学習初期は明示的にとってほしい行動を即時報酬として追加し、真の報酬の獲得を誘発させる (e.g.ボールと相手ゴールまでの距離) ○ 即時報酬はノイズとなりうる (e.g. ボールを相手ゴールに大きく蹴る、後ろにパスをしない等) ○ そこそこ学習が進んだら即時報酬を取り除くor減衰させる ● 報酬をclipする ○ 大きな値だと学習が不安定になるため-1~1に収まるように正規化したりclippingしたりする ○ ただしコンペ上位者で大きい値を使っているチームもいたため必須ではないかも。 報酬設計

Slide 17

Slide 17 text

AI 17 ● 不要な行動は推論対象から削除 ○ 取りうる選択肢(クラス数)を減らすことで学習しやすくする ● 無効な行動は推論後にマスク ○ 上記と同様の理由。強化学習では一般的に行われている ● 行動空間を集約 ○ 行動を意味ごとに集約することで学習しやすくする ○ 例)4方向の移動行動がある場合、1つの移動行動として扱う ● 行動空間を細分化 ○ 上記の逆で人がルールで決めるところもエージェントに学習させる ○ ゲームエンジンで与えられている行動を細分化して新しく定義する 基本的に取りうる行動が少ないほど学習はしやすいが方策のバリエーションは減少する 行動空間を工夫する Agentの取りうる行動は以下のような工夫ができる

Slide 18

Slide 18 text

AI 18 ゲーム状態を十分に表現できる形式であればなんでも良い 状態を工夫する 空間情報をマップ形式にする e.g. 1ch: 味方の位置 2ch: 敵の位置 3ch: ボールの位置 4ch: ゲームの進行度合い . . ● MLPの場合はマップやプレイヤー情報の特徴ベクトルを作成する。軽量だが空間的な表現力は弱い ● CNNベースのNNを利用する場合ゲーム状態をマップ形式にした特徴量がよく使われている ● 過去の状態を現在の状態にstackしてモデルに入力する方法もある ● 明示的に特徴量エンジニアリングしたもの新たなchannelとして加えることで学習が進みやすくなる こともある 前の時系列の状態を現在の状態にstackする t-1 t

Slide 19

Slide 19 text

AI ● 大きなモデルはあまり使われておらずResNetベースのモデルがよく使われている。 ● CV, NLPと異なり事前学習済みモデルは利用されない(そこまでの汎化性能がないため) ● 複数の対象の行動を同時に推論する場合UNetが有効 ○ 出力をマップ形式にすることで1回の推論でマップ上の複数の対象の方策を得ることが可能 ● 図には示していないが強化学習ではpolicy(行動確率)だけでなくvalue(状態価値)の推定も行う。 ○ 別々のNNを用意する場合もあれば1つのNNでpolicyとvalueの両方を推論する場合もある 19 モデルアーキテクチャ設計 UNet ResNet policy observation map policy map outputが1つのpolicy outputが複数のpolicy この位置にいる操作 対象のpolicyを取得 observation map

Slide 20

Slide 20 text

AI 20 必要に応じて損失項を追加することで学習を安定化させる ● KL Divergence Loss ○ あらかじめ用意したベースモデルの方策と学習中のモデルの方策とのKL divergenceを計算しこれを 最小化するようにlossに追加する。これにより学習中の方策がベースとなる方策から大きく変わらな いように学習が可能。 ○ ただし強すぎるとベースモデルから方策が変わらなくなるためlossに対して適当に係数がけする ● Entropy Loss ○ 学習中のモデルが特定の方策に偏るとより良い方策を探索することができない ○ entropyは方策がランダムな時に最も大きくなり特定の行動の確率が高い場合小さくなる ○ 負のentropyをlossに追加することで強化学習における探索を増やす ○ エントロピー正則化と呼ばれる。 ○ こちらも強すぎるとランダムな方策になってしまうので適切にスケーリング・減衰させる 損失関数設計

Slide 21

Slide 21 text

AI 21 強化学習は学習が不安定なため複数指標で学習状況を監視する ■対戦評価時に得られる情報 ● 勝率 ● 獲得報酬 ● ゲームのstep数 上記は学習がうまくいってると増加する ■訓練時に得られる情報 ● Loss ● entropy ○ 推論された方策の乱雑さを示す ○ 大きすぎる場合方策がランダムすぎ ○ 小さすぎる場合探索ができていない ○ (lossの場合負のentropyなのでこの逆) ● KL divergence ○ 元の方策からの変化を示す ○ 大きいほど元の方策からの乖離が大きい ログを取る

Slide 22

Slide 22 text

AI 22 LBでは多くの参加者と対戦するため単一の相手に過学習しないように 多様な対戦相手を用意してAgentの汎化性能を上げる ■候補 ● ランダムAgent ● 公開notebookのAgent ● 模倣Agent ● 自身と同じ方策を持つAgent(self-play) ● 過去の自分のAgent self-playの場合、自分と敵が同じ方策であることにより方策の更新がサイクルして学習が停滞することがある。 その場合損失関数やハイパーパラメータの調整が必要。 多様な相手と対戦させる

Slide 23

Slide 23 text

AI 23 強化学習で学習したモデルと探索アルゴリズムを組み合わせることでAgentをさらに強くすることが可能 モンテカルロ木探索(MCTS)がよく使用される ● 強化学習文脈ではモデルが推論したpolicyとvalueを用いたPV-MCTSが利用される。 ● policyとvalueをもとに自分と相手の先の行動を複数パターンでシミュレーションし価値の高い行動を選択 ● valueの推論精度が低いと正しく価値評価が行えないため、rollout(特定の方策でゲーム終了までplay)によ る価値評価と組み合わせる場合もある。 ● MCTSで先読みをしてる分、モデルの推論結果のみよりもロバストな行動選択が可能 ● 探索数が重要なので推論高速化・探索対象の枝刈り・高速な言語の利用(C++など)が行われる 探索アルゴリズムとの併用 Alpha Go Zero論文より引用  https://discovery.ucl.ac.uk/id/eprint/10045895/1/agz_unformatted_nature.pdf

Slide 24

Slide 24 text

AI ■RLLib(ray) (https://github.com/ray-project/ray) ● 分散実行ライブラリrayのサブ パッケージの1つ ● pytorch, tensorflow対応 ● 複数のアルゴリズムが利用可能 ● 分散強化学習に対応 ● configでモデルを定義する形式 でカスタム可能 ■HandyRL (https://github.com/DeNA/HandyRL) ● ゲーム対戦の分散強化学習に特 化したライブラリ ● IMPALAベースのoff-policy分 散強化学習を手軽に利用可能 ● kaggleでの実績豊富 ● 細かいカスタマイズをする場合 は直接コードを変更する 24 ■stable baselines3 (https://github.com/DLR-RM/stable-baselines3) ● OpenAIのbaselinesから派生し た著名なライブラリ ● pytorch実装(v1はtensorflow だったが開発はほぼ止まってる) ● 複数のアルゴリズムが利用可能 ● 分散強化学習に対応 主要な強化学習ライブラリ

Slide 25

Slide 25 text

AI 25 ◾シミュレーションコンペ関連 ● kaggleシミュレーションコンペの動向 ○ (https://speakerdeck.com/nagiss/kagglesimiyuresiyonkonpenodong-xiang ) ○ 過去の全てのシミュレーションコンペの解法をアプローチ別に整理している。 ◾模倣学習関連 ● Kore Episode Scraper Match Downloader ○ (https://www.kaggle.com/code/robga/kore-episode-scraper-match-downloader ) ○ Meta Kaggleにある参加者の対戦ログから上位チームのデータを取得する方法についてのnotebook ● Lux AI with Imitation Learning ○ (https://www.kaggle.com/code/shoheiazuma/lux-ai-with-imitation-learning/notebook ) ○ Lux AIで共有された模倣学習のnobteook。綺麗に整理されたコードで模倣学習に取り組む際に参考になる。 ◾強化学習関連 ● way to boost your learning ○ (https://www.kaggle.com/c/lux-ai-2021/discussion/290284 ) ○ LuxAIで移動行動を学習させるための工夫に関するdiscussion。他のコンペでも使えそう 参考文献

Slide 26

Slide 26 text

AI 26 ◾強化学習関連 ● PPO Hyperparameters and Ranges / PPO GitHub ○ https://medium.com/aureliantactics/ppo-hyperparameters-and-ranges-6fc2d29bccbe ○ https://github.com/EmbersArc/PPO/blob/master/best-practices-ppo.md ○ 強化学習アルゴリズムの一つであるPPOのハイパーパラメータをチューニングする際のエッセンスがまとめら れた記事。 ● オフポリシー強化学習のすゝめ ○ (https://qiita.com/YuriCat/items/5c2a676a67981ecca94a ) ○ オンポリシーとオフポリシーという観点で比較があり、分散強化学習をするためにオンポリシーをどのよう にオフポリシーに変換するかについても触れられている。 ◾モンテカルロ木探索関連 ● 10th Place Solution ○ https://www.kaggle.com/shoheiazuma/10th-place-solution ○ 模倣学習とモンテカルロ木探索(MCTS)によるアプローチがと綺麗なコードでまとまっているnotebook ● 8th place solution: Deep Neural Networks & Tree Search ○ https://www.kaggle.com/competitions/lux-ai-2021/discussion/294603 ○ LuxAI8位の模倣学習+MCTSアプローチ解法。LuxAIは探索領域が大きいことから、探索領域の工夫やMCTS をC++で実装し高速化した取り組みが共有されている。 参考文献