TadaoYamaokaの日記

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

将棋AI実験ノート:ブロック数とフィルタ数とSE有無の比較

同一データを学習した際に、ResNetのブロック数とフィルタ数とSE(Squeeze-and-Excitation)有無により、精度、強さがどう変わるかを比較した。

比較対象

  • ResNet 10ブロック、192フィルタ
  • ResNet 15ブロック、224フィルタ
  • ResNet 20ブロック、256フィルタ
  • 上の3パターンそれぞれについて、SE有無

教師データ

  • floodgate R3800以上 2019~2021/5 (mateで打ち切り)
  • 水匠3改で、100万ノード固定。初期局面から24手までにランダム16回(評価値最善手から200以内)
  • BURNING BRIDGES(TSEC電竜)で、100万ノード固定。初期局面から24手までにランダム16回(評価値最善手から200以内)
  • dlshogi with GCTで、3000プレイアウト

合計約3億局面

なお、やねうら王でhcpe3を生成できるように改造した。※生成が終わっても終了しないバグあり(原因不明。誰か直してくれると助かります)。

学習

  • 5エポック
  • 4096バッチ
  • 学習率 0.04から1エポックごとに半分
  • 平均化、評価値補正あり
  • 2エポックからSWA開始
  • 初期値から学習
  • 方策の分布を学習(dlshogi with GCTの棋譜のみ)

精度比較

テストデータに、floodgateのレート3500以上の対局の棋譜からサンプリングした856,923局面を使用した。

SWAなしモデル
  • SEなし
モデル 方策損失 価値損失 方策正解率 価値正解率 方策エントロピー
10ブロック 1.6379119 0.51276293 0.4730206 0.72314205 1.51876836
15ブロック 1.61451681 0.54952968 0.47836673 0.70189649 1.51121722
20ブロック 1.60430686 0.5144527 0.4825369 0.71952424 1.41729831
  • SEあり
モデル 方策損失 価値損失 方策正解率 価値正解率 方策エントロピー
10ブロック 1.64183599 0.51881258 0.47337911 0.71709992 1.48604457
15ブロック 1.62213967 0.5027243 0.47863532 0.73173113 1.43584003
20ブロック 1.60740022 0.50509531 0.48131072 0.72798019 1.43475938

ブロック数が大きいほど精度が高くなり、SE有無ではSEありの方が精度が上がる。
(SEなし15ブロックの価値は、10ブロックよりも価値の損失が上がっているが、その分方策の損失が低くなっている。
 方策と価値は交互に学習が進むため、エポックごとにどちらの損失が下がるかが入れ替わることがある。)

SWAありモデル
  • SEなし
モデル 方策損失 価値損失 方策正解率 価値正解率 方策エントロピー
10ブロック 1.57109508 0.49425657 0.48709244 0.7399652 1.51186802
15ブロック 1.54070064 0.48825147 0.49433273 0.74414004 1.47669404
20ブロック 1.5281703 0.48567744 0.49743904 0.74624089 1.46332859
  • SEあり
モデル 方策損失 価値損失 方策正解率 価値正解率 方策エントロピー
10ブロック 1.57355652 0.49556847 0.48687874 0.73878457 1.4777351
15ブロック 1.5464818 0.48941931 0.49345689 0.74358067 1.43782014
20ブロック 1.53439988 0.488463 0.49672319 0.74488159 1.41932988

ブロック数が大きいほど精度が高い傾向は、SWAなしモデルと同じである。
SWAなしと比較して、SWAありの方が損失が大きく下がっており、精度が高くなっている。
意外なことに、SE有無では、SEなしの方が精度が高い。
SEとSWAは相性が悪いようだ。

強さ比較

SWAあり、SEなしのモデルについて、強さを比較した。
dlshogiのエンジン設定は2GPU、3スレッド。

持ち時間1分、1手1秒加算
  • ResNet10ブロック vs GCT電竜(model-0000167) vs 水匠3改(8スレッド)
# PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)     W    D     L  D(%)
1 susho3kai8th    :     5.0    6.3  2474.5    4847    51      90  2341  267  2239     6
2 model-0000167   :    -2.1    6.4  2404.5    4853    50      55  2225  359  2269     7
3 resnet10        :    -2.8    6.3  2396.0    4850    49     ---  2209  374  2267     8
  • ResNet10ブロック vs ResNet15ブロック vs 水匠3改(8スレッド)
# PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)     W    D     L  D(%)
1 resnet10        :    12.5    6.3  2642.0    5020    53      63  2498  288  2234     6
2 resnet15        :    10.7    6.5  2624.0    5022    52     100  2479  290  2253     6
3 susho3kai8th    :   -23.2    6.3  2264.0    5018    45     ---  2111  306  2601     6
  • ResNet10ブロック vs ResNet20ブロック vs 水匠3改(8スレッド)
# PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)     W    D     L  D(%)
1 resnet10        :    20.2    7.1  2093.0    3857    54     100  1953  280  1624     7
2 resnet20        :    -9.0    7.2  1855.0    3857    48      63  1699  312  1846     8
3 susho3kai8th    :   -11.2    7.3  1835.0    3852    48     ---  1691  288  1873     7

10ブロックの強さは、GCT電竜とほぼ同じになっている。
方策の分布を学習した場合でも強くできることが確認できた。
15ブロックと20ブロックの方が精度が高いが、10ブロックの方が強いという結果になった。

持ち時間5分、1手2秒加算
  • ResNet10ブロック vs GCT電竜(model-0000167) vs 水匠3改(8スレッド)
# PLAYER         :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
1 susho3kai8th   :    19.7   13.8   524.5     968    54      97  484   81  403     8
2 resnet10       :    -3.0   14.1   478.5     969    49      86  428  101  440    10
3 model-0000167  :   -16.7   14.2   452.0     973    46     ---  409   86  478     9
  • ResNet10ブロック vs ResNet15ブロック vs 水匠3改(8スレッド)
# PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
1 resnet15        :    11.3   13.5   515.0     984    52      86  476   78  430     8
2 susho3kai8th    :    -1.9   14.1   485.5     979    50      72  443   85  451     9
3 resnet10        :    -9.4   14.0   471.5     981    48     ---  428   87  466     9
  • ResNet10ブロック vs ResNet20ブロック vs 水匠3改(8スレッド)
# PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
1 resnet20        :     8.5   13.8   515.5     995    52      84  464  103  428    10
2 resnet10        :    -3.6   13.5   488.5     992    49      55  436  105  451    11
3 susho3kai8th    :    -4.9   13.0   484.0     989    49     ---  442   84  463     8

持ち時間が長い場合は、10ブロックより15ブロック、20ブロックが強いという結果になった。
持ち時間が長い場合は、ブロック数が大きい方が有利と言えそうだ。
この持ち時間では15ブロックが一番良さそうである。
さらに持ち時間が長くなると20ブロックの方がよくなる可能性がある。

また、10ブロックのモデルがGCT電竜よりも強くなっている。
持ち時間が長い場合は、方策の分布を学習した方が良さそうである。

まとめ

同じ教師データを使用して学習した場合、モデルのブロック数が大きいほど精度が上がることがわかった。
SWAなしの場合、SEありの方が精度が高くなる。
しかし、意外なことに、SWAありだと、SEがない方が精度が高くなった。
SEとSWAは相性が悪いようだ。

強さの比較では、持ち時間が短い場合は、10ブロックで指し手のみを学習するのが強そうである。
しかし、持ち時間が長くなると、大きいブロック数で、方策の分布を学習した方が強くなりそうであることがわかった。
GCTが電竜戦で優勝して、世界コンピュータ選手権では振るわなかったことを裏付ける結果となった。