機械学習周りのプログラミング中心。 ポケモンバトルAI本通販中(4/5まで)

汎用行動選択モデルの学習 part01 構想【PokéAI】

今までポケモンバトル中の行動選択を行うモデルは、パーティごとに別個のパラメータを学習していました。しかし今後の発展を考えるとこの方式は難点があり、あらゆるパーティの行動選択を行える単一のモデルを学習したいと思いました。

昨年8月を最後にイベント参加に関する記事ばかりになっていたのですが、研究記事も上げていきたいと思います。 その原因として、イベントの締め切りがあるので研究を急ぐ必要があり記事執筆の優先順位が低かったことと、うまくいくかわからないアイデアを中途半端な状態で記事にすることに対するためらいがありました。 これからは、ブログではどんどん試したことを記事にしていって、1本のストーリーにまとまる部分を取捨選択して本にするという方式をとっていきたいと思います。 アイデア自体に矛盾があったり、実験してみてもうまくいかない、実装が難しくて放棄するということがあるかもしれませんが、ご了承ください。

従来の行動選択モデルは、パーティごとに別個のパラメータを学習します。モデルの入力はバトル中の状態で、相手のポケモンの種族、自分と相手それぞれのHPの残り比率、ランク補正状態などです。モデルの出力は技1~4それぞれの優先度を表す値となります。今回の議論ではポケモン交代は本質的ではないため、ポケモン1匹だけを出す1vs1バトルで考えます。モデルの入力として、自分のポケモンの種族やどの技を覚えているかという情報はありません。技1~4が何であるか知らずとも、水タイプの相手に最大ダメージを与えられるのは技1で、炎タイプの相手に最大ダメージを与えられるのは技3であるというような情報を勝敗から学習していけば十分であるためです。 この方式の問題点は、パーティ構成が変われば一から学習しなければならないという点です。プロジェクトの大きな目標として、パーティ構成とバトル中の行動選択の両方を最適化したいと考えています。様々なパーティを試行錯誤して作る際、過去に学習した行動選択モデルの情報が使えれば、学習コストを下げられる可能性があります。自分のパーティ構成がなんであろうと、水タイプの相手には10まんボルトやメガドレインが有効である、というような知識は有用です。そのような知識をどのパーティでも共有し、新しく生成されたパーティでも、相手が水タイプで10まんボルトれいとうビームを覚えているなら10まんボルトを選ぶということを行動選択モデルの学習なしに実現できれば、様々なパーティの強さを(ランダムに行動させるより正確に)評価することが容易になります。 パーティの技1~4の効果が固定という前提が取り払われれば、別のメリットとして、「へんしん」等で自分の技が変化した場合にも対応することができるようになります。ただし、タイプ相性すら難儀している現状では難しすぎる課題のため当分は取り組みません。

これを実現するために、自分のパーティにかかわらず1つのモデルパラメータを共有する「汎用行動選択モデル」を学習したいと思います。従来の行動選択モデルは「パーティ固有行動選択モデル」と呼ぶことにします。汎用行動選択モデルでは、入力として自分のパーティのポケモンの種族と覚えている技も与えて、ターンごとにどの技を使うかを出力します。パーティ固有行動選択モデルではあくまで自分が覚えている技4つのどれを選択するかだけを考慮すればよかった一方、汎用行動選択モデルでは100種類以上存在する技・ポケモンすべての運用を知っている必要があるため、学習すべきパラメータ数が増加します。また、どのようなモデル構造(ニューラルネットワークの構造)にすればいいかも明らかではありません。パーティ固有行動選択モデルでも勝敗から強化学習した結果のモデルが「こうかはいまひとつ」な技を選択してしまうなど難ありの状況のため、パラメータ数が増加したモデルの強化学習は難しいと予想しました。

この課題を解決するアイデアとして、強化学習よりも容易である教師あり学習で汎用行動選択モデルを学習させ、どのようなモデル構造ならうまく学習できるのかを検討することにしました。教師データ、すなわちバトルの状況と適切な行動(技)の組が必要です。しかしそのようなデータはどこかで拾えるわけでもないので自作する必要があります。1つの方法は人力で作成することですが、数千件必要であろうサンプルを作るのが大変そうだし条件が変わるたびに作り直しになるので不採用です。そこで今回は、パーティ固有行動選択モデルを多数のパーティに対して学習させ、モデル間で対戦させてバトルの状態とモデルが選んだ行動の組を収集し、疑似的な教師データとして用いることにしました。

今回の研究の流れは次のようになることを想定しています。

  • ポケモン・技を候補にするとパーティ固有行動選択モデルの必要数が非常に多くなるため、適宜削減する
  • ランダムに生成したパーティに対してパーティ固有行動選択モデルを学習させる
  • 学習したモデルを対戦させて、バトルの状態(自分のパーティの情報を含む)と選択した行動のペアを収集し教師データとする
  • 汎用行動選択モデルの構造について教師あり学習で試行錯誤する
  • 汎用行動選択モデルを直接的に強化学習させる