TOP
> 記事閲覧
NNUEの学習をAobaZeroの評価値で試しています
| 件名 | : Re: NNUEの学習をAobaZeroの評価値で試しています |
| 投稿日 | : 2025/10/19(Sun) 23:57 |
| 投稿者 | : 2tsumuji |
| 参照先 | : |
ありがとうございます。
コンシューマー向けの構成でも十分動くのですね、ほぼGPUがボトルネックでしょうか。これなら少額の出資で自分も試せそうです。
静止探索の処理についても解説ありがとうございます。
山岡さんの実験ではqsearchで動いてしまう局面は取り除き、通常のNNUEの学習ではすべてにqsearchを適応させ、山下さんの実験ではqsearchで動くものは動かす、といろんなやり方があるようで興味深いです。
コンシューマー向けの構成でも十分動くのですね、ほぼGPUがボトルネックでしょうか。これなら少額の出資で自分も試せそうです。
静止探索の処理についても解説ありがとうございます。
山岡さんの実験ではqsearchで動いてしまう局面は取り除き、通常のNNUEの学習ではすべてにqsearchを適応させ、山下さんの実験ではqsearchで動くものは動かす、といろんなやり方があるようで興味深いです。
| 件名 | : Re: NNUEの学習をAobaZeroの評価値で試しています |
| 投稿日 | : 2025/10/18(Sat) 19:42 |
| 投稿者 | : 山下 |
| 参照先 | : |
Ryzen 9 7900、 128GB, HDD 7.2TB, RTX 4090、ubuntu 24 と、
Ryzen 7 5700X、128GB, HDD 5.4TB, RTX 3090、ubuntu 24の2台です。4090の方が2.4倍学習が速いです。
80億の局面は300GBなので、それなりのHDDであれば足りると思います。
元のデータは▲76歩△34歩▲22角成、の局面も含まれるのですが
この局面を静止探索しますと△同銀、と1手進んだ状態になります。
そのために元のデータを同銀の局面に入れ替えます。評価値もこの局面に対しての値にします。
これはαβ系の探索は必ず△同銀の局面で評価するので、途中の不安定な局面を学習させるのは無駄だろう、
というアイデアだと思います。実際それで+200ぐら強くなっているので効果があります。
Ryzen 7 5700X、128GB, HDD 5.4TB, RTX 3090、ubuntu 24の2台です。4090の方が2.4倍学習が速いです。
80億の局面は300GBなので、それなりのHDDであれば足りると思います。
元のデータは▲76歩△34歩▲22角成、の局面も含まれるのですが
この局面を静止探索しますと△同銀、と1手進んだ状態になります。
そのために元のデータを同銀の局面に入れ替えます。評価値もこの局面に対しての値にします。
これはαβ系の探索は必ず△同銀の局面で評価するので、途中の不安定な局面を学習させるのは無駄だろう、
というアイデアだと思います。実際それで+200ぐら強くなっているので効果があります。
| 件名 | : Re: NNUEの学習をAobaZeroの評価値で試しています |
| 投稿日 | : 2025/10/17(Fri) 23:37 |
| 投稿者 | : 2tsumuji |
| 参照先 | : |
nnue-pytorchの学習というのも面白そうですね。
興味が出てきたので、よければいくつか教えていただけないでしょうか
1.学習用のマシンスペックはどのようなレベルでしょうか。
コンシューマー向けのCPUやGPUでも動くのであれば実施してみたいのですが、80億などの大量の学習データを扱うには結構なスペックが必要に見えました。
律速がほぼGPUのみであればともかく、RAM容量やCPUスペック、SSDの速度などでも
時間が大きく変わる場合、XeonとかTR, epycなどをどうにか手に入れる必要があるのかなと思いました。
2.私の読解力不足で申し訳ないのですが、
「静止探索で動く局面を入れ替える方」、「静止探索で差し替えたデータ」というのはどのような加工を学習データに行ったのでしょうか。
興味が出てきたので、よければいくつか教えていただけないでしょうか
1.学習用のマシンスペックはどのようなレベルでしょうか。
コンシューマー向けのCPUやGPUでも動くのであれば実施してみたいのですが、80億などの大量の学習データを扱うには結構なスペックが必要に見えました。
律速がほぼGPUのみであればともかく、RAM容量やCPUスペック、SSDの速度などでも
時間が大きく変わる場合、XeonとかTR, epycなどをどうにか手に入れる必要があるのかなと思いました。
2.私の読解力不足で申し訳ないのですが、
「静止探索で動く局面を入れ替える方」、「静止探索で差し替えたデータ」というのはどのような加工を学習データに行ったのでしょうか。
| 件名 | : Re: NNUEの学習をAobaZeroの評価値で試しています |
| 投稿日 | : 2025/09/24(Wed) 10:48 |
| 投稿者 | : 山下 |
| 参照先 | : |
NNUEを試して分かったのは
・学習局面が1億5000万ではすぐにテストのlossが反転。過学習。全然足りない。
・3億でもlossが反転。足りない。
・10億でlossは反転しなくなる。野田さんの言うように80億ぐらい必要な感じ。NNUEは標準でも表現力高い。
・グラフからdr2の値を使ったものや、Aobaとhaoの平均(Aoba 0.50)が標準NNUEでは強そうなのでこれで行く
・選手権でお話を聞いた限りではDL水匠がいいらしい。強すぎてもダメとか。よく分からない。
・dr2を3090で値を付け替えるのに10日間かかった。Aobaは4090と3090、2つで14日間。4090は2.4倍ほど速い。
・NNUEはサイズを4倍にしてもnpsが1.45倍しか遅くならない。すごい。振電3は2倍のサイズだが1.16倍遅いだけ。
・野田さんの実験データから 1024x2-8-96 が良さそうなのでこれを試す。これがサイズは4倍になる。
・NNUEのサイズが4倍で学習時間は3倍に。3090のminibatch 8192(標準)、で100エポックが3時間10分。標準だと1時間。
・ネットワーク4倍で+180ほど強くなってる。haoのデータのままだとこれほど伸びない?これがDL系で値を付け替えたせいかは不明。
・これだけ伸びるならNNUEもサイズもデカくするほどいいように思う。特に速度がほとんど落ちないのが素晴らしい。
・val lossは下がり続けるが、その前に棋力の上昇はサチる。
・学習コマンドは下。学習率は500エポックごとにval lossが下がってなければ半分、になる。ただし棋力の上昇がその前に止まるので20億局面ぐらいで半分、でもいい感じ
python3 train.py --features "HalfKP" --max_epochs 1000000 --default_root_dir logs/20250920_halfkp_1024x2-8-96 --lr 0.5 0.05 --num-workers 8 --lambda 1.0 0.5 --label-smoothing-eps 0.001 --accelerator gpu --devices 1 --score-scaling 361 --min-newbob-scale 1e-5 --num-epochs-to-adjust-lr 500 --momentum 0.9 --network-save-period 100 --resume-from-model "" /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/8_seq_q_aoba_ave.bin /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/5340981_126_shuffle_q_aoba.bin
・学習局面が1億5000万ではすぐにテストのlossが反転。過学習。全然足りない。
・3億でもlossが反転。足りない。
・10億でlossは反転しなくなる。野田さんの言うように80億ぐらい必要な感じ。NNUEは標準でも表現力高い。
・グラフからdr2の値を使ったものや、Aobaとhaoの平均(Aoba 0.50)が標準NNUEでは強そうなのでこれで行く
・選手権でお話を聞いた限りではDL水匠がいいらしい。強すぎてもダメとか。よく分からない。
・dr2を3090で値を付け替えるのに10日間かかった。Aobaは4090と3090、2つで14日間。4090は2.4倍ほど速い。
・NNUEはサイズを4倍にしてもnpsが1.45倍しか遅くならない。すごい。振電3は2倍のサイズだが1.16倍遅いだけ。
・野田さんの実験データから 1024x2-8-96 が良さそうなのでこれを試す。これがサイズは4倍になる。
・NNUEのサイズが4倍で学習時間は3倍に。3090のminibatch 8192(標準)、で100エポックが3時間10分。標準だと1時間。
・ネットワーク4倍で+180ほど強くなってる。haoのデータのままだとこれほど伸びない?これがDL系で値を付け替えたせいかは不明。
・これだけ伸びるならNNUEもサイズもデカくするほどいいように思う。特に速度がほとんど落ちないのが素晴らしい。
・val lossは下がり続けるが、その前に棋力の上昇はサチる。
・学習コマンドは下。学習率は500エポックごとにval lossが下がってなければ半分、になる。ただし棋力の上昇がその前に止まるので20億局面ぐらいで半分、でもいい感じ
python3 train.py --features "HalfKP" --max_epochs 1000000 --default_root_dir logs/20250920_halfkp_1024x2-8-96 --lr 0.5 0.05 --num-workers 8 --lambda 1.0 0.5 --label-smoothing-eps 0.001 --accelerator gpu --devices 1 --score-scaling 361 --min-newbob-scale 1e-5 --num-epochs-to-adjust-lr 500 --momentum 0.9 --network-save-period 100 --resume-from-model "" /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/8_seq_q_aoba_ave.bin /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/5340981_126_shuffle_q_aoba.bin
| 件名 | : Re: NNUEの学習をAobaZeroの評価値で試しています |
| 投稿日 | : 2025/09/24(Wed) 09:27 |
| 投稿者 | : 山下 |
| 参照先 | : |
学習は野田さんの2025年8月7日版のnnue-pytorchで行ってます。
git clone -b shogi.2025-08-07.halfkp_1536x2-8-96 https://github.com/nodchip/nnue-pytorch.git
環境はUbuntu 24.04です。
山岡さんのブログを参考に nnue_training_data_stream.h を変更しています。
山岡さんのgithubのnnue-pythorchも試したのですが野田さんの最新版の方が高速で動作しました。
静止探索で動く局面を入れ替える方が+200ぐらい強くなるようです。
ELO差(40000固定 vs 水匠5の10000固定)
Epoch 静止探索なし 静止探索あり
100 22 170
200 84 291
下は静止探索を行った深さです。
静止探索しなかった(ply 0)のは全体の52%。ほぼ半分の局面が元の局面とは違う局面になってます。
元々はdepth 9で探索した値が入ってるのですが、書き換えたのは22%は(静止探索の)depth 1,13%はdepth 2が入ることになります。
これでいいのだろうか・・・。+200も強くなってるので問題ないのか・・・。
静止探索で探索した深さ 局面数
ply 0=529331010 52%
ply 1=228483593 22%
ply 2=137201019 13%
ply 3= 58832621
ply 4= 25969336
ply 5= 16365265
ply 6= 3268875
ply 7= 347240
ply 8= 152095
ply 9= 58627
all 1000009681
※ 5606850_000_126_shuffle_q.bin 、元データを127個くっつけたもの。全体の8分の1
$ git clone -b tanuki-dr4-learner https://github.com/nodchip/tanuki-.git nnue_dr4_learner
$ make evallearn
fseeko64()などを修正。
20250807のnnue-pytorchに入ってるnn.binを静止探索で使う。
/shogi/nnue_dr4_learner/exe$ cp -p ../../nnue_20250807/eval/nn.bin eval/
強さを調べると水匠5とほぼ同じ棋力。ひょっとして同じものかも。
結構まじめにシャッフルしないと学習のlossに段差が出来る。
8分の1に分割して10億局面を完全にシャッフル。8ファイルから1個ずつ取り出して80億を再構築。
以下で静止探索とシャッフルを。シャッフルはしてあるので不要だけど。
./yane_evallearn usi , Threads 8 , EvalDir eval , KifuDir /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/train , ShuffledKifuDir /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/train/shuffle , ApplyQSearch true , isready , usinewgame , shuffle_kifu , quit
nnue-pytorchを試す
https://tadaoyamaoka.hatenablog.com/entry/2022/06/24/222305
git clone -b shogi.2025-08-07.halfkp_1536x2-8-96 https://github.com/nodchip/nnue-pytorch.git
環境はUbuntu 24.04です。
山岡さんのブログを参考に nnue_training_data_stream.h を変更しています。
山岡さんのgithubのnnue-pythorchも試したのですが野田さんの最新版の方が高速で動作しました。
静止探索で動く局面を入れ替える方が+200ぐらい強くなるようです。
ELO差(40000固定 vs 水匠5の10000固定)
Epoch 静止探索なし 静止探索あり
100 22 170
200 84 291
下は静止探索を行った深さです。
静止探索しなかった(ply 0)のは全体の52%。ほぼ半分の局面が元の局面とは違う局面になってます。
元々はdepth 9で探索した値が入ってるのですが、書き換えたのは22%は(静止探索の)depth 1,13%はdepth 2が入ることになります。
これでいいのだろうか・・・。+200も強くなってるので問題ないのか・・・。
静止探索で探索した深さ 局面数
ply 0=529331010 52%
ply 1=228483593 22%
ply 2=137201019 13%
ply 3= 58832621
ply 4= 25969336
ply 5= 16365265
ply 6= 3268875
ply 7= 347240
ply 8= 152095
ply 9= 58627
all 1000009681
※ 5606850_000_126_shuffle_q.bin 、元データを127個くっつけたもの。全体の8分の1
$ git clone -b tanuki-dr4-learner https://github.com/nodchip/tanuki-.git nnue_dr4_learner
$ make evallearn
fseeko64()などを修正。
20250807のnnue-pytorchに入ってるnn.binを静止探索で使う。
/shogi/nnue_dr4_learner/exe$ cp -p ../../nnue_20250807/eval/nn.bin eval/
強さを調べると水匠5とほぼ同じ棋力。ひょっとして同じものかも。
結構まじめにシャッフルしないと学習のlossに段差が出来る。
8分の1に分割して10億局面を完全にシャッフル。8ファイルから1個ずつ取り出して80億を再構築。
以下で静止探索とシャッフルを。シャッフルはしてあるので不要だけど。
./yane_evallearn usi , Threads 8 , EvalDir eval , KifuDir /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/train , ShuffledKifuDir /home/yss/shogi/dlshogi_hcpe/shogi_hao_depth9/train/shuffle , ApplyQSearch true , isready , usinewgame , shuffle_kifu , quit
nnue-pytorchを試す
https://tadaoyamaoka.hatenablog.com/entry/2022/06/24/222305

2025年選手権版のAobaZeroの0手読みの評価値で上書きしたものでNNUEの作成を試しています。
グラフは「Aoba 0.50 1024x2-8-96」以外は標準NNUE(256x2-32-32)です。
dr2はdlshogiのdr2(最後の公開版、15b)で上書きしたもの。
「Aoba 0.75」はAobaZeroの評価値を75%、haoの評価値を25%、という意味です。
静止探索(基準)はhaoのデータをそのままです。ただし静止探索で動く局面を差し替えています。
値を上書き、はすべてこの静止探索で差し替えたデータ、に対してです。
参考リンク
nnue-pytorchの環境構築(将棋AI評価関数学習器)
https://select766.hatenablog.com/entry/2024/05/26/173802
nnue-pytorchを試す その3
https://tadaoyamaoka.hatenablog.com/entry/2022/08/14/192614
NNUE 評価関数の学習データを公開しました。 Hao で depth=9 で生成
https://x.com/nodchip/status/1764231080134246619