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

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

tanuki- 2022-10-27 nnue-pytorch Label Smoothing

tanuki- 2022-10-27 nnue-pytorch Label Smoothing

実験内容

  • nnue-pytorch を用いた学習で、 Label Smoothing を適用し、リグレッションがないことを確認する。

棋譜生成

生成ルーチン 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 ミニバッチ法
初期学習率 (lr) 8.75e-4
最適化手法 Ranger
学習率調整手法 StepLR step=1 gamma=0.992
batch-size 16384
threads 1
num-workers 8
gpus 1
features HalfKP
max_epoch 300
scaling (kPonanzaConstant) 361
lambda 0.5
勝敗項の教師信号 0.99

レーティング測定

対局相手 tanuki- 2022-10-26 nnue-pytorch GeForce RTX 4090 - Google ドキュメント https://docs.google.com/document/d/1psORyVgOMQly8ul7GZpnD7sWI7-ICLMO962Hcs3FUO8/edit
思考時間 持ち時間 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\tanuki-.nnue-pytorch-2022-10-26 定跡手数=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\tanuki-.nnue-pytorch-2022-10-25 定跡手数=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=20

対局数2000 先手勝ち869(51.7%) 後手勝ち811(48.3%) 引き分け320

engine1

勝ち834(49.6% R-2.1 +-15.2) 先手勝ち435(25.9%) 後手勝ち399(23.8%)

宣言勝ち19 先手宣言勝ち8 後手宣言勝ち11 先手引き分け152 後手引き分け168

engine2

勝ち846(50.4%) 先手勝ち434(25.8%) 後手勝ち412(24.5%)

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

834,320,846

学習ロスと検証ロスは、 Label Smoothing を無効にした場合と比べて下がった。また、学習ロスと検証ロスとの大きな乖離は見受けられなかった。

レーティングは、 Label Smoothing を無効にした場合と比べ、有意な差はなかった。

考察

Label Smoothing により学習ロスと検証ロスが下がったのは、ロスの計算式において、大きな値が出現しにくくなったためだと思われる。

レーティングの測定結果より、 Label Smoothing を有効にした場合、無効にした場合と比べてリグレッションはないと考えて良いと思われる。

まとめ

nnue-pytorch を用いた学習で、 Label Smoothing を用い、リグレッションがないことを確認した。

次は、 nnue-pytorch の学習ルーチンを、やねうら王純正の学習器の実装に近づけ、レーティングを測定したい。

tanuki- 2022-10-26 nnue-pytorch GeForce RTX 4090

tanuki- 2022-10-26 nnue-pytorch GeForce RTX 4090

実験内容

棋譜生成

生成ルーチン 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 ミニバッチ法
初期学習率 (lr) 8.75e-4
最適化手法 Ranger
学習率調整手法 StepLR step=1 gamma=0.992
batch-size 16384
threads 1
num-workers 8
gpus 1
features HalfKP
max_epoch 300
scaling (kPonanzaConstant) 361
lambda 0.5
勝敗項の教師信号 1.0

レーティング測定

対局相手 tanuki- 2022-06-07 やねうら王学習部リグレッション調査 V5.33 https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing
思考時間 持ち時間 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\tanuki-.nnue-pytorch-2022-10-25 定跡手数=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\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 FVScale2=20

対局数2000 先手勝ち904(52.5%) 後手勝ち818(47.5%) 引き分け278

engine1

勝ち727(42.2% R-46.8 +-15.4) 先手勝ち381(22.1%) 後手勝ち346(20.1%)

宣言勝ち15 先手宣言勝ち9 後手宣言勝ち6 先手引き分け149 後手引き分け129

engine2

勝ち995(57.8%) 先手勝ち523(30.4%) 後手勝ち472(27.4%)

宣言勝ち22 先手宣言勝ち13 後手宣言勝ち9 先手引き分け129 後手引き分け149

727,278,995

学習ロスと検証ロスは、特に問題なく下がった。

