TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】入玉特徴量

現在のdlshogiの入力特徴量には、入玉宣言に関連する特徴量を含んでいない。
入玉宣言の精度を上げるため、入玉宣言に関する特徴量を加えることを検討する。

現在の入力特徴量

現在の入力特徴量:

  • 盤上の駒
  • 駒の種類ごとの効き
  • 効き数
  • 持ち駒
  • 王手

持ち駒は、歩については、8枚以上は区別しない。
また、先手、後手の区別はなく、後手は盤面を180度回転して入力する。

課題

この入力特徴量では、入玉宣言勝ちの条件を正しく認識できない問題がある。

入玉宣言勝ちは、正確な持ち駒の枚数が必要なため、8枚以上の歩も認識する必要がある。
また、先手、後手で宣言に必要な点数が異なるため、先手、後手を区別する必要がある。

また、機械学習モデルでは、点数の合計など演算が必要な特徴量は、演算結果を特徴量として入力する方が精度が上がる場合がある。

入玉特徴量

先手、後手の区別について、入玉宣言に関わらない局面では、先手、後手の区別は不要であるため、単に先手、後手を特徴量とするよりも、入玉宣言に必要な残り点数を特徴量とすることで、間接的に先手、後手の区別することにする。
こうすることで、局面を先手、後手で等価に扱える。

点数すべてを特徴量にすると、計算コストが増えるため、残り点数10点未満を特徴量とする。

入玉特徴量:

  • 入玉しているか
  • 敵陣の玉を除く枚数(10枚までの残り枚数。9枚以下をワンホットで与える。)
  • 残り点数(先手は28点、後手は27点までの残り点数。9点以下をワンホットで与える。)

実験

入玉特徴量の有無で、精度が変わるか比較した。

訓練条件:

  • ResNet 20ブロック256フィルタのモデル
  • 訓練データ約3.9億局面
  • バッチサイズ4096
  • Momentum SGD
  • 学習率0.04からエポックごとに半減
  • 8エポック

評価データは、2017年~2018年6月のfloodgateのR3500以上の棋譜からサンプリングした856,923局面の他に、NNUE系の10M~80Mノードで対局した棋譜から入玉宣言勝ちした棋譜を抽出した20,544,764局面を用いた。
精度はばらつくため4回測定して平均する。

実験結果

評価データ:floodgateからサンプリングしたデータ
入玉特徴量有無 方策損失 価値損失 方策正解率 価値正解率
入玉特徴量なし 1.4413 0.4682 0.5224 0.7580
入玉特徴量あり 1.4422 0.4677 0.5222 0.7586
評価データ:入玉宣言勝ちした棋譜
入玉特徴量有無 方策損失 価値損失 方策正解率 価値正解率
入玉特徴量なし 2.3377 0.1030 0.3884 0.9539
入玉特徴量あり 2.3371 0.0883 0.3874 0.9622

考察

floodgateからサンプリングした評価データでは、方策の精度はほぼ変わらず、価値の損失もほぼ変わらない。

入玉宣言勝ちした棋譜から抽出した評価データでは、方策の精度はほぼ変わらず、価値の損失が入力特徴量がある場合少しだけ下がっている。

入玉特徴量を加えた方が、入玉宣言勝ちの局面評価の精度は少しだけ上がると言えそうである。

まとめ

dlshogiに入玉特徴量を加えて入玉宣言の精度が上がるか検証した。
結果、入玉宣言勝ちした棋譜の局面の評価精度が少し向上することが確認できた。

入玉特徴量を加えることで、モデルの入玉宣言に関する認知負荷が下がることで、全体の精度が上がることを期待していたが、そのようなことはなかった。
今回は残り10点未満を特徴量にしたが、20点未満などの条件でも検証してみたい。