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 ありで学習を行っていきたい。

tanuki- 2022-05-14 学習時に qsearch なしで学習後 qsearch ありで追加学習する

tanuki- 2022-05-14 学習時に qsearch なしで学習後 qsearch ありで追加学習する

実験内容

  • 学習時に 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.evaluate.qsearch\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 先手勝ち2252(56.1%) 後手勝ち1765(43.9%) 引き分け983

engine1

勝ち1881(46.8% R-17.7 +-9.6) 先手勝ち996(24.8%) 後手勝ち885(22.0%)

宣言勝ち91 先手宣言勝ち50 後手宣言勝ち41 先手引き分け627 後手引き分け356

engine2

勝ち2136(53.2%) 先手勝ち1256(31.3%) 後手勝ち880(21.9%)

宣言勝ち59 先手宣言勝ち28 後手宣言勝ち31 先手引き分け356 後手引き分け627

1881,983,2136

まとめ

学習時に qsearch なしで学習後、 qsearch ありで追加学習し、レーティングが変化するか調べた。

学習ロスと検証ロスは、初めは追加学習ありのほうが下がったが、最終的には同じ程度となった。

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

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

レーティングは、 追加学習有のほうが有意に低かった

学習ロスと検証ロスについて、初めに追加学習ありのほうがロスが下がったのは、 qsearch なしでの学習により、ある程度学習が進んでいたためだと思われる。一方、目的関数が同じため、最終的には追加学習なしのものと同程度となったのだと思われる。

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

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

レーティングについては、初めに qsearch を行っても、レーティングに良い影響はなく、初めから qsearch ありで学習したほうが良いという事を表している。

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

tanuki- 2022-05-13 学習時に qsearch を行わない

tanuki- 2022-05-13 学習時に qsearch を行わない

実験内容

  • 学習時に qsearch を行わず、 evaluate のみを行い、学習が行えるかどうか確認する。

棋譜生成

生成ルーチン 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 秒加算
対局数 2000
同時対局数 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\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 先手勝ち2509(58.4%) 後手勝ち1788(41.6%) 引き分け703

engine1

勝ち1254(29.2% R-130.1 +-10.3) 先手勝ち723(16.8%) 後手勝ち531(12.4%)

宣言勝ち55 先手宣言勝ち27 後手宣言勝ち28 先手引き分け519 後手引き分け184

engine2

勝ち3043(70.8%) 先手勝ち1786(41.6%) 後手勝ち1257(29.3%)

宣言勝ち49 先手宣言勝ち25 後手宣言勝ち24 先手引き分け184 後手引き分け519

1254,703,3043

まとめ

学習時に qsearch を行わず、 evaluate のみを行い、学習が行えるかどうか確認する。

学習ロスと検証ロスは、 evaluate のみのほうが高かった。

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

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

レーティングは、 evalute のみのほうが大幅に低かった。

学習ロスと検証ロスについては、学習データが駒の取り合いのない局面なのに対し、学習対象の局面が駒の取り合いのある局面であるため、大きな差が出たのだと思われる。

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

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

レーティングについては、 evalate のみでは qsearch より明らかに劣っていることを表している。

今後は qsearch ありで学習を行っていきたい。

tanuki- 2022-05-12 シャッフル時にqsearch()を行う

 

tanuki- 2022-05-12 シャッフル時にqsearch()を行う

実験内容

  • 学習データのシャッフル時に 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 秒加算
対局数 2000
同時対局数 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.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 先手勝ち2304(54.8%) 後手勝ち1899(45.2%) 引き分け797

engine1

勝ち2103(50.0% R0.2 +-9.6) 先手勝ち1090(25.9%) 後手勝ち1013(24.1%)

宣言勝ち104 先手宣言勝ち61 後手宣言勝ち43 先手引き分け525 後手引き分け272

engine2

勝ち2100(50.0%) 先手勝ち1214(28.9%) 後手勝ち886(21.1%)

宣言勝ち46 先手宣言勝ち27 後手宣言勝ち19 先手引き分け272 後手引き分け525

2103,797,2100

