TOP
> 記事閲覧

件名 | : Re: AobaZeroをcPUCTを動的に変更、王が逃げる手が1手を延長で、+25 Elo強く |
投稿日 | : 2022/12/23(Fri) 11:47 |
投稿者 | : 山下 |
参照先 | : |
棋譜の最初の情報ですが、
'no000061982092 12/23/22
'w 4201 (crc64: fd5ffb620756df3), autousi 3.7, usi-engine 39, no-resign
'-q -r 0.0 -p 6400 -kldgain 0.00000075 -n -m 30 -w ./weight-save/w000000004200.txt -e 0, average_winrate 0.565
2022年12月23日に作成された61982092番目の棋譜でw4201での自己対戦です。
autousi、usi-engineのバージョンは3.7と39、no-resign は10棋譜に1棋譜の割合で登場しますが
投了禁止で最後まで指す、という意味です。
-q は余計な情報を出力しない。
-r 0.0 は投了しない(ただし投了はautousiが行う)
-p 6400 は基本1手6400playout
-kldgain 0.00000075 は100playoutごとのKLDgainがこの値以下なら打ち切る、訪問回数の分布に変化がないなら打ち切ります。平均1568playout程度になります。
-n はRootにディリクレノイズを与える
-m 30 は30手目までは訪問回数の分布でランダムに選ぶ
-w ./weight-save/w000000004200.txt はaobazを起動したときはw4200(途中でweightは更新されて現在はw4201)
-e 0 はメモリ共有で局面の情報をautousiに送り、NNの計算をミニバッチにして計算
average_winrate 0.565 は現在の先手勝率
%TORYO,'autousi,resign-th=0.250000,v=0.239,r=0.326,4013,8676HI,1982m,2288UM,1589r, ...
棋譜の最後に登場するこれは、autousiが勝率0.250を下回ったので強制投了した、という意味です。
この投了の閾値は投了のミスが5%以下になるように自動調整されています。つまり95%の投了は正しい、です。
'no000061982092 12/23/22
'w 4201 (crc64: fd5ffb620756df3), autousi 3.7, usi-engine 39, no-resign
'-q -r 0.0 -p 6400 -kldgain 0.00000075 -n -m 30 -w ./weight-save/w000000004200.txt -e 0, average_winrate 0.565
2022年12月23日に作成された61982092番目の棋譜でw4201での自己対戦です。
autousi、usi-engineのバージョンは3.7と39、no-resign は10棋譜に1棋譜の割合で登場しますが
投了禁止で最後まで指す、という意味です。
-q は余計な情報を出力しない。
-r 0.0 は投了しない(ただし投了はautousiが行う)
-p 6400 は基本1手6400playout
-kldgain 0.00000075 は100playoutごとのKLDgainがこの値以下なら打ち切る、訪問回数の分布に変化がないなら打ち切ります。平均1568playout程度になります。
-n はRootにディリクレノイズを与える
-m 30 は30手目までは訪問回数の分布でランダムに選ぶ
-w ./weight-save/w000000004200.txt はaobazを起動したときはw4200(途中でweightは更新されて現在はw4201)
-e 0 はメモリ共有で局面の情報をautousiに送り、NNの計算をミニバッチにして計算
average_winrate 0.565 は現在の先手勝率
%TORYO,'autousi,resign-th=0.250000,v=0.239,r=0.326,4013,8676HI,1982m,2288UM,1589r, ...
棋譜の最後に登場するこれは、autousiが勝率0.250を下回ったので強制投了した、という意味です。
この投了の閾値は投了のミスが5%以下になるように自動調整されています。つまり95%の投了は正しい、です。
AobaZeroでも試してみました。
評価値の変動が小さいならcPUCTを小さく、大きいなら大きくする手法です。
1手100playoutだと+30 ELOぐらい効果がありそうなのですが、1手800playoutだと
効果が下がるようでplayoutが増えるほど変動を小さくしています。
Dynamic Variance-Scaled cPUCT
https://github.com/lightvector/KataGo/blob/master/docs/KataGoMethods.md#dynamic-variance-scaled-cpuct
AobaZeroでの実装
https://github.com/kobanium/aobazero/blob/release/src/usi-engine/bona/ysszero.cpp#L1766
この他に王手で逃げる手が1手の時はその局面を評価せずに1手進めて評価、も少し効果があるようなので採用してます。
これら2つで、1手100playoutだと+40 ELO、1手800playoutだと+25 ELO程度強くなってます。
棋譜の生成は1手平均1600なので、もう少し効果は小さいかもしれません。
他に棋譜に保存する情報に、その局面でのNNのValueとPolicyの値を含めました。
+7776FU,'v=0.557,r=0.555,1900,2726FU,744n,7776FU,395j,6978KI,329k, ...
例えば上ならば探索後の(自分から見た)勝率が0.557,この局面のNNのValueは0.555、合計1900playoutを実行、
▲26歩(27)の試行回数は744回、この手のPolicyは0.189 (n)、▲76歩(77)の試行回数は395回、Policyは0.110 (j)
Policyの値はA-Z,a-z の52段階に圧縮されています。下の表のように0.001から1.144倍づつ増える数に
一番近いもの、となっています。なお、実際はRootのPolicyにはディリクレノイズが入るのですが
保存されてる数値はノイズが入る前、のものです。
さらに、この数値はNNの出力そのもの、でなく、温度1.8でPolicyが小さい手も探索しやすくした変換した後の値です。
https://github.com/kobanium/aobazero/blob/release/src/usi-engine/bona/ysszero.cpp#L1624
for (i=0;i<52;i++) {
double k = 1.144;
double min = 0.001;
double p = pow(k,i) * min;
int c = 'A' + i + (i >= 26)*6;
PRT("%2d:%c:p=%f\n",i,c,p);
}
61940158番目の棋譜から、このフォーマットになっています。
これらの情報は学習させる局面の確率を変える実験用です。
対水匠5(7.50,1手40k(250k))と1手100playout(800 playout)の勝率。w4195。互角局面(24手目まで)利用。256x20block
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
1227-39-1134 2400 (41-39-1)(s=1252-1109,0.530), 0.519(0.020)( 13) 1手100 playout 基準
1364-37- 999 2400 (54-37-5)(s=1166-1197,0.493), 0.576(0.020)( 53) 1手100 playout 動的cPUCT + 王逃げ1手、を延長
1234-36-1130 2400 (86-36-6)(s=1207-1157,0.511), 0.522(0.020)( 15) 1手800 playout 基準
1316-46-1038 2400 (88-44-4)(s=1188-1166,0.505), 0.558(0.020)( 40) 1手800 playout 動的cPUCT + 王逃げ1手、を延長
0:A:0.001000
1:B:0.001144
2:C:0.001309
3:D:0.001497
4:E:0.001713
5:F:0.001959
6:G:0.002242
7:H:0.002564
8:I:0.002934
9:J:0.003356
10:K:0.003839
11:L:0.004392
12:M:0.005025
13:N:0.005748
14:O:0.006576
15:P:0.007523
16:Q:0.008606
17:R:0.009846
18:S:0.011263
19:T:0.012885
20:U:0.014741
21:V:0.016863
22:W:0.019292
23:X:0.022070
24:Y:0.025248
25:Z:0.028884
26:a:0.033043
27:b:0.037801
28:c:0.043244
29:d:0.049471
30:e:0.056595
31:f:0.064745
32:g:0.074068
33:h:0.084734
34:i:0.096936
35:j:0.110895
36:k:0.126864
37:l:0.145132
38:m:0.166031
39:n:0.189939
40:o:0.217291
41:p:0.248580
42:q:0.284376
43:r:0.325326
44:s:0.372173
45:t:0.425766
46:u:0.487076
47:v:0.557215
48:w:0.637454
49:x:0.729248
50:y:0.834260
51:z:0.954393