レーティングは、やねうら王純正の学習器で学習させた評価関数に比べ、 R-46.8 程度低かった。

考察

レーティングについては、過去に実験した、 GPU を用いて学習させた評価関数と CPU を用いて学習させた評価巻子の差と、大きな違いはないように思う。

学習ロス、検証ロスも下がっていることから、目立ったリグレッションはないと考えて良いと思われる。

まとめ

nnue-pytorch を用いた学習で、 GeForce RTX 4090 を用い、リグレッションがないことを確認した。

次は、 Label Smoothing を導入し、リグレッションがないことを確認したい。

tanuki- 2022-08-05 教師局面生成時の開始局面 (s-book_black) (3)

tanuki- 2022-08-05 教師局面生成時の開始局面 (s-book_black) (3)

実験内容

  • 教師局面の生成時、開始局面として floodgate の棋譜の局面と、 s-book_black に収録されている局面を使用し、学習した評価関数のレーティングを計測する。

棋譜生成

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

棋譜シャッフル

シャッフルルーチン tanuki-棋譜シャッフルルーチン
qsearch なし

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル 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
勝敗項の教師信号 1.0
やねうら王バージョン V5.33 相当

レーティング測定

対局相手 https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing やねうら王 V5.33 で作成した評価関数
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

v5.33 … https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing

suisho.s-book_black.mix … 今回作成した教師局面で学習した場合

レーティング測定

対局数=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\suisho5.s-book_black.mix\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\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 FVScale2=20

対局数5000 先手勝ち2320(53.8%) 後手勝ち1994(46.2%) 引き分け686

engine1

勝ち2180(50.5% R3.2 +-9.6) 先手勝ち1169(27.1%) 後手勝ち1011(23.4%)

宣言勝ち164 先手宣言勝ち82 後手宣言勝ち82 先手引き分け347 後手引き分け339

engine2

勝ち2134(49.5%) 先手勝ち1151(26.7%) 後手勝ち983(22.8%)

宣言勝ち123 先手宣言勝ち59 後手宣言勝ち64 先手引き分け339 後手引き分け347

2180,686,2134

以下、 1. を floodgate の棋譜の局面を開始局面として教師局面を生成し、学習させた場合とする。また、 2. を s-book_black の各局面を開始局面として教師局面を生成し、学習させた場合とする。

学習ロスと検証ロスは、 1. より低く、 2. より高かった。

平手局面の評価値は、 1. より高く、 2. より低かった。

評価値の絶対値は、 1. より高く、 2. より低かった。

レーティングは、ベースラインとした評価関数と比べて、 R3.2 程度高かった。

考察

学習ロスと検証ロス

1. と 2. の教師局面を混ぜて学習させているためだと思われる。教師局面を混ぜて学習させることにより、混ぜた教師局面の性質の中間の性質を持つ評価関数が学習できる、ということなのだろう。

平手局面の評価値

学習ロスと検証ロスと同様に、 1. と 2. の教師局面を混ぜて学習させているためだと思われる。

評価値の絶対値

他の項目と同様に、 1. と 2. の教師局面を混ぜて学習させているためだと思われる。

レーティング

1. と 2. を混ぜて学習させて学習させたにもかかわらず、レーティングは 1. と 2. の中間とはならなかった。これは、教師局面を混ぜた場合、それらの教師局面の良い性質が、強く表れている可能性がある。ただし、この方法でこれ以上レーティングをのばせるかどうかは、微妙な数字だと思われる。

まとめ

教師局面の生成時、開始局面として floodgate の棋譜の局面と、 s-book_black に収録されている局面を使用し、学習した評価関数のレーティングを計測する。結果、ベースラインとした評価関数と比べて、 R3.1 程度高かった。この方針でレーティングを高めるのは、難しいと思われる。

次回は、水匠 5 が採用している、高ノード数探索による教師局面による、 fine-tuning を試してみたい。

tanuki- 2022-08-01 教師局面生成時の開始局面 (s-book_black) (2)

tanuki- 2022-08-01 教師局面生成時の開始局面 (s-book_black) (2)

