nodchipのコンピューター将棋ブログ

コンピューター将棋ソフト「tanuki-」シリーズの実験結果を掲載しています。

tanuki- 2022-06-12 nnue-pytorch scaling

tanuki- 2022-06-11 nnue-pytorch max_epoch

実験内容

  • nnue-pytorch を用いた学習で、 scaling (kPonanzaConstant) の設定がレーティングに与える影響を調べる。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

シャッフル条件

生成ルーチン tanuki-シャッフルルーチン
qsearch() あり
置換表 無効

機械学習

機械学習ルーチン nnue-pytorch + やねうら王 https://github.com/nodchip/nnue-pytorch/tree/shogi.2022-05-23
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法 Ranger
batch-size 16384
threads 2
num-workers 2
gpus 1
features HalfKP
max_epoch 300
scaling (kPonanzaConstant) 600
勝敗項の教師信号 1.0

レーティング測定

対局相手 tanuki- 2022-04-01 halfkp_256x2-32-32 再実験 https://docs.google.com/document/d/1U2dtYgksApn9GYIUJEUtceE0Yc-0dfmx6kA44FopDXc/edit
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=5000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-.nnue-pytorch-2022-06-11 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数5000 先手勝ち2283(51.7%) 後手勝ち2137(48.3%) 引き分け580

engine1

勝ち1490(33.7% R-103.0 +-10.1) 先手勝ち784(17.7%) 後手勝ち706(16.0%)

宣言勝ち25 先手宣言勝ち13 後手宣言勝ち12 先手引き分け285 後手引き分け295

engine2

勝ち2930(66.3%) 先手勝ち1499(33.9%) 後手勝ち1431(32.4%)

宣言勝ち93 先手宣言勝ち45 後手宣言勝ち48 先手引き分け295 後手引き分け285

1490,580,2930

まとめ

nnue-pytorch を用いた学習で、 scaling (kPonanzaConstant) の設定がレーティングに与える影響を調べた。

学習ロスと検証ロスは、 scaling=361 の場合と比べて下がった。

レーティングは、比較対象と比べて R-103 ほど低かった。

学習ロスと検証ロスについては、定数を変更したことにより、出力がより教師データに近づいたのだと思われる。

レーティングについては、学習ロスと検証ロスが下がったからといって、必ずしもレーティングが上がるわけではないという事を表している。

今後は、元の値である scaling=361 で実験を進めていきたい。

tanuki- 2022-06-11 nnue-pytorch max_epoch

tanuki- 2022-06-11 nnue-pytorch max_epoch

実験内容

  • nnue-pytorch を用いた学習で、 max_epoch の設定が学習結果に影響を及ぼすかどうか調べる。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

シャッフル条件

生成ルーチン tanuki-シャッフルルーチン
qsearch() あり
置換表 無効

機械学習

機械学習ルーチン nnue-pytorch + やねうら王 https://github.com/nodchip/nnue-pytorch/tree/shogi.2022-05-23
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法 Ranger
batch-size 16384
threads 2
num-workers 2
gpus 1
features HalfKP
max_epoch 300
勝敗項の教師信号 1.0

レーティング測定

対局相手 tanuki- 2022-04-01 halfkp_256x2-32-32 再実験 https://docs.google.com/document/d/1U2dtYgksApn9GYIUJEUtceE0Yc-0dfmx6kA44FopDXc/edit
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=5000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-.nnue-pytorch-2022-06-09 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数5000 先手勝ち2294(52.8%) 後手勝ち2049(47.2%) 引き分け657

engine1

勝ち1752(40.3% R-58.9 +-9.8) 先手勝ち932(21.5%) 後手勝ち820(18.9%)

宣言勝ち14 先手宣言勝ち3 後手宣言勝ち11 先手引き分け338 後手引き分け319

engine2

勝ち2591(59.7%) 先手勝ち1362(31.4%) 後手勝ち1229(28.3%)

宣言勝ち70 先手宣言勝ち31 後手宣言勝ち39 先手引き分け319 後手引き分け338

1752,657,2591

まとめ

nnue-pytorch を用いた学習で、 max_epoch の設定が学習結果に影響を及ぼすかどうか調べた。

学習ロスと検証ロスは、問題なく下がっている。

レーティングは、比較対象と比べて R-58 ほど低かった。

