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

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

tanuki- 2021-11-25 学習データ量

tanuki- 2021-11-25 学習データ量

実験内容

  • 機械学習における学習データの量と棋力の関係について調査する。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠2
1手あたりの思考 深さ最大 24 思考ノード数最大 50,000 ノード
開始局面 foodgateの2019年~2020年前半の棋譜の32手目までから1局面ランダムに選択し、その局面を開始局面とした
生成局面数 10 億局面× 2 セット シャッフル後、1~5億局面に分割し、学習させた
生成条件 対局は打ち切らず詰みの局面まで学習データに出力した

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル halfkp_vm_256x2-32-32
学習手法 SGD ミニバッチ法
USI_Hash 1024
Threads 16
loop 100
batchsize 1000000
lambda 0.5
eta 1.0
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 有効
次元下げ なし
学習データ内で重複した局面の除外 しない
初期ネットワークパラメーター tanuki-wcsc29
勝敗項の教師信号 0.99

レーティング測定

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

実験結果

機械学習

レーティング測定

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

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

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-wcsc29.halfkp_vm_256x2-32-32.suisho-wcsoc2020.100M\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える

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

を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

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

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

する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

対局数2000 先手勝ち896(53.3%) 後手勝ち785(46.7%) 引き分け319

engine1

勝ち716(42.6% R-43.5 +-15.4) 先手勝ち380(22.6%) 後手勝ち336(20.0%)

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

engine2

勝ち965(57.4%) 先手勝ち516(30.7%) 後手勝ち449(26.7%)

宣言勝ち31 先手宣言勝ち13 後手宣言勝ち18 先手引き分け167 後手引き分け152

716,319,965

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

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

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-wcsc29.halfkp_vm_256x2-32-32.suisho-wcsoc2020.200M\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える

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

を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

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

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

する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

対局数2000 先手勝ち904(53.4%) 後手勝ち790(46.6%) 引き分け306

engine1

勝ち762(45.0% R-29.6 +-15.3) 先手勝ち405(23.9%) 後手勝ち357(21.1%)

宣言勝ち33 先手宣言勝ち15 後手宣言勝ち18 先手引き分け145 後手引き分け161

engine2

勝ち932(55.0%) 先手勝ち499(29.5%) 後手勝ち433(25.6%)

宣言勝ち27 先手宣言勝ち8 後手宣言勝ち19 先手引き分け161 後手引き分け145

762,306,932

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

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

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-wcsc29.halfkp_vm_256x2-32-32.suisho-wcsoc2020.300M\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える

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

を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

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

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

する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

対局数2000 先手勝ち941(54.5%) 後手勝ち786(45.5%) 引き分け273

engine1

勝ち762(44.1% R-35.4 +-15.3) 先手勝ち416(24.1%) 後手勝ち346(20.0%)

宣言勝ち18 先手宣言勝ち10 後手宣言勝ち8 先手引き分け134 後手引き分け139

engine2

勝ち965(55.9%) 先手勝ち525(30.4%) 後手勝ち440(25.5%)

宣言勝ち37 先手宣言勝ち18 後手宣言勝ち19 先手引き分け139 後手引き分け134

762,273,965

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

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

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-wcsc29.halfkp_vm_256x2-32-32.suisho-wcsoc2020.400M\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える

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

を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

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

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

する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

対局数2000 先手勝ち922(54.7%) 後手勝ち763(45.3%) 引き分け315

engine1

勝ち762(45.2% R-28.0 +-15.3) 先手勝ち414(24.6%) 後手勝ち348(20.7%)

宣言勝ち40 先手宣言勝ち20 後手宣言勝ち20 先手引き分け142 後手引き分け173

engine2

勝ち923(54.8%) 先手勝ち508(30.1%) 後手勝ち415(24.6%)

宣言勝ち37 先手宣言勝ち23 後手宣言勝ち14 先手引き分け173 後手引き分け142

762,315,923

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

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

価関数フォルダパス=D:\hnoda\shogi\eval\tanuki-wcsc29.halfkp_vm_256x2-32-32.suisho-wcsoc2020.500M\final 定跡手数=256 定跡ファイル名=no_book 思考ノード数=0 思考ノード数に加える

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

を考慮する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

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

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

する=false 定跡の手数を無視する=false SlowMover=100 DrawValue=-2 BookEvalBlackLimit=0 BookEvalWhiteLimit=-140

対局数2000 先手勝ち885(52.8%) 後手勝ち790(47.2%) 引き分け325

勝ち774(46.2% R-22.1 +-15.3) 先手勝ち415(24.8%) 後手勝ち359(21.4%)

宣言勝ち33 先手宣言勝ち20 後手宣言勝ち13 先手引き分け171 後手引き分け154

engine2

勝ち901(53.8%) 先手勝ち470(28.1%) 後手勝ち431(25.7%)

宣言勝ち55 先手宣言勝ち32 後手宣言勝ち23 先手引き分け154 後手引き分け171

774,325,901

合計勝率 先手勝率 後手勝率
100M 42.6 22.6 20
200M 45 23.9 21.1
300M 44.1 24.1 20
400M 45.2 24.6 20.7
500M 46.2 24.8 21.4

まとめ

機械学習における学習データの量と棋力の関係について調査した。

学習ロスは、学習データが少ないほど下がるのが速くなり、収束した際の値は低かった。

検証ロスは、学習データが少ないほど下がるのが遅くなり、収束した際の値は大きかった。

指し手一致率については、学習データの量との関係性は見られなかった。

平手局面の評価値も、学習データの量との関係性は見られなかった。

評価値の絶対値についても、学習データの量との関係性は見られなかった。

棋力は、 1~5 億のいずれの場合についても、 20 億の場合に比べて優位に低かった。

学習ロスが低く、検証ロスが高いのは、過学習の傾向であるとされている。今回の実験では、学習データ量を 1~5 億曲面に設定して学習したいずれの場合においても、 20 億に設定した場合に比べて、過学習の傾向が見受けられた。

指し手一致率、平手局面の評価値、評価値の絶対値からは過学習を判定できないことが分かった。

教師局面が少ないと、棋力が低くなる傾向がある事が分かった。

tanuki-denyu2 から強化学習が行えなかった理由は、生成した教師局面の量が足りなかったためかもしれない。

また、現在の生成パラメーターで 20 億局面用意するには 1 か月以上かかってしまい、現実的ではない。

今後、どのように学習データを用意すれば十分な学習が行えるのか、実験していきたい。