機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

汎用行動選択モデルの3vs3対応 part04 補助報酬【PokéAI】

前回バトルログを可視化してわかったのは、学習したエージェントの行動でタイプ相性などがある程度考慮されているものの、まだまだ改善の余地が大きいということでした。 この記事から、強化学習手法の改善を試みていきます。

今回は、初代ルールの3vs3のときに提案した、補助報酬を与える手法を金銀ルールでも試してみます。

select766.hatenablog.com

考え方を再掲します。通常の強化学習では勝敗に対してのみ報酬が得られますが、3vs3では1vs1と比べて勝敗が決するまでのターン数(行動数)が多くため、各ターンの行動の良し悪しを判断しづらくなります。 より短い期間で行動を評価できるよう、相手にダメージを与えたり、相手を1体倒した時点で少量の報酬を与えることを考えます。

勝敗以外に強化学習アルゴリズムに与える報酬を補助報酬と呼ぶことにし、以下のように定式化します。

  • ターン tにおける状態を以下の記号であらわす。(自分のポケモンが倒れた場合にも行動選択が生じるので、厳密にはターンではなく t回目の行動)
  • ターン tにおける自分の有利さを P(t) = \lambda_H (H_f(t) - H_e(t)) + \lambda_A(A_f(t) - A_e(t))とする
    •  \lambda_H, \lambda_Aは正の定数(ハイパーパラメータ)
  • ターン tにおける行動に対する補助報酬を、 P(t+1) - P(t)とする

 H_f(t)はバトル開始時に1、自分が全滅すれば0になります。ほかの式も同様です。HPが1でも残っている状態と完全に倒してしまうのは状況に差があるため、HPとは別に瀕死でないポケモン数の指標を含めています。 P(t)は、自分が全滅に近ければ小さな値、相手が全滅に近ければ大きな値をとることになり、自分が有利な状態であるほど大きな値になるといえます。そして、ターン間の差をとることにより自分の有利が拡大すれば正の報酬、不利になれば負の報酬が与えられることになります。

この手法を実装し、実験しました。 \lambda_H=0.25, \lambda_A=0.25とし、他の学習条件は前回(id: 6ee)と同じです。

提案モデル(id: fdf)と前回のモデル(id: 6ee)、ランダムに行動するモデルの3つでレーティングバトルを行い、平均レートを比較しました。

モデル 平均レート
ランダム 1340
6ee 1567
fdf(提案) 1593

補助報酬を加えることにより、定量的に改善することがわかりました。ただバトル中の行動を観察すると、HPが減ったポケモンを控えのポケモンと交代する無駄な行動がみられました。自分のポケモンが倒されると負の報酬が発生するため、これを回避するため、勝敗全体で見れば不利な行動をとってしまう場合があるようです。短期的な報酬を与えることによる負の側面であるといえます。

次回は補助報酬のハイパーパラメータを調整してみます。