TadaoYamaokaの開発日記

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

将棋AIの実験ノート(入力特徴量の数値の表現方法)

AlphaZeroでは入力特徴量として持ち駒の枚数、手数をそのまま数値として与えている。

一方、Alpha Goでは、呼吸点などの数は、ont-hotエンコーディングして与えている。
例)上限が3で2の場合、010。

dlshogiでは、持ち駒の枚数、利きの数を、数値の分だけ1にして与えている。
例)上限が3で2の場合、110。

入力特徴量の数値の表現方法として、どれがよいか比較してみた。

測定方法

以前に測定したSENetと同じネットワークで、数値の表現方法のみ変更して比較する。

測定条件

  1. 現在のdlshogiと同じ表現方法(数値の数だけ1にする)。
  2. 数値をそのまま与える(AlphaZero方式)。※上限で割って正規化
  3. one-hotエンコーディングする(AlphaGo方式)

条件1は、以前の測定結果を使用(2500万局面を初期値から学習を14回行った平均
条件2と3は、同じ局面を初期値から学習を5回行った平均

測定結果

条件 訓練損失 (合計) テスト損失 (Policy) テスト損失 (Value) テスト損失 (評価値)
dlshogi方式 1.516394064 1.029514836 0.598087899 0.648289729
数値で入力 1.52924292 1.0321482 0.59702086 0.648769538
one-hotエンコーディング 1.68249998 1.08649676 0.69094248 0.707457938
テストaccuracy
条件 テスト accuracy (Policy) テスト accuracy (Value)
dlshogi方式 0.369727066 0.661483297
数値で入力 0.368871708 0.660558768
one-hotエンコーディング 0.35960994 0.569358166
テストデータの局面を推論した際の平均エントロピー
条件 エントロピー (Policy) エントロピー (Value)
dlshogi方式 2.11130705 0.631885641
数値で入力 2.11478008 0.629217708
one-hotエンコーディング 2.233401 0.626962894

考察

現在のdlshogiの方式がpolicyが一番精度が高くなり、valueは数値でそのまま入力した場合とほぼ同じという結果になった。
one-hotエンコーディングした場合は、policy、valueともに大きく精度が落ちている。

この結果からは、数値の分だけ1にする方式(dlshogi方式)が一番よさそうだ。
dlshogiでこの方式にした理由は、たとえば持ち駒の枚数の場合、1枚持っている場合と2枚持っている場合で、1枚目を持っているという状態は共通だが、one-hotエンコーディングすると1枚のときに1だった特徴面が0になるためニューラルネットワークにとってわかりにくいのでないかと思ったからだ。
ニューラルネットワークの気持ちになって考えた( ˙-˙ )

AlphaZeroが数値をそのまま入力するようにした理由は特に論文に書かれていなかったが、one-hotエンコーディングとの比較で結果が良かったからかもしれない。
また、AlphaZeroでも数値の分だけ1にする方式の方がよいかもしれない。