Slide 1

Slide 1 text

Kaggleシミュレーションコンペの 動向 nagiss データ本部AI技術開発部 株式会社ディー・エヌ・エー © DeNA Co.,Ltd.

Slide 2

Slide 2 text

2 本スライドは 2022 年 8 月に作成されました。情報が古い場合があることにご注意ください。

Slide 3

Slide 3 text

3 自己紹介
 ● シミュレーションコンペで金2 銀2 ● (強化学習はAlphaZeroしか 分かりません)

Slide 4

Slide 4 text

4 この資料の目的 ● Kaggle のシミュレーションコンペが何者なのか知ってもらう ● 参加のハードルを下げる

Slide 5

Slide 5 text

5 目次 シミュレーションコンペとは? 常設+メダル有り、全部眺める おまけ: 参加に役立つ情報 1 2 3

Slide 6

Slide 6 text

6 1. シミュレーションコンペとは? 一体何者なんだ。

Slide 7

Slide 7 text

7 シミュレーションコンペとは? ● ゲーム AI で他の参加者とバトルするコンペです

Slide 8

Slide 8 text

8 シミュレーションコンペとは? (詳しめのルール 1 / 2) ● 参加者は、ゲーム AI (エージェント) を作成してコンペに提出する ● エージェントは、観測 (observation, エージェントから見えるゲームの状態 ) を与えられ てから一定の制限時間 (actTimeout, 2 秒程度) 以内に次の行動を決定しなければい けない ○ 制限時間を過ぎてもすぐに負けにはならず、持ち時間 (remainingOverageTime, 60 秒程度) が消費される。消費し切ったら負け ○ 1 手に数秒、1 ゲームに数百ターンかかるので、 1 ゲームに最大数十分 ● 1 日に 5 個程度のエージェントが提出可能、提出した全てが評価対象になる ○ (2023/1 追記) Lux AI 2022 beta から評価対象となるエージェントを 3 つ選ぶ形式になった

Slide 9

Slide 9 text

9 シミュレーションコンペとは? (詳しめのルール 2 / 2) ● エージェントを提出すると、まず自己対戦でエージェントが正しく動作するか確認が行わ れる。自己対戦でエラーが出なかったエージェントは、他チームが提出した同程度の レーティングのエージェントと対戦を行い、勝敗に応じてレーティングが変動する。対戦 はコンペの終わりまで繰り返される。 ○ 自己対戦でエラーが出た場合、提出回数は消化されない ○ 対戦の頻度はそこまで高くないので、評価は気長に待つ ● 提出したエージェントのレーティングのうち最大の値が順位表に反映される ● 提出したエージェントは削除できない ● エージェント提出の締め切り後にも、レーティング収束のために 2 週間程度対戦が繰り 返される

Slide 10

Slide 10 text

10 シミュレーションコンペとは? ● メダルありのコンペはこれまでに 7 回 ○ 過去コンペには提出できない ■ (2023/1 追記) 一部コンペは clone して内輪で楽しむなどできるようになった ● 主な戦略 ○ ルールベース ○ 模倣学習 ■ API で取得できる上位の対戦のリプレイから行動を学習する ○ 強化学習 ■ 模倣学習と併用されることも多い ● (ので後のsolution紹介では併用された場合も特に明記しないことにする ) ○ それぞれゲーム木探索 (主に MCTS) と併用されることもある

Slide 11

Slide 11 text

11 全コンペ 略称 期間 メダル有無 概要    Connect X 常設 コネクトフォー    Halite by Two Sigma Halite 2020/6-9 🥇🥈🥉 宇宙船でバトル    Halite by Two Sigma - Playground Edition 2020/9-12 (延長戦)    Google Research Football with Manchester City F.C. Football 2020/9-12 🥇🥈🥉 サッカー    Rock, Paper, Scissors RPS 2020/11-2021/2 🥇🥈🥉 じゃんけん    Santa 2020 - The Candy Cane Contest MAB 2020/12-2021/2 🥇🥈🥉 多腕バンディット    Hungry Geese 2021/1-8 🥇🥈🥉 スネークゲーム    Lux AI 2021/8-12 🥇🥈🥉 資源集めて生き残る    Kore 2022 - Beta 2022/3-4 (ルール調整)    Kore 2022 Kore 2022/4-7 🥇🥈🥉 宇宙船でバトル

Slide 12

Slide 12 text

12 2. 常設+メダル有り、全部眺める じーっ。

Slide 13

Slide 13 text

