TadaoYamaokaの開発日記

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

どの駒が評価値に寄与しているかを可視化する

dlshogiのモデルに盤面を入力すると、その盤面の評価値(勝率)を出力できる。
その際、どの駒が評価値に寄与しているか可視化できると、AIがどこに注目しているのかがわかる。
以前に、Attention Branch Networkを使って可視化を試したが、今回は、駒を除くという単純な方法で、可視化を試してみた。

提案手法

dlshogiは、盤面(駒の配置と持ち駒)をモデルに入力して、指し手の確率(方策)と評価値(勝率)を出力している。

現在の盤面を入力して推論した結果と、盤面の盤上の駒を一つ除いて推論した結果の差を見ることで、除いた駒の相対的な価値がわかる。
持ち駒の場合は、一つだけ除くと、複数枚ある場合に価値が変わらない場合があるため、同じ種類の持っている駒をすべて除くようにする。

これをすべての駒に対して行い、それぞれの盤面を推論することで、各駒の相対的な価値を求めることができる。

実装

dlshogiは、駒の利きや王手についても特徴量に加えているため、特徴量を加工するのではなく、駒を除いた盤面から特徴量を作すように実装した。
駒を除く処理は、sfenの文字列を加工して行った。
推論は、駒を除いた各盤面をミニバッチにすることで、1回の推論で計算できる。

gist.github.com

可視化

とりあえず確認用に、Excelのカラースケールで数値の大きさを色で表して、盤面画像に重ねて表示するようにした。

結果

第3回電竜戦A級8回戦の水匠 vs dlshogi with HEROZ 20bの棋譜から抽出した局面からを可視化した結果は以下の通り。

84手目で、水匠は定跡、dlshogi with HEROZ 20bは後手が少し良し評価している局面である。
先手の駒の赤色が、先手の評価に寄与している駒を示していて、
後手の駒の青色が、後手の評価に寄与している駒を示している。


98手目の先手が優勢になっている局面では、以下のようになる。

同じ位置にある4八金の価値が小さくなっているなど、比較すると違いが見られる。
なんとなく駒の働きが数値化できていそうである。

まとめ

dlshogiのモデルを使って、どの駒が評価値に寄与しているか可視化を行った。

以前に、Attention Branch Networkを使ってAIが注目している箇所の可視化を行ったが、今回の方法は各駒の相対的な価値を求めているため、より解釈がしやすい。
また、モデルの構成を変更する必要がないため、既存モデルを使って可視化を行うことができる。
今回は、1つの駒だけを除いたが、同様の方法で2つ以上の駒の組み合わせを考慮することもできる。