TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

将棋AIの実験ノート(正則化の影響の再測定)

先日、将棋AIのモデルにおけるエントロピー正則化とL2正則化の効果を測定したが、正しく測定できていなかったので再測定した。

前回の測定結果のtest accuacyが低いので、原因を調べていたら、ChainerのV5から追加されたstatic_graphを使っていたことが原因だった。
static_graphを使うと初期モデルからうまく学習ができなくなっていた。
学習済みモデルを読み込んで学習する場合は動作していて、詳しい理由はわかっていない。
理由は気になるが、ひとまずstatic_graphは使わないようにして再測定した。

測定方法、測定条件は前回と同じ。

測定方法

  • 10ブロック、192フィルタのモデル
  • PolicyとValueマルチタスク学習
  • Aperyで生成した1.4億局面をシャッフルして2500万局面分を学習
  • Momentum SGD(lr=0.01)
  • 初期モデルから学習
  • バッチサイズ1024
  • Policyの教師データは指し手(分布なし)
  • Valueの教師データは勝敗(引き分けあり)
  • Valueの損失は評価値によるブートストラップあり
  • テストデータにはfloodgateのR3500以上の棋譜を使用

条件

測定結果

損失
エントロピー正則化 L2正則化 訓練損失 (合計) テスト損失 (Policy) テスト損失 (Value) テスト損失 (評価値)
あり あり 1.5940012 1.0582352 0.59627414 0.6488074
なし あり 1.5837559 1.0621308 0.604218 0.6526976
あり なし 1.5987074 1.0657055 0.6020864 0.65500134
なし なし 1.5907097 1.0641797 0.60402834 0.65064603
テストaccuracy
エントロピー正則化 L2正則化 テスト accuracy (Policy) テスト accuracy (Value)
あり あり 0.36311078 0.66633254
なし あり 0.3576642 0.64967537
あり なし 0.36037222 0.6569107
なし なし 0.3598247 0.65009874
テストデータの局面を推論した際のエントロピー
エントロピー正則化 L2正則化 エントロピー (Policy) エントロピー (Value)
あり あり 2.1945772 0.63117784
なし あり 2.2205758 0.62397426
あり なし 2.2025535 0.6314291
なし なし 2.18667 0.63004863

考察

エントロピー正則化とL2正則化の両方を行った場合が、テストデータに対するPolicy、Value、評価値の損失が最も低くなっている。
テストデータに対するaccuracyも最も高い。
テストデータを推論した際のエントロピーは、Policyが3番目、Valueが2番目に高い。

L2正則化のみの場合、テストデータに対するaccuracyは、Policy、Valueともに最も低かった。
テストデータを推論した際のエントロピーは、Policyが最も高く、Valueが最も低い。
エントロピーからはL2正則化はPolicyに対しても機能しているようだが、accuracyは低くなっているので何とも言えない結果になった。

エントロピー正則化のみの場合、評価値の損失が最も高く、Valueエントロピーが最も高くなってこちらも何とも言えない。

正則化なしの場合、いずれのメトリックスも2番目か3番目になっている。

この結果からは、エントロピー正則化とL2正則化の両方を組み合わせて行うと、PolicyとValueの両方の精度に効果がありそうである。