TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

将棋AIの実験ノート:最大手数で引き分けの局面を除外

dlshogiの強化学習では、最大手数(320手)に達した局面の価値を0.5として学習対象としている。

補助タスクの学習の際に、教師データを調べていた際に、あと数手で詰みの局面で引き分けになっている局面が含まれていることに気付いた(これまであまりチェックしていなかった)。

ほぼ勝ち(or負け)の局面を引き分けで学習すると、価値の精度に悪影響がありそうなので、除外した方がよさそうなので、引き分けも学習した場合と除外した場合の精度を比較してみた。
結論から言うと、ほとんど変わらなかったが、記録として残しておく。

除外方法

強化学習で教師データを作り直すのは時間がかかるので、生成済みの教師データから最大手数に達した引き分けの局面を除外した。
なお、dlshogiで使用しているhcpeフォーマットは、局面を対局と紐づけずに記録しており、候補が1手のみの局面やリーグ戦の対局では局面が数手飛びになっている。
局面の差分が小さいかで対局か判定して、最後のevalが0の場合は千日手として残して、それ以外を除外するようにした。
除外用コード(千日手入玉を補助ターゲットとする処理も含む):
ElmoTeacherDecoder/hcpe_to_hcpe2.cpp at master · TadaoYamaoka/ElmoTeacherDecoder · GitHub

比較方法

引き分けを除外する前の局面を学習した場合と、引き分けを除外した場合を学習した場合を比較した。
引き分けを除外すると学習局面が少なくなるが、それでも精度が高くなるようであれば除外した方がよいと言える。

比較結果

約1億局面に対して、引き分けを除外すると局面数は以下の通りとなった。

引き分け 訓練局面数
あり 60911062
なし 60679983

0.379%が引き分けの対局の局面であった。

訓練損失
引き分け 訓練平均方策損失 訓練平均価値損失
あり 0.68108568 0.38443670
なし 0.68366737 0.38153932
テスト損失
引き分け テスト方策損失 テスト価値損失
あり 0.97650576 0.54598011
なし 0.97590881 0.54592327
テスト正解率
引き分け テスト方策正解率 テスト価値正解率
あり 0.42818923 0.70668091
なし 0.42822660 0.70638313

ほぼ誤差の範囲である。

初期局面集を序盤のみにして生成したデータでも比較した(上記の初期局面は終盤まで含む5億局面を使用)。

引き分け 訓練局面数
あり 5709861
なし 5699771

0.176%が引き分けの対局の局面であった。

訓練損失
引き分け 訓練平均方策損失 訓練平均価値損失
あり 0.92409930 0.50431182
なし 0.92570610 0.50405253
テスト損失
引き分け テスト方策損失 テスト価値損失
あり 1.14031462 0.62040876
なし 1.14162646 0.61995558
テスト正解率
引き分け テスト方策正解率 テスト価値正解率
あり 0.36368881 0.65681287
なし 0.36326607 0.65728349

こちらも、ほぼ誤差の範囲である。

まとめ

最大手数に達した対局を除外してもしなくても大差ないということが確認できた。
全体に対する割合は、0.4%未満であるためほとんど影響がないのだろう。