学習ロスと検証ロスについては、大きな問題なく学習できていることを表していると考えられる。

レーティングについては、

https://docs.google.com/document/d/1ij4bEPo67Y7oR0YcFrC9scZVQx_RrqctZkcqyVmNayQ/edit

と比較し、大きな差はなかった。 epoch 228 と 300 では、レーティングに大きな差はないと考えられる。

今後は、学習 epoch 数の変化による学習結果の変化を防ぐため、 max_epoch=300 を指定してさせたいと思う。

tanuki- 2022-06-11 やねうら王学習部リグレッション調査 追試

tanuki- 2022-06-11 やねうら王学習部リグレッション調査 追試

実験内容

  • やねうら王の過去のバージョンのうち、学習部がどのタイミングでリグレッションを起こしたのか調べる。
  • 特に、 V5.40 前後のレーティングを測定する。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法
USI_Hash 1024
Threads 64
loop 100
batchsize 1000000
lambda 0.5
eta eta1=1e-8 eta2=1.0 eta1_epoch=100
newbob_decay 0.5
nn_batch_size 1000
eval_save_interval 100000000
loss_output_interval 1000000
mirror_percentage 50
eval_limit 32000
weight_by_progress 無効
次元下げ K・P・相対KP
学習データ内で重複した局面の除外 バージョンのデフォルトに依存する
初期ネットワークパラメーター tanuki-wcsc29
勝敗項の教師信号 1.0

レーティング測定

対局相手 tanuki- 2022-04-01 halfkp_256x2-32-32 再実験 https://docs.google.com/document/d/1U2dtYgksApn9GYIUJEUtceE0Yc-0dfmx6kA44FopDXc/edit?usp=sharing
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 2000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

v5.40_post は v5.40 の次のコミットを表す。

レーティング測定

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v6.00\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち879(53.4%) 後手勝ち767(46.6%) 引き分け354

engine1

勝ち786(47.8% R-12.9 +-15.2) 先手勝ち422(25.6%) 後手勝ち364(22.1%)

宣言勝ち21 先手宣言勝ち12 後手宣言勝ち9 先手引き分け177 後手引き分け177

engine2

勝ち860(52.2%) 先手勝ち457(27.8%) 後手勝ち403(24.5%)

宣言勝ち29 先手宣言勝ち11 後手宣言勝ち18 先手引き分け177 後手引き分け177

786,354,860

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V5.40_post\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変

化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち902(53.9%) 後手勝ち773(46.1%) 引き分け325

engine1

勝ち790(47.2% R-16.5 +-15.2) 先手勝ち425(25.4%) 後手勝ち365(21.8%)

宣言勝ち28 先手宣言勝ち13 後手宣言勝ち15 先手引き分け167 後手引き分け158

engine2

勝ち885(52.8%) 先手勝ち477(28.5%) 後手勝ち408(24.4%)

宣言勝ち21 先手宣言勝ち11 後手宣言勝ち10 先手引き分け158 後手引き分け167

790,325,885

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V5.40\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち875(53.0%) 後手勝ち775(47.0%) 引き分け350

engine1

勝ち834(50.5% R3.1 +-15.2) 先手勝ち437(26.5%) 後手勝ち397(24.1%)

宣言勝ち21 先手宣言勝ち11 後手宣言勝ち10 先手引き分け182 後手引き分け168

engine2

勝ち816(49.5%) 先手勝ち438(26.5%) 後手勝ち378(22.9%)

宣言勝ち41 先手宣言勝ち16 後手宣言勝ち25 先手引き分け168 後手引き分け182

834,350,816

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v5.33\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち899(54.0%) 後手勝ち765(46.0%) 引き分け336

engine1

勝ち891(53.5% R20.5 +-15.3) 先手勝ち479(28.8%) 後手勝ち412(24.8%)

宣言勝ち23 先手宣言勝ち10 後手宣言勝ち13 先手引き分け166 後手引き分け170

engine2

勝ち773(46.5%) 先手勝ち420(25.2%) 後手勝ち353(21.2%)

宣言勝ち23 先手宣言勝ち14 後手宣言勝ち9 先手引き分け170 後手引き分け166

891,336,773

まとめ