13 Connect X ● コネクトフォー(重力付き四目並べ) ● 唯一の常設コンペ ● 唯一の交互に行動するゲーム? ● 唯一の二人零和有限確定完全情報ゲーム? ● 個人的には強化学習を練習するには面白くないゲームだと思っている ○ 二人零和有限確定完全情報ゲームなのでゲーム木探索が強い ○ 先手必勝が知られている

Slide 14

Slide 14 text

14 Halite by Two Sigma ● 宇宙船ゲーム ○ 4 人対戦、ターンごとに各艦隊と造船所の行動を決め、行動は全員同時 ○ 盤面に設置された Halite を多く集めたプレイヤーの勝ち ○ 敵艦隊との衝突で Halite を奪ったり奪われたりする ● 1 位解法 ○ ルールベース、コードは 11000 行を超える ● 2位ルールベース、4位ルールベース、5位模倣学習、6位ルールベース

Slide 15

Slide 15 text

15 Google Research Football with Manchester City F.C. ● サッカー ○ ボールに近い 1 人のみを操作する ○ 各方向の移動、パス、シュート等 19 通りの行動がある ● 1 位解法 ○ 強化学習 ■ Deheng Ye, et al に近い手法らしい ■ PPO ● 2位強化学習(IMPALA)、3位強化学習(TD(λ),IMPALA,UPGO)、5位強化学習 (TD(λ),UPGO)、6位強化学習(PPO)、7位模倣学習(GBDT)

Slide 16

Slide 16 text

16 Rock, Paper, Scissors ● じゃんけん ○ 2 人対戦 ○ 1000 回じゃんけんして 20 回勝ち越せば最終的に勝ち ● 1 位解法 ○ 公開 notebook のエージェント、rpscontest.com のエージェントと、それぞれの 出力 x に対して (x+1)%3, (x+2)%3 を計算したものから多腕バンディットとかで 選んだりする ○ 決定論的な公開 notebook エージェントに対しては完勝できる ● 他の上位解放も大体似ている

Slide 17

Slide 17 text

17 Santa 2020 - The Candy Cane Contest ● 対戦型の多腕バンディット問題 ○ 2 人対戦 ○ 100 個のマシンがあり、各ターンに各エージェント 1 つ選ぶ ○ 各マシンに設定された確率に基づいて当たりが出る ○ 相手がどのマシンを選んだかは見えるが、結果は見えない ○ マシンを選ぶたびにそのマシンの当たり確率に 0.97 が乗算される ● 1 位解法 ○ GBDT で確率を予測 (ただし確度が低いものは予測値を上げる ) ● 2位GBDT(1位と類似)、3位確率予測+強化学習(V-trace)、4位確率予測+相手に手の 内がバレないようにする

Slide 18

Slide 18 text

18 Hungry Geese ● スネークゲーム ○ 4 人対戦 ○ 盤面の食べ物を食べると体が 1 マス伸びる ○ 長く生き残っていた方が勝ち、同じターンの場合長い方が勝ち ● 1 位解法 ○ HandyRL ○ 線形モデルを評価関数にした MCTS と大きい NN のアンサンブル ■ これ Ponanza では? ● 2位模倣学習+MCTS、3位強化学習(V-trace,UPGO)+MCTS、4位強化学習、5位強 化学習+MCTS(AlphaZero)

Slide 19

Slide 19 text

19 Lux AI ● フィールドの木、石炭、ウランを集めて厳しい夜を生き残るゲーム ○ 1 ターンに複数のユニット (workers / carts) を操作する ○ 盤面サイズがランダム(結構大きい場合もある) ● 1 位解法 ○ 強化学習 (IMPALA, UPGO, TD(λ)) ○ NN のアーキテクチャに Squeeze Excitation を含む ● 2位強化学習(PPO,ResNet) 4位模倣学習(SENet)、5位模倣学習(UNet)、6位模倣学 習(UNet)

Slide 20

Slide 20 text

20 Kore 2022 ● 宇宙船ゲーム ○ 造船所から艦隊を飛ばしてフィールドの kore を集める ○ 艦隊の航行計画は出航と同時に決める ○ 出航済みの艦隊の航行計画は相手プレイヤーからも見える ○ 行動空間が組合せ論的に増えるので超広い ● 1 位解法 ○ ルールベース ■ 5000 行以上の Python コード ● 2位ルールベース、3位ルールベース、4位ルールベース、5位ルールベース

Slide 21

Slide 21 text

