Kaggleコンペティションの振り返り

こんにちは! 今回の記事はデータ基盤チームに所属しているエンジニアよりお届けいたします。 ANDPADのデータ基盤チームはプロダクト利用状況の分析、分析基盤の整備、機械学習技術のプロダクトへの導入検討など主にデータに関わる業務を担当しています。 チームメンバーには技術研鑽に積極的な方が多く、雑談の際はプライベートで行っている分析の話やデータ分析の大会の話で盛り上がることがあります。 本記事では過去に参加したKaggleコンペティションについての話を紹介させていただきます。チームの雰囲気について感じていただけますと幸いです。

今回参加したコンペティション

https://www.kaggle.com/c/lux-ai-2021

Lux AIというコンペティションで、強いゲームAIを開発することが目的となります。

Lux AIは二人で行うターン制の対戦ゲームです。それぞれのプレーヤーはユニットに命令を出し、移動したりリソースを集めたり新たなユニットを建設したりしてスコアを稼ぎます。360ターン経過時に相手よりも多いスコアを所持していると勝利となります。また、推論はCPUのみで制限時間内に行う必要があり、限られたリソースを有効活用することも求められるコンペティションでした。 詳細なルールを知りたい方はこちらをご覧ください。 実際のゲームの様子はこんな感じになります。

参加者が提出したプログラム同士を戦わせることでレーティングが算出され、大会終了時点で保持しているレーティングに基づき順位が決まります。

難しいと感じた点

1ターンの間に複数のユニットに対して様々な命令を出すことができる点が難しそうだと感じました。

今回のゲームLux AIは、相手のユニットの位置やリソースの量など盤面の情報がすべて把握可能な完全情報ゲームと呼ばれるタイプのものとなります。 完全情報ゲームには囲碁や将棋などがありますが、Lux AIはそれらと異なり1ターンの間に複数のユニットを動かすことができます。また、ユニットは移動だけではなくリソースの転送など様々な行動を行うことができます。盤面の広さも最大32*32マスと広いです。

ゲームを行う際は、自分がこう打ったら相手はこう打ってくるだろうから次はこう打って・・・というように盤面の先読みを行うことで良い手を見つけることが可能です。 いろんな命令が出せるゲームほど先読みするべき盤面数が多くなり強いAIを作ることが難しくなると一般的に言われています。

このことから数多く先読みして価値を推定する手法よりも今の盤面の価値をうまく評価できる手法が有用なのではないかと考え、ニューラルネットワークを用いた強化学習に取り組む方針でコンペティション参加計画を立てました。

コンペティションの様子と結果

本コンペティションは6ヶ月間にわたり開催されました。Toad Brigadeチームが序盤から1位を走り続け、最後は他チームに大きな差をつけて優勝しました。 Discussionを見ると、Toad Brigadeチームのユニットの振る舞いをうまく模倣できたチームがランキング上位に入ったようでした。

私は前半に強化学習に取り組みましたがうまくワークさせることができず、後半から模倣を行う方針に切り替えました。 過去の同種のコンペティションの解法を参考に推論時間を短縮する工夫や学習データの多様性を上げる工夫を取り入れ、最終的に26位となり銀メダルをいただくことができました。

学んだこと

Toad Brigadeチームは強化学習を成功させており、コンペティション終了後に公開された情報から多くのことを学ぶことができました。

https://www.kaggle.com/c/lux-ai-2021/discussion/294993

ニューラルネットワークのアーキテクチャ

  • ResNetベースにsqueeze-excitationを追加した構造
  • 出力はユニットに対する命令(32x32マスxN種類のアクション)と勝敗見込み(勝ち:1, 負け:-1])の2種類
    • この形状にすることで1回の推論で全ユニットに対する命令を生成することが可能
  • 連続値の入力はそのまま利用、離散値の入力は埋め込み層を経由
  • 余計な箇所に情報が流出しないように、各畳込み層の後にマップサイズに応じたゼロ埋めを行った

強化学習のアルゴリズム

対戦時の工夫

  • Test Time Augmentation
    • このゲームは東西南北に区別がなく、盤面を回転させたとしても同じ状態だとみなすことができた。盤面を180度回転させた状態についても同時に推論を行い平均を取ることでよりよい推論が得られる
  • ユニットの行動は確率が最大のものを常に選択した
    • 学習時は行動の多様性を確保するために予測した確率に基づき行動をサンプリングして決定していたが、対戦時は予測した確率が最大であるアクションを常に選択するようにした
  • ルールベースの導入
    • 明らかに不利になる行動を行わないようにロジックを追加することで下位の対戦相手に対する挙動が安定しレーティングを早く上げることができた。ただし最終的に到達する強さに変わりはなかったとのこと

次回コンペティション

Lux AIは次のコンペティションを準備中とのことでした。興味を持たれた方は是非参加してみてください。 私は今回得た知見をもとにさらなる上位を目指したいと思います💪

mobile.twitter.com

最後に

データ基盤チームはANDPADのミッション「幸せを築く人を、幸せに。」を実現するべく日々の業務に取り組んでいます。 データの力でプロダクトを輝かせることに興味の有る方はぜひご応募ください! また、ANDPADではデータ基盤チームに限らず様々なチームがエンジニアを募集しています。 興味を持たれた方は下記リンクからご応募ください。

engineer.andpad.co.jp