やねうら王の過去のバージョンのうち、学習部がどのタイミングでリグレッションを起こしたのか調べた。特に、 V5.40 前後のレーティングを測定した。

学習ロスと検証ロスは、 v5.33~v5.40・v5.40_post~v6.00 が、それぞれ同じような傾向を示した。

平手局面の評価値は、ほとんど変わらなかった。

評価値の絶対値は、 v5.33・v5.40・v5.40_post~v6.00 が、それぞれ同じような傾向を示した。

レーティングは、 v5.33 は基準とした評価関数より有意に高かった。 v5.40 は同程度だった。 v5.40_post は有意に低かった。 v6.00 は、低かったが、有意差はなかった。

学習ロスと検証ロスについては、 v5.40 と v5.40_post の間で、学習部に対して影響を及ぼす、何らかの変更があったことを表していると考えられる。

平手局面については、学習で大きな問題が起こらなかったことを表していると考えられる。

評価値の絶対値については、 v5.40 と v5.40_post の間で、学習部に対して影響を及ぼす、何らかの変更があったことを表していると考えられる。

レーティングについては、 v5.33~v5.40 の間、 v5.40~v5.40_post の間のそれぞれで、リグレッションが起こっていたことを表していると考えられる。

v5.33~v5.40 の間、 v5.40~v5.40_post の間で、それぞれリグレッションが起こっていたことが分かった。今後の調査に期待したい。

tanuki- 2022-06-07 nnue-pytorch 再実験

 

tanuki- 2022-06-07 nnue-pytorch 再実験

実験内容

  • nnue-pytorch にやねうら王をマージし、コンピューター将棋ソフト用の NNUE 評価関数を学習させ、レーティングを測定する。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

シャッフル条件

生成ルーチン tanuki-シャッフルルーチン
qsearch() あり

機械学習

機械学習ルーチン nnue-pytorch + やねうら王 nodchip/nnue-pytorch at shogi.2022-05-23
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法 Ranger
batch-size 16384
threads 2
num-workers 2
gpus 1
features HalfKP
勝敗項の教師信号 1.0

レーティング測定

対局相手  
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=5000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-.nnue-pytorch-2022-05-30 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数5000 先手勝ち2366(53.3%) 後手勝ち2069(46.7%) 引き分け565

engine1

勝ち1817(41.0% R-56.1 +-9.8) 先手勝ち986(22.2%) 後手勝ち831(18.7%)

宣言勝ち34 先手宣言勝ち19 後手宣言勝ち15 先手引き分け275 後手引き分け290

engine2

勝ち2618(59.0%) 先手勝ち1380(31.1%) 後手勝ち1238(27.9%)

宣言勝ち65 先手宣言勝ち23 後手宣言勝ち42 先手引き分け290 後手引き分け275

1817,565,2618

まとめ

nnue-pytorch にやねうら王をマージし、コンピューター将棋ソフト用の NNUE 評価関数を学習させ、レーティングを測定した。

 

学習ロスと検証ロスは、問題なく下がっている。

レーティングは、比較対象と比べて R-56 ほど低かった。

 

学習ロスと検証ロスについては、大きな問題なく学習できていることを表していると考えられる。

レーティングについても、大きな問題なく学習できている事を表していると考えられる。比較対象より低い点については、学習条件の違いが大きいと思われる。

 

ひとまず、 nnue-pytorch を用いて、やねうら王 NNUE 評価関数の学習が成功した。今後、レーティングを上げるために、一つ一つのパラメーターについて、比較実験を行っていきたいと思う。

 

tanuki- 2022-06-07 やねうら王学習部リグレッション調査

tanuki- 2022-06-07 やねうら王学習部リグレッション調査

実験内容

  • やねうら王の過去のバージョンのうち、学習部がどのタイミングでリグレッションを起こしたのか調べる。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法
USI_Hash 1024
Threads 16
loop 100
batchsize 1000000
lambda 0.5
eta eta1=1e-8 eta2=1.0 eta1_epoch=100
newbob_decay 0.5
nn_batch_size 1000
eval_save_interval 100000000
loss_output_interval 1000000
mirror_percentage 50
eval_limit 32000
weight_by_progress 無効
次元下げ K・P・相対KP
学習データ内で重複した局面の除外 バージョンのデフォルトに依存する
初期ネットワークパラメーター tanuki-wcsc29
勝敗項の教師信号 1.0

