TadaoYamaokaの開発日記

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

【dlshogi】位置エンコーディング(その2 入玉局面)

前回、ResNetベースのモデルにおける位置エンコーディングの効果について測定した。
結果、位置エンコーディング有無による差は、ほぼなかった。

入玉の局面においては、差がある可能性があるため、追加で検証した。

実験条件

評価データとして、

  1. NNUE系1000万ノードで探索した棋譜から、どちらかが入玉した以降の局面(1371047局面)
  2. dlshogiの自己対局(1万ノード)で生成した棋譜から、どちらかが入玉した以降の局面(1502134局面)

の2つのデータセットで評価する。

モデルは、ラージカーネルの検証で使用した、20ブロック256フィルタのResNetに対して9x1と9x1と1x1のブロックを5ブロック間隔で入れ替えたモデルをベースのモデルとして、学習可能な位置エンコーディングを入力層の活性化関数の前または後に加えたモデルで比較する。

  1. ベースモデル
  2. 位置エンコーディング(活性化関数前)
  3. 位置エンコーディング(活性化関数後)

結果

NNUE系1000万ノードで探索した棋譜
方策損失 価値損失 方策正解率 価値正解率
ベースモデル 2.2994 0.1107 0.3951 0.9498
位置エンコーディング(活性化関数前) 2.3128 0.1095 0.3938 0.9503
位置エンコーディング(活性化関数後) 2.3084 0.1103 0.3933 0.9503
dlshogiの自己対局(1万ノード)で生成した棋譜
方策損失 価値損失 方策正解率 価値正解率
ベースモデル 1.8095 0.2503 0.6005 0.8797
位置エンコーディング(活性化関数前) 1.8226 nan 0.6017 0.8796
位置エンコーディング(活性化関数後) 1.8192 0.2500 0.6003 0.8798

考察

どちらのデータセットでも、方策の精度はベースモデルが高く、価値の精度はほぼ同じという結果になった。
(なお、位置エンコーディングを活性化関数前に加えたモデルでは、価値損失がnanになり、学習に失敗している。これは、位置エンコーディングの正規化を行っていないことが関係しているかもしれない。)


位置エンコーディングがある方が、入玉の局面を正しく判断できると予想したが、予想と反対の結果になった。

前回説明した通り、将棋AIのモデルでは、プーリングを行わないため、各位置の特徴量が位置の情報を保持している。
そのため、明示的に位置エンコーディングを行わなくても、盤面全体の駒の配置から相対的な位置の情報を捉えることができる。

この実験結果からは、明示的な位置エンコーディングは不要と言えそうである。
位置エンコーディングを加えることで精度が下がっていることを考えると、位置の情報は相対的なものであるため、絶対的な位置のエンコーディングはむしろなくした方がよいと言えるかもしれない。

まとめ

入玉局面における位置エンコーディングの効果を測定した。
結果、位置エンコーディングがある方が方策の精度が下がった。
実験結果からは、明示的な絶対位置エンコーディングは不要と言えそうである。

ただし、Leela Chess ZeroのSmolgenのような、トポロジーを考慮した入力に応じた相対位置エンコーディングであれば、効果があるかもしれないので、別途検討したい。