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

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

tanuki- 2021-06-30 nn_batch_size調整

tanuki- 2021-06-30 nn_batch_size調整

実験内容

  • 機械学習時に nn_batch_size を調整し、自己対局によりレーティングを計測する。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 tanuki-denryu-tsec-1 eval
1手あたりの思考 思考ノード数 50,000 ノードをベースとし、自動調整する
開始局面 foodgate上の棋譜の24手目までから1局面ランダムに選択し、その局面を開始局面とした
生成局面数 1 億局面× 3 セット
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

レーティング測定

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

実験結果

機械学習

自己対局

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の

乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手

数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち874(51.6%) 後手勝ち819(48.4%) 引き分け307

engine1

勝ち667(39.4% R-63.0 +-15.5) 先手勝ち345(20.4%) 後手勝ち322(19.0%)

宣言勝ち79 先手宣言勝ち41 後手宣言勝ち38 先手引き分け149 後手引き分け158

engine2

勝ち1026(60.6%) 先手勝ち529(31.2%) 後手勝ち497(29.4%)

宣言勝ち28 先手宣言勝ち11 後手宣言勝ち17 先手引き分け158 後手引き分け149

667,307,1026

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1.nn_batch_size=2000\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮

する=false 定跡の手数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち853(52.6%) 後手勝ち768(47.4%) 引き分け379

engine1

勝ち670(41.3% R-49.1 +-15.4) 先手勝ち356(22.0%) 後手勝ち314(19.4%)

宣言勝ち96 先手宣言勝ち51 後手宣言勝ち45 先手引き分け189 後手引き分け190

engine2

勝ち951(58.7%) 先手勝ち497(30.7%) 後手勝ち454(28.0%)

宣言勝ち27 先手宣言勝ち15 後手宣言勝ち12 先手引き分け190 後手引き分け189

670,379,951

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1.nn_batch_size=5000\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮

する=false 定跡の手数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち862(52.4%) 後手勝ち783(47.6%) 引き分け355

engine1

勝ち691(42.0% R-46.0 +-15.4) 先手勝ち368(22.4%) 後手勝ち323(19.6%)

宣言勝ち90 先手宣言勝ち59 後手宣言勝ち31 先手引き分け181 後手引き分け174

engine2

勝ち954(58.0%) 先手勝ち494(30.0%) 後手勝ち460(28.0%)

宣言勝ち28 先手宣言勝ち13 後手宣言勝ち15 先手引き分け174 後手引き分け181

691,355,954

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1.nn_batch_size=10000\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮

する=false 定跡の手数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち903(54.7%) 後手勝ち747(45.3%) 引き分け350

engine1

勝ち676(41.0% R-52.2 +-15.4) 先手勝ち370(22.4%) 後手勝ち306(18.5%)

宣言勝ち104 先手宣言勝ち56 後手宣言勝ち48 先手引き分け162 後手引き分け188

engine2

勝ち974(59.0%) 先手勝ち533(32.3%) 後手勝ち441(26.7%)

宣言勝ち24 先手宣言勝ち12 後手宣言勝ち12 先手引き分け188 後手引き分け162

676,350,974

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1.nn_batch_size=20000\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮

する=false 定跡の手数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち857(52.4%) 後手勝ち778(47.6%) 引き分け365

engine1

勝ち741(45.3% R-26.6 +-15.3) 先手勝ち383(23.4%) 後手勝ち358(21.9%)

宣言勝ち106 先手宣言勝ち58 後手宣言勝ち48 先手引き分け169 後手引き分け196

engine2

勝ち894(54.7%) 先手勝ち474(29.0%) 後手勝ち420(25.7%)

宣言勝ち21 先手宣言勝ち5 後手宣言勝ち16 先手引き分け196 後手引き分け169

741,365,894

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1.nn_batch_size=50000\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮

する=false 定跡の手数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち807(51.3%) 後手勝ち767(48.7%) 引き分け426

engine1

勝ち750(47.6% R-12.9 +-15.2) 先手勝ち375(23.8%) 後手勝ち375(23.8%)

宣言勝ち89 先手宣言勝ち44 後手宣言勝ち45 先手引き分け191 後手引き分け235

engine2

勝ち824(52.4%) 先手勝ち432(27.4%) 後手勝ち392(24.9%)

宣言勝ち34 先手宣言勝ち14 後手宣言勝ち20 先手引き分け235 後手引き分け191

750,426,824

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

思考エンジン1 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine1\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-denryu-tsec-1.iteration=1.nn_batch_size=100000\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数

(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考

慮する=false 定跡の手数を無視する=false 評価値のスケール(%)=100

思考エンジン2 name=YaneuraOu NNUE 6.03 64ZEN2 EVAL_LEARN author=by yaneurao exeファイル=D:\Jenkins\workspace\TanukiColiseum.2021-05-09\engine2\source\YaneuraOu-by-gcc.exe 評

価関数フォルダパス=D:\hnoda\tanuki-denryu-tsec-1\eval 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える乱数(%)=0 思考ノード数の乱数を1手毎に変化させる=False 持ち時間(ms)=900000 秒読み時間(ms)=0 加算時間(ms)=5000 乱数付き思考時間(ms)=0 スレッド数=1 BookEvalDiff=30 定跡の採択率を考慮する=false 定跡の手数を無視する=false 評価値

のスケール(%)=100

対局数2000 先手勝ち857(53.7%) 後手勝ち739(46.3%) 引き分け404

engine1

勝ち766(48.0% R-11.1 +-15.2) 先手勝ち408(25.6%) 後手勝ち358(22.4%)

宣言勝ち93 先手宣言勝ち49 後手宣言勝ち44 先手引き分け192 後手引き分け212

engine2

勝ち830(52.0%) 先手勝ち449(28.1%) 後手勝ち381(23.9%)

宣言勝ち31 先手宣言勝ち18 後手宣言勝ち13 先手引き分け212 後手引き分け192

766,404,830

まとめ

機械学習時に nn_batch_size を調整し、自己対局によりレーティングを計測した。 nn_batch_size として、 1,000・2,000・5,000・10,000・20,000・50,000・100,000 を試した。

機械学習と自己対局の結果、 tanuki-denryu-tsec-1 に勝ち越したパラメーターは無かった。また、 nn_batch_size が高いほうが勝率は高かった。

NNUE 評価関数の純正の学習器は、 nn_batch_size を上げると、内部的には学習率が下がるようになっている。このため、 nn_batch_size が高いほうが勝率が高い理由が、 nn_batch_size に由来するものなのか、学習率が下がったためなのかが分からなかった。 nn_batch_size と学習率を同時に調整し、内部的な学習率が下がらないようにした状態で、比較する必要がある。