レーティング測定

対局相手
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 2000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V7.61\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち857(52.1%) 後手勝ち789(47.9%) 引き分け354

engine1

勝ち691(42.0% R-46.1 +-15.4) 先手勝ち358(21.7%) 後手勝ち333(20.2%)

宣言勝ち31 先手宣言勝ち15 後手宣言勝ち16 先手引き分け187 後手引き分け167

engine2

勝ち955(58.0%) 先手勝ち499(30.3%) 後手勝ち456(27.7%)

宣言勝ち17 先手宣言勝ち10 後手宣言勝ち7 先手引き分け167 後手引き分け187

691,354,955

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v7.50-wcsc32\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に

変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち932(53.5%) 後手勝ち809(46.5%) 引き分け259

engine1

勝ち723(41.5% R-51.6 +-15.4) 先手勝ち391(22.5%) 後手勝ち332(19.1%)

宣言勝ち36 先手宣言勝ち19 後手宣言勝ち17 先手引き分け132 後手引き分け127

engine2

勝ち1018(58.5%) 先手勝ち541(31.1%) 後手勝ち477(27.4%)

宣言勝ち23 先手宣言勝ち8 後手宣言勝ち15 先手引き分け127 後手引き分け132

723,259,1018

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v7.10\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち899(54.5%) 後手勝ち750(45.5%) 引き分け351

engine1

勝ち737(44.7% R-30.5 +-15.3) 先手勝ち403(24.4%) 後手勝ち334(20.3%)

宣言勝ち22 先手宣言勝ち9 後手宣言勝ち13 先手引き分け180 後手引き分け171

engine2

勝ち912(55.3%) 先手勝ち496(30.1%) 後手勝ち416(25.2%)

宣言勝ち15 先手宣言勝ち8 後手宣言勝ち7 先手引き分け171 後手引き分け180

737,351,912

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v7.00\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち894(53.0%) 後手勝ち794(47.0%) 引き分け312

engine1

勝ち788(46.7% R-19.5 +-15.3) 先手勝ち418(24.8%) 後手勝ち370(21.9%)

宣言勝ち47 先手宣言勝ち30 後手宣言勝ち17 先手引き分け158 後手引き分け154

engine2

勝ち900(53.3%) 先手勝ち476(28.2%) 後手勝ち424(25.1%)

宣言勝ち23 先手宣言勝ち14 後手宣言勝ち9 先手引き分け154 後手引き分け158

788,312,900

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v6.50\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち862(52.7%) 後手勝ち774(47.3%) 引き分け364

engine1

勝ち769(47.0% R-17.0 +-15.3) 先手勝ち410(25.1%) 後手勝ち359(21.9%)

宣言勝ち26 先手宣言勝ち17 後手宣言勝ち9 先手引き分け175 後手引き分け189

engine2

勝ち867(53.0%) 先手勝ち452(27.6%) 後手勝ち415(25.4%)

宣言勝ち27 先手宣言勝ち10 後手宣言勝ち17 先手引き分け189 後手引き分け175

769,364,867

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v6.00\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち879(53.4%) 後手勝ち767(46.6%) 引き分け354

engine1

勝ち786(47.8% R-12.9 +-15.2) 先手勝ち422(25.6%) 後手勝ち364(22.1%)

宣言勝ち21 先手宣言勝ち12 後手宣言勝ち9 先手引き分け177 後手引き分け177

engine2

勝ち860(52.2%) 先手勝ち457(27.8%) 後手勝ち403(24.5%)

宣言勝ち29 先手宣言勝ち11 後手宣言勝ち18 先手引き分け177 後手引き分け177

786,354,860

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.v5.33\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち899(54.0%) 後手勝ち765(46.0%) 引き分け336

engine1

勝ち891(53.5% R20.5 +-15.3) 先手勝ち479(28.8%) 後手勝ち412(24.8%)

宣言勝ち23 先手宣言勝ち10 後手宣言勝ち13 先手引き分け166 後手引き分け170

engine2

勝ち773(46.5%) 先手勝ち420(25.2%) 後手勝ち353(21.2%)

宣言勝ち23 先手宣言勝ち14 後手宣言勝ち9 先手引き分け170 後手引き分け166