まとめ

学習データのシャッフル時に qsearch() を行い、学習時の qsearch() を省略し、正しく学習が行えるかどうか確認した。

 

学習ロスと検証ロスは、シャッフル時に qsearch() を行ったほうが高くなった。

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

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

レーティングは、有意差はなかった。

 

学習ロスと検証ロスについては、本質的には同じ処理を行っているはずであり、変化する原因がわからなかった。

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

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

レーティングについては、シャッフル時に qsearch() を行っても、学習に問題ないという事を表していると考えられる。

 

本実験の結果より、シャッフル時に qsearch() を行えば十分であることが分かった。 nnue-pytorch の将棋版開発の際は、この方式を取りたいと思う。

 

tanuki- 2022-05-08 学習時のリビジョン 再実験2

tanuki- 2022-05-08 学習時のリビジョン 再実験2

実験内容

  • やねうら王 V7.10 相当で学習を行い、レーティングを測定する。

棋譜生成

生成ルーチン 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 秒加算
対局数 2000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

レーティング測定

対局数=2000 同時対局数=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.80G.master\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 先手勝ち948(56.9%) 後手勝ち717(43.1%) 引き分け335

engine1

勝ち684(41.1% R-52.0 +-15.4) 先手勝ち376(22.6%) 後手勝ち308(18.5%)

宣言勝ち57 先手宣言勝ち25 後手宣言勝ち32 先手引き分け213 後手引き分け122

engine2

勝ち981(58.9%) 先手勝ち572(34.4%) 後手勝ち409(24.6%)

宣言勝ち21 先手宣言勝ち7 後手宣言勝ち14 先手引き分け122 後手引き分け213

684,335,981

まとめ

やねうら王 V7.10 相当で学習を行い、レーティングを測定した。

学習ロスと検証ロスは、やねうら王 V7.10 相当のほうが高かった。

平手局面の評価値は、やねうら王 V7.10 相当のほうがやや高かった。

評価値の絶対値は、やねうら王 V7.10 相当のほうが低かった。

レーティングは、 やねうら王 V7.10 相当のほうが有意に低かった。

学習ロスと検証ロスについては、やねうら王 V7.10 相当で、それ以前のものと比べ、学習がうまく行われていないという事を表しているのだと思われる。

平手局面の評価値については、やねうら王 V7.10 相当のほうがやや高いものの、致命的な問題は起きていないという事を表しているのだと思われる。

評価値の絶対値については、学習ロスと検証ロスと同様、それ以前のものと比べ、学習がうまく行われていないという事を表しているのだと思われる。

レーティングについては、やねうら王 V7.10 相当の学習部に、それ以前のものと比べ、何らかのリグレッションが起きているという事を表しているのだと思われる。

https://github.com/yaneurao/YaneuraOu/commit/8b293ab51a55da7cbc356679cf21774b34f7bc8a

では、学習部の問題は修正されなかったと判断してよいと思われる。引き続き学習を行う際は、 1 年以上前の、リグレッションが起きていないバージョンを使用したい。

第 32 回世界コンピュータ将棋選手権参加記録

本ブログエントリは、 2022 年 5 月 3 日~ 5 日に開催された、第 32 回世界コンピュータ将棋選手権の参加記録です。

マメット・ブンブク

今回の参加名は「マメット・ブンブク」でした。元ネタは FF14 で、利用者の将棋ライフのお供として、いつも寄り添う存在をイメージして付けました。

工夫点

マメット・ブンブクの工夫点は、以下の通りです。

定跡データベースの作成手法の変更

定跡データベースの作成に、たややん 2020 手法を改良したものを使用しました。

たややん 2020 手法においては、 floodgate 上の棋譜の指し手のうち、一定のレーティングのソフト棋譜に含まれ、かつ各指し手を指したときの勝率が 33% 以上のもののみを、定跡データベースに登録します。

tanuki-wcsc32 においては、レーティング 3900 以上のソフト同士の棋譜を使用し、勝率 33% 以上の指し手のみを使用しました。また、独自の工夫として、指し手の出現回数が 2 回以上のもののみ、使用しました。

