TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】60ブロック768フィルタモデルの学習

最近のコンピュータ将棋では、氷彗をはじめとしてNNUE系が、Stockfishの手法を取り入れることで棋力を伸ばしている。
また、ディープラーニング系のモデルを知識蒸留することで、モデル精度も向上している。

それと比較して、dlshogiはやや停滞気味で、序中盤の精度が高いという強みも、大規模な定跡が整備されつつあり、活かせなくなっている。
電竜戦TSECのような未知の局面では、強さを発揮しているが、平手開始局面からの大会だと、定跡でほぼ終盤から開始して、後手番でやや先手有利から覆すことができるかが勝負になっている。
それには、終盤の読みの精度が重要になり、現状ではディープラーニング系よりNNUE系の方が有利な展開である。

終盤の精度をどのように向上させるか

方向性は、主に以下の2つがあると考える。

前者は、軽量モデルとの組み合わせや、Leela Chess Zeroで検証されているようなDAGを考慮した探索などがある。

後者は、シンプルにモデル精度を向上させるアプローチである。
モデル精度を上げるためにパラメータ数を増やすと、探索速度が落ちるため、精度と速度はトレードオフの関係にある。

昨年の第5回の電竜戦までは、モデルサイズを40ブロック512フィルタまで増やすことで探索速度が落ちても強くなる傾向が確かめられていた。

今年の第35回世界コンピュータ将棋選手権では、50ブロック640フィルタのモデルを学習したが、同一持ち時間では強くならなかった

今回は、さらにパラメータ数を増やして、60ブロック768フィルタのモデルを学習した。

60ブロック768フィルタ

訓練データ
  • 50ブロック640フィルタのモデルから知識蒸留したデータ: 約10億局面
  • dlshogiの自己対局+NNUE系との対局データ: 約28億局面

データ量は、50ブロック640フィルタを学習した際より少しだけ増えているが、誤差程度である。
50ブロック640フィルタのモデルは、40ブロック512フィルタのモデルから知識蒸留したデータを使用したので、データの質は良くなっている。

学習結果


floodgateの棋譜に対する、評価精度は、方策、価値ともに向上している。

強さ

持ち時間400秒1手2秒加算、中終盤互角局面で測定した結果は以下の通り。
使用GPU:H100 PCI

   # PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 nnue-8th        :    45.0   20.7   301.5     517    58     100  264   75  178    15
   2 pre60_50x640    :   -11.6   20.3   254.0     529    48      89  221   66  242    12
   3 pre66_60x768    :   -33.4   20.6   229.5     524    44     ---  199   61  264    12

White advantage = 128.85 +/- 11.97
Draw rate (equal opponents) = 14.06 % +/- 1.34

pre60_50x640が50ブロック640フィルタのモデル、pre66_60x768が今回学習した60ブロック768フィルタのモデルである。
nnue-8thは基準としてリーグに加えているNNUE系のソフトである。

dlshogiの定跡から抽出した中終盤の互角局面で、終盤の読みの強さを測っている。

結果は、60ブロック768フィルタのモデルは、同一持ち時間で終盤が弱くなることが確かめられた。


なお、同一ノード数では、60ブロック768フィルタのモデルの方が強くなっている。

   # PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 nnue-8th        :    44.4   21.1   286.0     482    59     100  265   42  175     9
   2 pre67_60x768    :    -8.9   19.8   237.0     491    48      93  217   40  234     8
   3 pre60_50x640    :   -35.5   20.9   211.0     495    43     ---  187   48  260    10

White advantage = 20.60 +/- 12.31
Draw rate (equal opponents) = 9.00 % +/- 1.04

pre67_60x768が60ブロック768フィルタのモデルである。
※ファインチューニングした後のモデルで、上記と異なっている。
※ファインチューニングで弱くなっていることに後で気づいたので、実際はこれより強いはずである。

ファインチューニングの効果

50ブロック640フィルタのモデルから知識蒸留したデータ 約10億局面を除いて、dlshogiが評価が誤っていた局面からの対局の棋譜を加えたデータでファインチューニングを行った。

   # PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 nnue-8th        :    44.7   13.2   978.0    1718    57     100  853  250  615    15
   2 pre60_50x640    :    14.2   12.5   891.5    1742    51      98  800  183  759    11
   3 pre66_60x768    :   -18.6   22.6   229.5     524    44      89  199   61  264    12
   4 pre67_60x768    :   -40.3   16.0   495.0    1204    41     ---  439  112  653     9

White advantage = 110.16 +/- 6.71
Draw rate (equal opponents) = 12.50 % +/- 0.67

pre66_60x768がファインチューニング前、pre67_60x768がファインチューニング後のモデルである。

ファインチューニングしたモデルの方が弱いことがわかった。

事前学習で使用したデータの分布から外れるデータが増えたことが影響している可能性がある。
知識蒸留したデータだけを除いて、ファインチューニングした場合と比較してみるつもりである。

方策のみの強さ

ファインチューニング後のモデルをfloodgateに放流した。

2週間くらいで、レーティング2866となった。

50ブロック640フィルタのモデルは、2914だったので、floodagateのレーティングは上がっていない。

gikou2_1cには、方策のみで5回勝っている。


今後の改善方針

パラメータ数を増やすだけでは、H100ではこれ以上強くならないことがはっきりしてきたので、今後は別のアプローチを検討したい。

現在、ResNetのブロックをより多くTransormerの層に置き換えるモデルアーキテクチャの変更を試している。

また、訓練データの量については、パラメータ数を増やす一連の検証でそれほど増やしていないため、訓練データの量を増やした場合に強くなるかを検証したい。

まとめ

60ブロック768フィルタのモデルを学習した。
50ブロック640フィルタのモデルに比べて、評価精度は向上したものの、同一持ち時間中終盤互角局面で弱くなることが確認できた。
パラメータ数を増やしてもこれ以上強くならないことが明確になったため、今後はモデルアーキテクチャ変更や訓練データ量を増やすなど検討したい。