891,336,773

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V5.00\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち847(51.1%) 後手勝ち810(48.9%) 引き分け343

engine1

勝ち842(50.8% R4.7 +-15.2) 先手勝ち428(25.8%) 後手勝ち414(25.0%)

宣言勝ち36 先手宣言勝ち20 後手宣言勝ち16 先手引き分け175 後手引き分け168

engine2

勝ち815(49.2%) 先手勝ち419(25.3%) 後手勝ち396(23.9%)

宣言勝ち14 先手宣言勝ち5 後手宣言勝ち9 先手引き分け168 後手引き分け175

842,343,815

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V4.89\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち933(55.5%) 後手勝ち747(44.5%) 引き分け320

engine1

勝ち868(51.7% R9.7 +-15.2) 先手勝ち486(28.9%) 後手勝ち382(22.7%)

宣言勝ち18 先手宣言勝ち8 後手宣言勝ち10 先手引き分け149 後手引き分け171

engine2

勝ち812(48.3%) 先手勝ち447(26.6%) 後手勝ち365(21.7%)

宣言勝ち31 先手宣言勝ち16 後手宣言勝ち15 先手引き分け171 後手引き分け149

868,320,812

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V4.88\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち919(54.2%) 後手勝ち776(45.8%) 引き分け305

engine1

勝ち902(53.2% R19.0 +-15.3) 先手勝ち490(28.9%) 後手勝ち412(24.3%)

宣言勝ち26 先手宣言勝ち16 後手宣言勝ち10 先手引き分け146 後手引き分け159

engine2

勝ち793(46.8%) 先手勝ち429(25.3%) 後手勝ち364(21.5%)

宣言勝ち22 先手宣言勝ち12 後手宣言勝ち10 先手引き分け159 後手引き分け146

902,305,793

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V4.86\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち873(52.4%) 後手勝ち792(47.6%) 引き分け335

engine1

勝ち856(51.4% R8.2 +-15.2) 先手勝ち452(27.1%) 後手勝ち404(24.3%)

宣言勝ち26 先手宣言勝ち13 後手宣言勝ち13 先手引き分け163 後手引き分け172

engine2

勝ち809(48.6%) 先手勝ち421(25.3%) 後手勝ち388(23.3%)

宣言勝ち19 先手宣言勝ち8 後手宣言勝ち11 先手引き分け172 後手引き分け163

856,335,809

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V4.85\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち916(55.2%) 後手勝ち744(44.8%) 引き分け340

engine1

勝ち862(51.9% R11.1 +-15.2) 先手勝ち481(29.0%) 後手勝ち381(23.0%)

宣言勝ち30 先手宣言勝ち15 後手宣言勝ち15 先手引き分け159 後手引き分け181

engine2

勝ち798(48.1%) 先手勝ち435(26.2%) 後手勝ち363(21.9%)

宣言勝ち30 先手宣言勝ち12 後手宣言勝ち18 先手引き分け181 後手引き分け159

862,340,798

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V4.83\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させ

る=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち893(54.3%) 後手勝ち752(45.7%) 引き分け355

engine1

勝ち846(51.4% R8.2 +-15.2) 先手勝ち448(27.2%) 後手勝ち398(24.2%)

宣言勝ち24 先手宣言勝ち7 後手宣言勝ち17 先手引き分け198 後手引き分け157

engine2

勝ち799(48.6%) 先手勝ち445(27.1%) 後手勝ち354(21.5%)

宣言勝ち30 先手宣言勝ち18 後手宣言勝ち12 先手引き分け157 後手引き分け198

846,355,799

対局数=2000 同時対局数=64 ハッシュサイズ=768 開始手数=24 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\regression.V4.82_NNUE\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変

化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価

関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視

する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数2000 先手勝ち924(55.2%) 後手勝ち749(44.8%) 引き分け327

engine1

勝ち836(50.0% R-0.2 +-15.2) 先手勝ち463(27.7%) 後手勝ち373(22.3%)

宣言勝ち38 先手宣言勝ち17 後手宣言勝ち21 先手引き分け163 後手引き分け164

engine2

勝ち837(50.0%) 先手勝ち461(27.6%) 後手勝ち376(22.5%)

宣言勝ち26 先手宣言勝ち6 後手宣言勝ち20 先手引き分け164 後手引き分け163

