AlphaZeroでは入力特徴量として持ち駒の枚数、手数をそのまま数値として与えている。
一方、Alpha Goでは、呼吸点などの数は、ont-hotエンコーディングして与えている。
例)上限が3で2の場合、010。
dlshogiでは、持ち駒の枚数、利きの数を、数値の分だけ1にして与えている。
例)上限が3で2の場合、110。
入力特徴量の数値の表現方法として、どれがよいか比較してみた。
測定方法
以前に測定したSENetと同じネットワークで、数値の表現方法のみ変更して比較する。
測定条件
- 現在のdlshogiと同じ表現方法(数値の数だけ1にする)。
- 数値をそのまま与える(AlphaZero方式)。※上限で割って正規化
- 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 |
考察
現在のdlshogiの方式がpolicyが一番精度が高くなり、valueは数値でそのまま入力した場合とほぼ同じという結果になった。
one-hotエンコーディングした場合は、policy、valueともに大きく精度が落ちている。
この結果からは、数値の分だけ1にする方式(dlshogi方式)が一番よさそうだ。
dlshogiでこの方式にした理由は、たとえば持ち駒の枚数の場合、1枚持っている場合と2枚持っている場合で、1枚目を持っているという状態は共通だが、one-hotエンコーディングすると1枚のときに1だった特徴面が0になるためニューラルネットワークにとってわかりにくいのでないかと思ったからだ。
ニューラルネットワークの気持ちになって考えた( ˙-˙ )
AlphaZeroが数値をそのまま入力するようにした理由は特に論文に書かれていなかったが、one-hotエンコーディングとの比較で結果が良かったからかもしれない。
また、AlphaZeroでも数値の分だけ1にする方式の方がよいかもしれない。