実験内容

  • 教師局面の生成時、開始局面として s-book_black に収録されている局面を使用し、学習した評価関数のレーティングを計測する。

棋譜生成

生成ルーチン tanuki-棋譜生成ルーチン
評価関数 水匠 5 FV_SCALE=16
1手あたりの思考 深さ最大 9 思考ノード数最大 50,000 ノード
開始局面 s-book_black
開始局面後のランダムムーブ なし
生成局面数 10 億局面 × 4 セット
生成条件 対局は打ち切らず詰みの局面まで教師局面に出力した

棋譜シャッフル

シャッフルルーチン tanuki-棋譜シャッフルルーチン
qsearch なし

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル halfkp_256x2-32-32
学習手法 SGD ミニバッチ法
USI_Hash 1024
Threads 127
loop 100
batchsize 1000000
lambda 0.5
eta eta1=1e-8 eta2=0.1 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
やねうら王バージョン V5.33 相当

レーティング測定

対局相手 https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing やねうら王 V5.33 で作成した評価関数
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

v5.33 … https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing

suisho.s-book_black … 今回作成した教師局面で学習した場合

レーティング測定

対局数=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\suisho5.s-book_black\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\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 FVScale2=20

対局数5000 先手勝ち2421(53.9%) 後手勝ち2074(46.1%) 引き分け505

engine1

勝ち1904(42.4% R-48.0 +-9.7) 先手勝ち1045(23.2%) 後手勝ち859(19.1%)

宣言勝ち119 先手宣言勝ち67 後手宣言勝ち52 先手引き分け240 後手引き分け265

engine2

勝ち2591(57.6%) 先手勝ち1376(30.6%) 後手勝ち1215(27.0%)

宣言勝ち118 先手宣言勝ち57 後手宣言勝ち61 先手引き分け265 後手引き分け240

1904,505,2591

学習ロスと検証ロスは、元の評価関数に比べて小さかった。

平手局面の評価値は、元の評価関数に比べて大きかった。

評価値の絶対値は、元の評価関数と比べて大きかった。

レーティングは、ベースラインとした評価関数と比べて、 R-48.0 程度低かった。

考察

学習ロスと検証ロス

学習には、ロスの定義に交差エントロピーを使用している。交差エントロピーは、 p(x) または q(x) の値が、 0.0 または 1.0 に近いほど、小さくなる。これを考えると、教師局面に、評価値の絶対値の大きい局面が多く含まれていると考えるのが妥当だと思われる。

平手局面の評価値

教師局面の生成の際、 s-book_black の各局面から、登録されている指し手を指した局面を、開始局面とした。 s-book_black は、先手必勝を前提として作られた定跡であり、各指し手は、先手の勝率が高くなることを意図して登録されている。それらの指し手から指し継いで教師局面を生成したため、平手局面の評価値が高くなったのだと思われる。

評価値の絶対値

教師局面に、評価値の絶対値の大きい局面が多く含まれるようになったためだと思われる。これは、学習ロスと検証ロスの考察と、矛盾はない。

レーティング

s-book_black に収録されている局面に、過学習してしまっている可能性である。これにより、たややん互換局面集を用いた対局で、レーティングが下がってしまった可能性がある。

まとめ

教師局面の生成時、開始局面として s-book_black に収録されている局面を使用し、学習した評価関数のレーティングを計測した。結果、ベースラインとした評価関数と比べて、 R-48.0 程度低かった。

次回は、過去に生成した教師局面と、今回生成した教師局面を混ぜ、学習させ、レーティングを測定してみたい。

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

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

実験内容

  • やねうら王最新版の qsearch() 内の move count に関する枝刈りを無効化し、評価関数を学習し、 V5.33 で学習したものと比較する。

棋譜生成

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

棋譜シャッフル

シャッフルルーチン tanuki-棋譜シャッフルルーチン
qsearch なし

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル 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

レーティング測定

対局相手 https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing やねうら王 V5.33 で作成した評価関数
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