836,327,837

まとめ

やねうら王の過去のバージョンのうち、学習部がどのタイミングでリグレッションを起こしたのか調べた。

学習ロスと検証ロスは、 v4.82~v5.00・v5.33・v6.00・v6.50~v7.00・v7.10~v7.61 が、それぞれ同じような傾向を示した。

平手局面の評価値は、ほとんど変わらなかった。

評価値の絶対値は、v4.82~v5.33・v6.00~v7.00・v7.10~v7.61が、それぞれ同じような傾向を示した。

レーティングは、 v4.86 と v5.33 は有意に高かった。 v6.50 と v7.61 は有意に低かった。

学習ロスと検証ロスについては、 v5.00~v5.33、v5.33~v6.00、v6.00~v6.50、v7.00~v7.10 のそれぞれのタイミングで、学習部に対して影響を及ぼす、何らかの変更があったのだと考えられる。

平手局面については、学習で大きな問題が起こらなかったことを表していると考えられる。

評価値の絶対値については、 v5.33~v6.00、v7.00~v7.10、のそれぞれのタイミングで、学習部に対して影響を及ぼす変更があったのだと考えられる。ただし、これについては、学習ロスと検証ロスの考察のほうが、より詳細に状況を説明しているように考えられる。

レーティングについては、 v5.33 よりあとに、リグレッションが断続的に起こっていると考えられる。

今後学習、または qsearch() 込みのシャッフルを行う際は、やねうら王 V5.33 をベースとしたコードを使用していきたい。

tanuki- 2022-05-17 シャッフル時に置換表を有効にして qsearch を行う

tanuki- 2022-05-17 シャッフル時に置換表を有効にして qsearch を行う

実験内容

  • シャッフル時に置換表を有効にして qsearch を行った場合、レーティングが変化するか調べる。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法
USI_Hash 1024
Threads 127
loop 100
batchsize 1000000
lambda 0.5
eta eta1=1e-8 eta2=1.0 eta1_epoch=100
newbob_decay 0.5
nn_batch_size 1000
eval_save_interval 100000000
loss_output_interval 1000000
mirror_percentage 50
eval_limit 32000
weight_by_progress 無効
次元下げ K・P・相対KP
学習データ内で重複した局面の除外 しない
初期ネットワークパラメーター tanuki-wcsc29
勝敗項の教師信号 0.80

レーティング測定

対局相手
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=5000 同時対局数=64 ハッシュサイズ=768 開始手数=0 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.preqsearch_with_tt.evaluate\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数5000 先手勝ち2552(58.1%) 後手勝ち1842(41.9%) 引き分け606

engine1

勝ち1438(32.7% R-108.9 +-10.1) 先手勝ち844(19.2%) 後手勝ち594(13.5%)

宣言勝ち57 先手宣言勝ち34 後手宣言勝ち23 先手引き分け407 後手引き分け199

engine2

勝ち2956(67.3%) 先手勝ち1708(38.9%) 後手勝ち1248(28.4%)

宣言勝ち34 先手宣言勝ち12 後手宣言勝ち22 先手引き分け199 後手引き分け407

1438,606,2956

まとめ

シャッフル時に置換表を有効にして qsearch を行った場合、レーティングが変化するか調べた。

学習ロスと検証ロスは、置換表を有効にしたほうが大きかった。

平手局面の評価値は、ほとんど変わらなかった。

評価値の絶対値は、置換表を有効にしたほうが小さかった。

レーティングは、 置換表を有効にしたほうが有意に弱かった。

過去の経験から、置換表を有効にすると、 qsearch の PV が短くなる事が分かっている。これにより、 qsearch の PV の末端局面が、駒の取り合いのある局面や、玉に王手がかかっている局面となっている可能性がある。また、過去の実験から、駒の取り合いのある局面や、玉に王手がかかっている局面を対象に学習を行うと、学習ロスと検証ロスが上がることが分かっている。今回の学習ロスと検証ロスについては、これと同様の事が起きている可能性がある。

平手局面の評価値については、学習に致命的な問題が起きていない事を表しているものと思われる。

評価値の絶対値については、学習対象の局面が異なっているため、値が変化してもおかしくはないと思う。ただし、なぜ低くなっているのかは分からなかった。

