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

汎用行動選択モデルの3vs3対応 part08 学習率の調整【PokéAI】

強化学習アルゴリズムが正しくてもハイパーパラメータ設定により性能が大幅に変わってきます。1vs1バトル環境において、optunaによる調整を行ったところ学習率が最も大きな要素であることがわかりました。 しかしこのパラメータのまま3vs3バトル環境へ適用すると学習が不安定となったため、学習率を下げていました。3vs3に最適な学習率を調べました。最適な学習率はモデルのレイヤー数などに大きく左右されるため、具体的な数字に一般性はありません。

実験方法

異なる学習率で10,000バトルおよび100,000バトル強化学習させ、そのエージェント同士をレーティングバトルさせて平均レートを測定しました。学習・評価用パーティはランダムに生成した1000パーティです。

その他の学習パラメータ

trainer:
  dqn_params:
    epsilon: 0.3
    epsilon_decay: 2.0e-06
    epsilon_min: 0.01
    gamma: 0.95
    lr: 1.0e-04
  feature_params:
    party_size: 3
  model_params:
    bn: false
    n_channels: 64
    n_layers: 3
surrogate_reward:
  hp_ratio: 0.25
  alive_ratio: 0.25
match_config:
  random_std: 100.0

結果

10,000バトル時点での結果です。

学習率 平均レート
3e-6 1479
1e-5 1512
3e-5 1512
1e-4 1516
3e-4 1482

3e-6とは、 3 \times 10^{-6}のことです。念のため。

100,000バトル時点での結果です。

学習率 平均レート
3e-6 1515
1e-5 1514
3e-5 1503
1e-4 1481
3e-4 1487

10,000バトル時点では、1e-4~1e-5が良い領域で、小さくても大きくても強さが低下します。100,000バトルでは最良の学習率が3e-6でしたが、1e-5とはわずかな差でした。 結論としては、今回の実験設定では1e-5程度を設定するのが安定しそうです。しいて言えば、学習の最初のほうは学習率高めで、徐々に下げていくのが望ましいと考えられます。教師あり学習では徐々に学習率を下げるというテクニックは当たり前に行われています。学習率を下げるタイミングとして、学習を進めても正解率が変化しなくなったときという目印が使えます。しかし強化学習ではこのような使いやすい指標がないので、応用は比較的難しいといえます。

次回は3vs3環境でのQ関数を用いたパーティ生成について解説する予定です。実験自体は1か月前に終わっているのですが、執筆時間が取れず溜まってしまっています。