V7.61 … やねうら王 V7.61 で学習したもの

V5.33 … やねうら王 V5.33 で学習したもの

V7.61 + move count … 本実験で学習したもの

レーティング測定

対局数=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\Branch_V7.61_2022-07-22\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\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 FVScale2=20

対局数5000 先手勝ち2263(52.6%) 後手勝ち2043(47.4%) 引き分け694

engine1

勝ち1875(43.5% R-38.8 +-9.7) 先手勝ち1000(23.2%) 後手勝ち875(20.3%)

宣言勝ち110 先手宣言勝ち58 後手宣言勝ち52 先手引き分け331 後手引き分け363

engine2

勝ち2431(56.5%) 先手勝ち1263(29.3%) 後手勝ち1168(27.1%)

宣言勝ち45 先手宣言勝ち24 後手宣言勝ち21 先手引き分け363 後手引き分け331

1875,694,2431

学習ロスと検証ロスは、 V5.33 より高く、 V7.61 より低かった。

平手局面の評価値は、 V5.33 および V7.61 より低かった。

評価値の絶対値は、 V5.33 より低く、 V7.61 と同じくらいだった。

レーティングは、 v5.33 と比べ、 R-38.8 低かった。

考察

学習ロスと検証ロスについては、 qsearch() 内の move count に関する枝刈りを無効化することにより、ロスが若干差がったのだと思われる。しかし、それ以外にもリグレッションの原因があると思われる。

平手局面については、過去に学習したものにくらべて低いものの、学習で大きな問題は起こっていないと思われる。

評価値の絶対値については、 move count の枝刈りは、評価値の絶対値には影響しないということを表している。

レーティングについては、 move count の枝刈りの無効化は、レーティング向上には寄与しないと考えてよいと思われる。

まとめ

やねうら王最新版の qsearch() 内の move count に関する枝刈りを無効化し、評価関数を学習し、 V5.33 で学習したものと比較した。結果、レーティングは V5.33 で学習した評価関数に届かなかった。最新版やねうら王で、 V5.33 のような学習を行うためには、 qsearch() 内の move count に関する枝刈り以外のリグレッションを見つける必要があると思われる。

tanuki- 2022-07-21 tanuki- 学習部 リビジョン変更 (2)

tanuki- 2022-07-21 tanuki- 学習部 リビジョン変更 (2)

実験内容

  • tanuki- の学習部を、やねうら王 V5.33 に変更し、勝敗項の教師信号を 1.0 に設定し、評価関数を学習し、レーティングを測定する。

棋譜生成

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

棋譜シャッフル

シャッフルルーチン tanuki-棋譜シャッフルルーチン
qsearch あり

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル 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
勝敗項の教師信号 1.0
やねうら王バージョン V5.33 相当 ただし、独自改良あり

レーティング測定

対局相手 https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing やねうら王 V5.33 で作成した評価関数
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

V5.33 … https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing

tanuki- + V5.33 … 本実験

レーティング測定

対局数=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-wcsc29-2019-05-06.suisho5\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\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 FVScale2=20

対局数5000 先手勝ち2243(54.1%) 後手勝ち1904(45.9%) 引き分け853

engine1

勝ち2033(49.0% R-5.6 +-9.6) 先手勝ち1098(26.5%) 後手勝ち935(22.5%)

宣言勝ち150 先手宣言勝ち86 後手宣言勝ち64 先手引き分け432 後手引き分け421

engine2

勝ち2114(51.0%) 先手勝ち1145(27.6%) 後手勝ち969(23.4%)

宣言勝ち109 先手宣言勝ち60 後手宣言勝ち49 先手引き分け421 後手引き分け432

2033,853,2114

学習ロスと検証ロスは、 V5.33 と比べてやや大きかった。

平手局面の評価値は、V5.33 と比べてほとんど変わらなかった。

評価値の絶対値は、V5.33 と比べて小さかった。

レーティングは、V5.33 と比べて R-5.6 程度低かったが、有意差はなかった。