過去の実験から、駒の取り合いのある局面や、玉に王手が刈っている局面を対象に学習を行った場合、レーティングが低くなる傾向があることが分かっている。今回のレーティングについても、同様の事が起こっていると考えられる。

置換表を有効にした場合、本当に qsearch の PV が短くなるかどうかについては、再度検証しても良いと思う。いずれにせよ、シャッフル時の qsearch は置換表を無効化した状態で行ったほうが良いと思われる。

tanuki- 2022-05-15 学習時に best move が駒を取る指し手でない局面のみ qsearch なしで学習する

tanuki- 2022-05-15 学習時に best move が駒を取る指し手でない局面のみ qsearch なしで学習する

実験内容

  • 学習時に best move が駒を取る指し手でない局面のみ qsearch なしで学習し、レーティングが変化するか調べる。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 foodgate の 2020 年~ 2021 年の棋譜のうち、レーティング 3900 以上同士の対局の 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした ランダムムーブなし
生成局面数 10 億局面 × 8 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法
USI_Hash 1024
Threads 127
loop 100
batchsize 1000000
lambda 0.5
eta eta1=1e-8 eta2=1.0 eta1_epoch=100
newbob_decay 0.5
nn_batch_size 1000
eval_save_interval 100000000
loss_output_interval 1000000
mirror_percentage 50
eval_limit 32000
weight_by_progress 無効
次元下げ K・P・相対KP
学習データ内で重複した局面の除外 しない
初期ネットワークパラメーター tanuki-wcsc29
勝敗項の教師信号 0.80

レーティング測定

対局相手
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=5000 同時対局数=64 ハッシュサイズ=768 開始手数=0 最大手数=320 開始局面ファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\TanukiColiseum\taya36_2020-11-06.sfen NUMAノード数=2 表示更新間隔(ms)=3600000

思考エンジン1 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine1\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.evaluate.exclude_capture\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale1=16

思考エンジン2 name=YaneuraOu NNUE 7.10 64ZEN2 TOURNAMENT author=by yaneurao exeファイル=C:\Jenkins\workspace\TanukiColiseum.2022-05-02\engine2\source\YaneuraOu-by-gcc.exe 評価関数フォルダパス=D:\hnoda\shogi\eval\suisho5.halfkp_256x2-32-32.80G\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=300000 秒読み時間(ms)=0 加算時間(ms)=2000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140 FVScale2=16

対局数5000 先手勝ち2415(57.5%) 後手勝ち1783(42.5%) 引き分け802

engine1

勝ち1281(30.5% R-118.0 +-10.2) 先手勝ち749(17.8%) 後手勝ち532(12.7%)

宣言勝ち22 先手宣言勝ち18 後手宣言勝ち4 先手引き分け496 後手引き分け306

engine2

勝ち2917(69.5%) 先手勝ち1666(39.7%) 後手勝ち1251(29.8%)

宣言勝ち58 先手宣言勝ち24 後手宣言勝ち34 先手引き分け306 後手引き分け496

1281,802,2917

まとめ

学習時に best move が駒を取る指し手でない局面のみ qsearch なしで学習し、レーティングが変化するか調べた。

学習ロスと検証ロスは、 qsearch なしのほうが大幅に大きかった。

平手局面の評価値は、ほとんど変わらなかった。

評価値の絶対値は、ほとんど変わらなかった。

レーティングは、 追加学習有のほうが有意に低かった。ただし、 best move が駒を取る指し手だった場合と比べ、やや上がっていた。

学習ロスと検証ロスについて、 best move が駒を取る指し手の局面と取り除くだけでは、駒の取り合いのない局面を排除しきれないためだと思われる。

平手局面の評価値については、学習に致命的な問題が起きていない事を表しているものと思われる。

評価値の絶対値についても、学習に致命的な問題が起きていない事を表しているものと思われる。

レーティングについては、 best move が駒を取る指し手の局面だった場合に比べて改善しているのは、ある程度駒の取り合いのある局面を学習から排除できているためだと思われる。一方、 qsearch ありの場合と比べて低いのは、駒の取り合いのない局面を排除しきれてないためだと思われる。

前回の実験同様、 qsearch なしでの学習は、基本的には必要ないと思われる。今後の実験においては、何らかの形で qsearch ありで学習を行っていきたい。