21 解法まとめ 優勝解法 2位以降    Halite ルールベース ルールベース ルールベース 模倣学習 ルールベース    Football 強化学習 強化学習 強化学習 強化学習 強化学習    RPS 特殊 特殊 特殊 特殊 特殊    MAB 特殊 特殊 強化学習 特殊 特殊    Hungry Geese 強化学習 模倣学習 強化学習 強化学習 強化学習    Lux AI 強化学習 強化学習 模倣学習 模倣学習 模倣学習    Kore ルールベース ルールベース ルールベース ルールベース ルールベース

Slide 22

Slide 22 text

22 所感 ● 強化学習思ったより使われてるじゃん ○ KL Divergence がどうとかという話もよく出てきた印象 (RL わからん) ○ RL わからんので次にシミュレーションコンペ来た時とかに勉強したい ● DQN 誰も使ってないじゃん

Slide 23

Slide 23 text

23 結局いつ強化学習は強いのか? ● わからん ○ 行動空間が広過ぎない、行動の良し悪しがすぐ結果として現れるといったポイント はありそう? ○ ちゃんと Discussion 読めばそのコンペで何が強そうなのかわかるのかもしれな い

Slide 24

Slide 24 text

24 3. おまけ: 参加に役立つ情報 参加して。

Slide 25

Slide 25 text

25 言語について ● 基本的に Python でエージェントを作成することになるが、任意のファイルを同梱して提 出できるので、同梱したプログラムを呼び出す Python プログラムを提出すれば任意の 言語で作成したエージェントを動作させられる ○ Lux AI のように、様々な言語で提出するためのキットを提供している コンペもある

Slide 26

Slide 26 text

26 Kaggle Environments ● シミュレーションコンペのだいたい全てが詰まったモジュール ● ローカルで対戦とかしたい場合はインストールする必要がある ● Kaggle notebook にもインストールされているのでちょっと試す時はそれで ● 内容物 ○ 実行環境 ○ 各ゲームの実装 ○ Docker 関連 ○ API

Slide 27

Slide 27 text

27 Kaggle Environments - 実行環境 ● 動かす方法は README.md の通り ● env.run の引数にエージェントのリストを渡して対戦を行う ○ エージェントには Python の関数、Python スクリプトのパス、ゲームごとに設定 されたデフォルトのエージェント名などを指定できる ○ スクリプトのパスが渡された場合は、その中で最後に定義された関数がエージェン トとして扱われる ■ こういうのも OK っぽい →

Slide 28

Slide 28 text

28 Kaggle Environments - 各ゲームの実装 ● kaggle-environments/kaggle_environments/envs/ に各ゲームの実装がある ● 複雑なゲームの場合、細かいルールは実装を見ないと把握できないことがある

Slide 29

Slide 29 text

29 Kaggle Environments - Docker 関連 ● kaggle-environments/docker/ に、評価環境で使われる Docker 環境の情報があ る

Slide 30

Slide 30 text

30 Kaggle Environments - API ● 評価環境での対戦のリプレイを取得する API が提供されており、それを叩くための関 数 が kaggle-environments/kaggle_environments/api.py にある ● 叩いていいのは 1 分に 60 回まで、1 日に 3600 回まで ● Meta Kaggle にエージェントのレート変動の記録などがあるので、それと併用すると良 い

Slide 31

Slide 31 text

31 提出ファイルの作成方法 (1 / 2) ● Python スクリプト単体または .tar.gz で固めた複数のファイルを提出できる ● ファイルサイズの上限は 100 MB

Slide 32

Slide 32 text

32 提出ファイルの作成方法 (2 / 2) ● Python スクリプトを提出する場合 ○ Kaggle Environments で対戦させる場合と同じようなファイルを作る ● 複数のファイルを提出する場合 ○ エージェントとなる関数を含んだファイルの名前は main.py とする ○ 評価時、.tar.gz は /kaggle_simulations/agent に展開されるが、作業ディレク トリは /kaggle/working となる ■ 例えば、Python スクリプトを分ける場合は以下のようなコードを最初に入れる ● sys.path.append(“/kaggle_simulations/agent”) ○ 固めるコマンドの例 ■ tar.cvzf submission.tar.gz main.py model.py parameters.pth

Slide 33

Slide 33 text

33 その他 ● エラーのログ ○ ゲーム画面からログをダウンロードしてエージェントの標準出力 /標準エラー出力を 確認できる ○ ログは自チームのものだけ見ることができるので安心 ○ 各ターン 1024 文字以内、それ以上は切り落とされる ● エージェントは独立したコンテナの中で動作、相手からの干渉は受けない ● 評価環境のリソースは、最も新しい情報 (結構古い) で 1.6 CPUs / 8GB RAM

Slide 34

Slide 34 text

© DeNA Co.,Ltd.