学習データの生成条件の変更

NNUE 評価関数の学習に使用する学習データの生成条件を数点変更しました。

1 点目は、自己対局の対局開始局面の変更です。 tanuki-wcsc32 においては、自己対局の対局開始局面を、 floodgate 上のレーティング 3900 以上のソフト同士の棋譜のうち、 32 手目までからランダムに局面を選択するようにしました。また、開始局面の直後にランダムムーブを入れないようにしました。

2 点目は、自己対局の思考条件の変更です。 tanuki-wcsc32 においては、深さ 9 で探索を行い、自己対局を行いました。

3 点目は、学習データ量の増量です。 tanuki-wcsc32 においては、棋譜を 80 億局面分生成し、学習データとしました。

4 点目は、自己対局に使用する評価関数の変更です。 tanuki-wcsc32 においては、学習データの生成に水匠 5 を使用させていただきました。貴重なソフトを公開してくださり、ありがとうございました。

ネットワークアーキテクチャ

ネットワークアーキテクチャに halfkp_1024x2-8-32 を採用しました。これは、 Stockfish の過去のバージョンにおいて採用されたネットワークアーキテクチャです。 Stockfish においては、探索速度が低下したにもかかわらず、レーティングが向上したという報告が挙がっていたと記憶しています。

機械学習

tanuk-wcsc32 においては、 elmo 式学習法のうち、勝敗項の教師信号 (t) を、 0.8 と設定しました。これにより、レーティングを落とすことなく、評価値のスケールを下げることに成功しました。

実験結果

上記に挙げたものについては、本ブログにて実験結果を公開しています。各ブログエントリをご参照ください。

予選 1 日目

昨年度の引っ越しに伴い、会場までの移動にかかる時間が長くなってしまいました。また、年齢のせいか、早起きがつらくなってしまいました。そのため、今回は前日入りしてビジネスホテルに泊まることにしました。

1 泊 5,000 円前後の格安ビジネスホテルを予約していたのですが、ホテル側の都合でキャンセルとなってしまいました。代わりのホテルを探したところ、東横 INN Jr. が部屋数限定で 1 泊 5,000 円のプランを提供しているのを見つけ、予約しました。

ただ、あとから思ったのですが、今回は「東横将棋」というソフトが参加しており、東横 INN Jr. に泊まると、東横将棋に負けてしまうのではないかという予感がしました。幸い東横将棋さんとは対局がなかったため、負けずに済みました。次回からは、念のため、東横 INN Jr. には泊まらないようにしたいと思います。

予選 2 日目

今回は、決勝リーグ進出を目標としていました。決勝リーグへ進出するための条件は、 5.5 勝程度以上だと考え、対局のマッチングが良いことをひたすら願いました。

3 局目まではランダムにマッチングされるらしいのですが、「水匠」「やねうら王」という強豪チームに当たることができ、ソルコフ面で優位に立つことができました。

最終的には 6 勝 3 敗 4 位という好成績で、予選 2 日目を終えることができました。また、今年から上位 4 チームは、決勝リーグで先手を 4 回持つことができるようになりました。これにより、とても良い条件で決勝リーグを戦えることになりました。

決勝

決勝リーグの目標は、様々な点を考慮した結果、 4 勝 3 敗 4 位と定めました。また、この成績を獲得するため、千日手の評価値等を調整しました。

決勝リーグの最中、谷合先生とコンピュータ将棋ソフトについてお話しさせていただく機会がありました。谷合先生がコンピュータ将棋ソフトについて話しているとき、とても楽しそうにされているのが印象的でした。

最終的には 2 勝 3 敗 2 分の 5 位で決勝リーグを終えました。

よくよく思い出してみると、 tanuki- は wcsc 5 位という順位を何度か獲得しています。縁のある順位のようです。

終わりに

第 32 回世界コンピュータ将棋選手権が恙なく開催されたこと、関係者の皆様に厚くお礼申し上げます。これからのコンピュータ将棋ソフト界の発展を、ご祈念申し上げます。