前回の記事から時間が空いてしまいましたが、今回はTech&AIの記事の更新です。
先日行われたWorlds2020(WCS2020)の準決勝2シリーズにおいて、ひっそりとですがVer2にアップデートしたBli2君の試運転とTwitterでの宣伝を行っていました。本記事では、進化を果たした勝利予想モデルの解説を行っていこうと思います。
自分の研究分野である「自然言語処理」の最先端の手法を構成する要素を多く用いているため、これまでの記事の中では最もLoLから遠ざかっています。詳細な説明は省いて、どのような狙いで当アップデートを行ったのかという点を中心に書いているので、大まかな主旨を分かっていただけると筆者としては嬉しいです!
まず最初に:問題設定の確認
Bli2君プロジェクトは、ドラフトでPickされた合計10体のチャンピオンから勝利チームを予想することを目標としたものです。
LoLをされたことがある読者の方ならここで引っ掛かるでしょう。LoLはたとえ同じプレーヤーが同じチャンピオンをピックしても、決して同じ結果にはならない深淵なゲームです。そんなゲームの勝敗をスタート時点で予測しようというのは当たるはずもなく、ナンセンスな問題設定と思われて当然です。
少し話を逸らすと、この「Bli2君プロジェクト」はLJLのシーズン中、実況解説の生中継で登場したブリッツ君(表記不明、情報募集)にインスパイアされています。つまり、観戦の1要素として楽しんでもらえるようなシステムを目標にしています。
なので、極論を言うと、正確に勝利チームを予想する必要はなく、「どうしてそのチームを勝利予想したのか」といった情報を可視化して、ユーザーに楽しんでもらえればよいということです(予測を外し過ぎると面白くないので、予測精度の向上にも取り組みます)。
本記事では、前置きはこれぐらいにしておきますが、よかったら過去の記事も読んでみてください。
Bli2君アップデート内容を解説!
まず最初に断っておくと、前Verまで使用していた機械学習モデルとは完全に異なる構造になっています。なので、この後1つずつ構成要素を解説していきますが、とりあえずモデル全体のイメージを載せますね。
いや~、自分で作っておいて言うのもおかしいですが、かなり複雑に見えますね... ただ、それぞれ意味のある要素なので順番に理解していけば納得いただけると思います。
上の概要図の見方ですが、緑色がモデルの構成要素、紺色が入力から出力までの情報を表現するベクトル、オレンジ色がそれぞれの要素の解釈になります。また、BlueチームとRedチームで区別したい部分は、青と赤で色分けしています。左下が一番最初の入力情報で、矢印にしたがって右上が最後の予測値になっています。
専門用語は誤解を生まないようそのまま用いているので、検索していただくと適切な情報にたどり着けると思います。
これから、それぞれの要素がどのような役割を持つのかについて解釈していきます。より詳しい仕組みを知りたい方は、「MultiHead Attention」と「Additive Attention」に関しては以下の記事がオススメです。
Embedding
前Verではワンホットベクトル(0 or 1)で表現していましたが、今回は、分散表現という手法を用います。この手法は、0 1だけでなく少数の値を用いて表現するため、より低次元で表現することができます。LoLのチャンピオンは151体存在するので、前Verまでのワンホットでは151次元のベクトルで表現していましたが、本Verで用いる分散表現では、32または64次元のベクトルでチャンピオンを表現しています。
次元が大きすぎると、機械学習や深層学習のモデルが学習しにくいという問題が一般に言われていて、分散表現はこの問題にアプローチしています。
MultiHead Attention
この部分では、チャンピオン間の関係を学習してベクトルを変換することを目的としています。前Verのモデルでは、味方とシナジーや対面相性を考慮できる仕組みがありませんでした。
例えば、midルシアンの場合、CCのないグレイブスやニダリーよりも、リリアの方が相性がよいと言われています。また、グレイブスは序盤から積極的に相手ジャングルにインベードする動きが強い行動ですが、midがシンドラの場合サポートしてくれて安心感がありますが、カサディンだった場合はむしろサポートしてあげないといけなくなります。このように同じチャンピオンであっても、味方や相手のピック状況によってゲームにおける特徴は変わってきます。
そのため、今回のアップデートで他のチャンピオンとの関係を考慮できる仕組みを取り入れました。それが「MultiHead Attention」です。
本手法は自然言語処理(NLP)の分野で提案された手法です。上で説明した問題と似たものが、NLPの分野にも存在します。例えば、「空」という単語に注目しましょう。
- 車のガソリンタンクが空になった。
- 今日は雲一つない綺麗な空だ。
上の2つの文両方で、「空」という単語が使われていますが、それぞれ意味は違います。ですが、各単語に対応したベクトルだけでは、この意味の違いを表現することはできません。この問題点に対して、周囲の単語の情報を考慮すれば多義語を表現することができるという仮説のもと、「MultiHead Attention」という仕組みが考え出されました。NLPの分野では、これをベースにした手法が2020年現在の最先端を走っています。
Additive Attention
前回までのモデルでは、ゲームのパッチにおけるメタをよく表現したチャンピオンの重要度が学習されていました。それも正しいのですが、それだけでは不十分だと考えました。なぜなら、味方チームの構成や対面との相性によっては、チャンピオンのゲームに対する影響力は変化するからです。
したがって、「MultiHead Attention」でピックされたチャンピオン間の関係性を考慮した後に、チーム内でのチャンピオンの重要度の算出と、その重要度に基づいた情報の変換が必要です。
そこで、「Additive Attention」を用いることにしました。これもNLPの手法です。
例えば、映画や飲食店のレビューコメントについて、評価がポジティブなのかネガティブなのかを分類したい場合、文中にある全ての単語が分類に重要なのではなく、「不満」や「面白かった」といった単語が重要になります。
予測したい対象にとって重要な単語の重みが大きくなるように学習するのが、今回用いる「Additive Attention」の特徴です。算出される重要度に基づいて単語ベクトルの重み付き平均を計算し、それをもとに予測を行います。
「Additive Attention」を使うと、勝利予測に対するチャンピオンの重要度を得ることができます。各チャンピオンに対して算出された重要度の値は、Bli2君の勝利予想チームについて考察する上でとても重要な要素になりそうです。
その他のポイント
時間帯ごとにモデルを学習させるのは変わらず
これは前回のマイナーアップデートから引き続きのポイントです。
チャンピオンにパワースパイクの違いがあるように、チームの勝ちやすい時間帯にも違いがあります。それを混ぜて同じモデルに学習させると、難易度が非常に高くなってしまいます。そこで、試合時間を25分まで25分~35分、35分以降の3つにデータを分割して、モデルを学習させています。
使用するデータを前回から増やす
前回までは、Patch10.19の韓国・北米・EU地域のチャレンジャーのSoloQのゲームデータを使用していましたが、今回のモデルは複雑になっているためより多くのデータが必要です。
そこで今回は、Patch10.18~10.20の同様のデータで最初に学習したあと、最後にWCSで使用されているPatch10.19のデータで学習しています。また、評価用のデータもPatch10.19のみで用意しています。
Patch10.18と10.20をデータを増やすために用いた理由としては、Patch10.19からそれぞれ調整が1つだけで、メタなどチャンピオン間の力関係が似ていると、筆者が個人的に判断しました。
評価データセットにおいて、Bli2君の予測精度はそれぞれの時間帯で、60%、55%、76%になりました。難しいことを予測させているわりには、それなりに良い精度が出ているなという印象です。
Case Study:TES vs Suning Game1
ここまで説明してきたモデルが実際どのような挙動をするのか分析していきます。
入力には先日行われたWorlds2020準決勝TES vs SuningのGame1を用います。実はTwitterでもオンタイムで予測を行っていました。
#Bli2kunProject Win Prediction!!#Worlds2020 Semifinal TES vs Suning
— ニッキーの日記 (@YutaBlog555) 2020年10月25日
Game1 TES Blue
~25min: Blue, 25~35min: Red(54%), 35min~: Red ⇒ Red team win(2/3 votes)
MultiHead Attentionのattention可視化
上図で複数あるのは、”MultiHead”という名前から分かるように、チャンピオンの関係性を学習する機構を複数設けることができるからです。25分までのデータで学習する際、4つに設定する時が予測精度が最も良かったので採用しています。
図の見方としては、左上がBlueチーム内・右下がRedチーム内のシナジーを表していて、右上はRedチャンピオンのBlueチャンピオンに対する影響、左下はその逆を意味しています。青点線上は自身の情報を考慮しているかどうか、赤点線上は対面の情報を考慮しているかどうかです。
それぞれが異なる関係性を学習している様子が分かりますね。一番左は、パンテオンとラカンのサポート2体が、味方のチャンピオンたちにそれぞれ影響力があるとみていますね。また、リーシンとウーコンのシナジーとウーコン対面のジェイスに対する影響力を重く見ています。実際、ウーコンはジェイスのカウンターとしてPickされているので、あっているかもしれませんね。その他だと、3つ目はRedチームのエズリアルがBlueチームの多くのチャンピオンに対して影響力があると出ているのが特徴的ですね。
Additive Attentionのattention可視化
これは勝利チームを予測する上で、各チーム内でどのチャンピオンが重要かを表した図ですね。
Blue側はジェイスの35分以降の時間帯で重要度が高く出ているのが、LoLを知っている人からすれば直感的ではないですね。Jhinの重要度が高いのは、メタを考えても違和感はないかなと思います。
Red側を見ると、序盤のリーシンと中盤のウーコンの重要度が高くなっていますね。実際の試合を見ても、カウンターを取ったtopレーンをリーシンが助ける動きと、育ったウーコンが中盤以降の集団戦で暴れる、という展開だったと思うのでかなりいい線に言ってるなという感想です。
最後に
本記事では、LoL勝利予想モデルBli2君のアップデートについて説明してみました。いかがだったでしょうか。
実際に運用してみて、3つの時間帯の予測結果が同じ1票を持つのは問題かもしれないというのが分かってきました。(というのは、今回設定している3つの時間帯のそれぞれのデータ数は、1:3:0.5ぐらいでした...)調整ポイントですね。
また、これまではピックされたチャンピオンの情報を、どのようにモデルに学習させるかという点に注力してきましたが、プレイヤー情報を加えると予測精度が上がるかもしれません。これもFuture Workです。
今後も関連記事を更新していく予定なので、ぜひチェックしてみてください。また、過去の関連記事は以下のリンクから見ることができます。読んでいただけると嬉しいです!