考察

学習ロスと検証ロスが大きいのは、 V5.33 と比較して、一部のコードが異なっているためだと思われる。

平手局面の評価値については、機械学習で大きな問題が起こっていないことを表していると思われる。

評価値の絶対値が小さいのは、 V5.33 と比較して、一部のコードが異なっているためだと思われる。

レーティングについては、勝敗項の教師信号に 1.0 を設定したことにより、 V5.33 と有意差のない範囲までレーティングが伸びたのだと思われる。

まとめ

tanuki- の学習部を、やねうら王 V5.33 に変更し、勝敗項の教師信号を 1.0 に設定し、評価関数を学習し、レーティングを測定した。実験の結果、やねうら王 V5.33 で学習させたものと、有意差のない評価関数を学習することができた。学習部のリビジョンに関する調査は、これにて一区切りとしたい。

tanuki- 2022-07-20 tanuki- 学習部 リビジョン変更

tanuki- 2022-07-20 tanuki- 学習部 リビジョン変更

実験内容

  • tanuki- の学習部を、やねうら王 V5.33 に変更し、評価関数を学習し、レーティングを測定する。

棋譜生成

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

棋譜シャッフル

シャッフルルーチン tanuki-棋譜シャッフルルーチン
qsearch あり

機械学習

機械学習ルーチン やねうら王機械学習ルーチン
学習モデル 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.8
やねうら王バージョン V5.33 相当 ただし、独自改良あり

レーティング測定

対局相手 https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing やねうら王 V5.33 で作成した評価関数
思考時間 持ち時間 300 秒 + 1 手 2 秒加算
対局数 5000
同時対局数 64
ハッシュサイズ 768
開始局面 たややん互換局面集

実験結果

機械学習

V5.33 … https://docs.google.com/document/d/1Lup-hHFH2_QWqEfe56obJ6OEwj15P-C0VO6pWV9-vgo/edit?usp=sharing

tanuki- + V5.33 … 本実験

レーティング測定

対局数=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-wcsc29-2019-05-06.suisho5.winning_percentage_for_win=0.80\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\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 FVScale2=20

対局数5000 先手勝ち2262(54.2%) 後手勝ち1910(45.8%) 引き分け828

engine1

勝ち1912(45.8% R-24.2 +-9.7) 先手勝ち1040(24.9%) 後手勝ち872(20.9%)

宣言勝ち96 先手宣言勝ち48 後手宣言勝ち48 先手引き分け421 後手引き分け407

engine2

勝ち2260(54.2%) 先手勝ち1222(29.3%) 後手勝ち1038(24.9%)

宣言勝ち66 先手宣言勝ち35 後手宣言勝ち31 先手引き分け407 後手引き分け421

1912,828,2260

学習ロスと検証ロスは、 V5.33 と比べて大きかった。

平手局面の評価値は、V5.33 と比べてほとんど変わらなかった。

評価値の絶対値は、V5.33 と比べて小さかった

レーティングは、V5.33 と比べて R-24.2 程度低かった。

考察

学習ロスと検証ロスが大きいのは、 勝敗項の教師信号に 0.8 を設定しているためだと思われる。

平手局面の評価値については、機械学習で大きな問題が起こっていないことを表していると思われる。

評価値の絶対値が小さいのは、勝敗項の教師信号に 0.8 を設定しているためだと思われる。

レーティングについては、勝敗項の教師信号に 0.8 を設定している点か、独自に改良した点のいずれかが、悪影響を及ぼしている可能性がある。

まとめ

tanuki- の学習部を、やねうら王 V5.33 に変更し、評価関数を学習し、レーティングを測定した。結果、同じ V5.33 を使用しているにもかかわらず、 R-24.2 程度レーティングが低かった。勝敗項の教師信号に 0.8 を設定している点か、独自に改良した点のいずれかが、悪影響を及ぼしている可能性がある。

次回の実験では勝敗項の教師信号を 1.0 に設定し、レーティングが改善するか確かめたい。