Discordで、評価値と勝率を変換する際の以下のシグモイド関数の係数aは、dlshogiはelmo_for_learnの自己対局から求めた756.0864962951762という値を使用しているが、floodgateの棋譜などを学習する場合はもっと低い値になるので補正すべきというやり取りがあった。
floodgateの棋譜から調査
R2000以上の棋譜
R2000以上とすると、
a = 398.66185164
という結果であった。
調査に使用したスクリプト:csa_score_value_fit.py · GitHub
Discordでのやり取りの通り、係数aは小さい値になった。
また、レーティングが高いほど、係数aが小さくなる傾向がありそうである。
自己対局の評価値と勝率の関係
dlshogiの自己対局で生成した教師データに対しても、評価値と勝率の係数を調べてみた。
自己対局では評価値はルートノードの訪問回数が最も多い子ノードの平均価値(勝率)を、評価値に変換して記録している。
その際の係数には、a=756.0864962951762を使用しているため、その値に近い値になると考えていた。
しかし、実際に調べてみると、
a = 488.09106542
という結果であった。
調査に使用したスクリプト:hcpe_score_value_fit.py · GitHub
これは、自己対局時の探索で求めた勝率と、実際の対局結果を統計処理した勝率にずれがあることを示している。
係数が小さい方にずれているということは、実際の勝率が探索で求めた勝率よりも高いことを示している。
なぜ係数が小さい方にずれるのかは分からないが、探索で求めた評価値をそのまま学習に使うよりも、実際の勝敗から求めた係数で補正した方がよい可能性がある。
評価値を補正して学習
評価値を勝敗から求めた係数で補正したデータを使用し、dlshogiのモデルを学習して、補正なしの場合とありの場合で、精度を比較した。
テストデータには、2017年~2018年6月のfloodgateのR3500以上の棋譜からサンプリングした856,923局面(重複なし)を使用した。
初期値とデータのシャッフルにより結果が変わるため4回測定して平均を求めている。
精度は、方策、価値(勝率)、Q値(評価値)のテスト損失で比較する。
(正解率は、テストデータのクラスの分布が不均衡だと比較しにくいため、精度の比較には損失の方がよい)
変換に使用したスクリプト:fix_hcpe_eval.py · GitHub
floodgateの棋譜
2019年~2020年のR3800以上のfloodgateの棋譜(6235207局面)の評価値を補正して、初期値から学習した結果は以下の通り。
方策 | 価値(勝率) | Q値(評価値) | |
---|---|---|---|
補正なし | 1.70100901 | 0.656220725 | 0.688526105 |
補正あり | 1.713669813 | 0.65317638 | 0.691249333 |
補正ありの場合が、価値の損失が小さくなっている。
(その変わり、方策の損失が大きくなっているが、これは、初期値から学習した段階では、方策と価値がトレードオフの関係で学習されるためと考えられる。)
補正を行うことで、価値の精度が上がることを示している。
Q値(評価値)が、補正を行った方が高くなっているのは、テストデータの評価値は補正を行っていないためと考えられる。
テストデータに評価値を補正したデータを使用すると、
方策 | 価値(勝率) | Q値(評価値) | |
---|---|---|---|
補正なし | 1.648518813 | 0.65597565 | 0.659327383 |
補正あり | 1.659034425 | 0.65457407 | 0.65837852 |
補正ありの方が、Q値(評価値)の損失も小さくなった。
自己対局の棋譜
自己対局で生成した教師データ(4千万局面)の評価値を補正して、学習済みモデルに追加学習を行った結果は以下の通り。
方策 | 価値(勝率) | Q値(評価値) | |
---|---|---|---|
補正なし | 0.816202783 | 0.49896154 | 0.644653933 |
補正あり | 0.812867498 | 0.493460893 | 0.658458863 |
補正ありの場合が、価値の損失が小さくなっている。
また、方策の損失も小さくなっている。
Q値(評価値)の損失は大きくなっているが、テストデータの評価値の補正を行っていないためである。
テストデータに評価値を補正したデータを使用すると以下の通りになった。
方策 | 価値(勝率) | Q値(評価値) | |
---|---|---|---|
補正なし | 0.80054098 | 0.498679225 | 0.512195093 |
補正あり | 0.79759852 | 0.493009955 | 0.508437538 |
Q値(評価値)の損失についても小さくなっている。