tanuki- 2026-05-26 bullet-shogi レーティングリグレッション調査用のベースライン
実験内容
- nnue-pytorch と bullet-shogi で学習したとき、 bullet-shogi で学習させたほうが有意にレーティングが低い原因を調べるため、調査のベースラインとなるネットワークパラメーターを学習させる。
棋譜生成
| 生成ルーチン | tanuki-棋譜生成ルーチン |
| 評価関数 | tanuki-.nnue-pytorch-2024-07-30.1 |
| 1手あたりの思考 | 深さ最大 9 思考ノード数最大 50,000 ノード |
| 開始局面 | foodgate の 2020 年~ 2021 年の棋譜を使用した。レーティング 3900 以上同士の対局のみ使用した。戦型が角換わりの対局が 10% になるよう調整した。 32 手目までから 1 局面ランダムに選択し、その局面を開始局面とした。ランダムムーブはしなかった。 |
| 生成局面数 | 10 億局面 × 8 セット |
| 生成条件 | 対局は打ち切らず詰みの局面まで学習データに出力した |
| フォルダ名 | tanuki-.nnue-pytorch-2024-07-30.1 |
| 開始局面の最大手数 | 32 |
シャッフル条件
| 生成ルーチン | tanuki-シャッフルルーチン |
| qsearch() | あり |
| 置換表 | 無効 |
| min_progress | 0.0 |
| 重複した局面 | 取り除かない |
知識蒸留
| Knowledge | Response-based Knowledge |
| Distillation Schemes | Offline Knowledge Distillation |
| Teacher network | DL 水匠 dlsuisho-15b-20220426 AobaZero 20250407_235846_model_resnet30x384_relu_060 |
機械学習
nnue-pytorch
| 機械学習ルーチン | nnue-pytorch + やねうら王 https://github.com/nodchip/nnue-pytorch/tree/shogi.2025-11-30.sfnnwop-1536 |
| 学習モデル | sfnnwop-1536 |
| 学習手法 | SGD |
| 最適化手法 | Ranger21 |
| 学習率調整手法 | StepLR |
| features | HalfKA_hm |
| max_epochs | 800 |
| max_time | 30:00:00:00 |
| lambda | 1.0 |
| start_lambda | None |
| end_lambda | None |
| qp_asymmetry | 0.0 |
| pow_exp | 2.5 |
| in_offset | 270 |
| out_offset | 270 |
| in_scaling | 340 |
| out_scaling | 380 |
| gamma | 0.992 |
| 初期学習率 (lr) | 8.75e-4 |
| num_workers | 16 |
| batch_size | 16384 |
| threads | 16 |
| compile_backend | cudagraphs |
| seed | 42 |
| network_save_period | 1000000000 |
| epoch_size | 100000000 |
| validation_size | 1000000 |
| 1 epoch 毎のネットワークパラメーターのクリップ | あり |
| ネットワークパラメーターの量子化 | 量子化なしで学習し、収束後に量子化する。 |
| ネットワークパラメーターの初期化方法 | pytorch のデフォルトの初期化手法で初期化する。 |
| 入玉ボーナス | 入玉時、持ち駒および敵陣三段目までに侵入している駒について、小駒 1 枚につき 20 点、大駒 1 枚につき 100 点、敵陣三段目までに侵入している駒 1 枚につき 20 点追加する。 |
bullet-shogi
| 機械学習ルーチン | bullet-shogi https://github.com/nodchip/bullet-shogi |
| bucket_mode | progress8kpabs |
| progress_coeff | tanuki-wcsc36 付属の progress.bin |
| output_format | tanuki-sfnnwop1536 |
| l0 | 1536 |
| l1 | 16 |
| l2 | 32 |
| scale | 600 |
| batch_size | 16384 |
| batches_per_superbatch | 6104 |
| superbatches | 300 |
| save_rate | 10000 |
| threads | 127 |
| batch_queue_size | 64 |
| optimizer | ranger |
| weight_decay | 0.0 |
| lr | 8.75e-4 |
| lr_gamma | 0.992 |
| lr_step | 1 |
| wdl | 0.5 |
| BRANCH | shogi-support |
レーティング測定
| Author | Nodchip |
| Creation | 2026/05/26 00:24:37 |
| Dev Source | https://github.com/nodchip/tanuki- |
| Dev Sha | 69eac6ad1a500823ab05a49983c1d18f369852ec |
| Dev Branch | tanuki-wcsc36-engine.shogitest.sfnnwoP1536.progress |
| Dev Bench | 1 |
| Dev Network | tanuki-.bullet-shogi.2026-05-07.00-400 |
| Dev Book | None |
| Dev Options | Threads=1 Hash=16 |
| Dev Time | 8.0+0.08 |
| Base Source | https://github.com/nodchip/tanuki- |
| Base Sha | 69eac6ad1a500823ab05a49983c1d18f369852ec |
| Base Branch | tanuki-wcsc36-engine.shogitest.sfnnwoP1536.progress |
| Base Bench | 1 |
| Base Network | tanuki-.nnue-pytorch-2026-05-24.0 |
| Base Book | None |
| Base Options | Threads=1 Hash=16 |
| Base Time | 8.0+0.08 |
| Opening Book | SHOGI.floodgate32-80.adjust_bishop_exchange.sfen.epd |
| Upload PGNs | FALSE |
| Syzygy WDL | DISABLED |
| Syzygy ADJ. | OPTIONAL |
| Win ADJ. | movecount=3 score=2000 |
実験結果
レーティング測定
Elo | -451.55 +- 94.15 (95%)
SPRT | 8.0+0.08s Threads=1 Hash=16MB
LLR | -2.41 (-2.25, 2.89) [0.00, 4.00]
Games | N: 318 W: 20 L: 294 D: 4
Penta | [136, 4, 18, 0, 1]
https://bench.kishibe.dyndns.tv/test/203/
自己対局は、 nnue-pytorch で学習させたものと比べ、 R451.55 レーティングが低く、有意な差があった。
考察
自己対局でレーティングが有意に低かったのは、ロス関数の違いや、パラメーターの違いによるものだと思う。まったく勝てていないわけではないため、学習に完全に失敗しているわけではないと思う。
まとめ
nnue-pytorch と bullet-shogi で学習したとき、 bullet-shogi で学習させたほうが有意にレーティングが低い原因を調べるため、調査のベースラインとなるネットワークパラメーターを学習させた。
自己対局は、 nnue-pytorch で学習させたものと比べ、 R451.55 レーティングが低く、有意な差があった。自己対局でレーティングが有意に低かったのは、ロス関数の違いや、パラメーターの違いによるものだと思う。まったく勝てていないわけではないため、学習に完全に失敗しているわけではないと思う。
次回は、ロス関数を nnue-pytorch で使われている abs(error)^2.5 に変更し、学習させ、レーティングを測定したい。