前回バトルログを可視化してわかったのは、学習したエージェントの行動でタイプ相性などがある程度考慮されているものの、まだまだ改善の余地が大きいということでした。 この記事から、強化学習手法の改善を試みていきます。
今回は、初代ルールの3vs3のときに提案した、補助報酬を与える手法を金銀ルールでも試してみます。
考え方を再掲します。通常の強化学習では勝敗に対してのみ報酬が得られますが、3vs3では1vs1と比べて勝敗が決するまでのターン数(行動数)が多くため、各ターンの行動の良し悪しを判断しづらくなります。 より短い期間で行動を評価できるよう、相手にダメージを与えたり、相手を1体倒した時点で少量の報酬を与えることを考えます。
勝敗以外に強化学習アルゴリズムに与える報酬を補助報酬と呼ぶことにし、以下のように定式化します。
- ターンにおける状態を以下の記号であらわす。(自分のポケモンが倒れた場合にも行動選択が生じるので、厳密にはターンではなく回目の行動)
- ターンにおける自分の有利さをとする
- は正の定数(ハイパーパラメータ)
- ターンにおける行動に対する補助報酬を、とする
はバトル開始時に1、自分が全滅すれば0になります。ほかの式も同様です。HPが1でも残っている状態と完全に倒してしまうのは状況に差があるため、HPとは別に瀕死でないポケモン数の指標を含めています。は、自分が全滅に近ければ小さな値、相手が全滅に近ければ大きな値をとることになり、自分が有利な状態であるほど大きな値になるといえます。そして、ターン間の差をとることにより自分の有利が拡大すれば正の報酬、不利になれば負の報酬が与えられることになります。
この手法を実装し、実験しました。とし、他の学習条件は前回(id: 6ee)と同じです。
提案モデル(id: fdf)と前回のモデル(id: 6ee)、ランダムに行動するモデルの3つでレーティングバトルを行い、平均レートを比較しました。
モデル | 平均レート |
---|---|
ランダム | 1340 |
6ee | 1567 |
fdf(提案) | 1593 |
補助報酬を加えることにより、定量的に改善することがわかりました。ただバトル中の行動を観察すると、HPが減ったポケモンを控えのポケモンと交代する無駄な行動がみられました。自分のポケモンが倒されると負の報酬が発生するため、これを回避するため、勝敗全体で見れば不利な行動をとってしまう場合があるようです。短期的な報酬を与えることによる負の側面であるといえます。
次回は補助報酬のハイパーパラメータを調整してみます。