TadaoYamaokaの開発日記

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

将棋でディープラーニングする その47(全結合)

AlphaGo Zeroでは、policy networkの出力ラベルを石の色×座標+passで表しており、全結合層で出力を行っている。
Fan Hui版AlphaGoでは1×1フィルターの畳み込み層を出力層としていた。
出力層を全結合にした理由は、論文では説明されていないが、精度が上がるため、もしくは単にpassを出力するためと思われる。

将棋AIでは、passがないため、1×1フィルターの畳み込み層で全候補手を出力できる。
全結合にすると計算量が増えるため、精度があがる効果がなければ、全結合にする必要はない。

そこで、出力層を1×1フィルターの畳み込み層とした場合と全結合層にした場合で精度の比較を行った。

1×1フィルターの畳み込み層の枚数は、前回の日記で説明した通り、駒の種類×移動方向+持ち駒の種類だけの枚数(101)とする。
全結合層のノード数は、駒の種類によって移動できない座標を除外したノード数(5839)とする。

以下のパターンで比較を行う。

パターン 出力層
1 1×1フィルターの畳み込み層
2 全結合層
3 1×1フィルターの畳み込み層の後に全結合層

比較結果

測定条件
  • 5ブロックのWide ResNet、3×3フィルター、192枚
  • 訓練データ:4000万局面
  • テストデータ:100万局面
  • 学習率:0.01
  • 最適化:MomentumSGD
  • ミニバッチサイズ:64
  • 訓練局面elmoの自己対局で生成
  • value networkとマルチタスク学習

policy networkの学習結果

train loss test accuracy 学習時間/1000万局面
1×1フィルターの畳み込み層 1.0002 0.4065 1:08:57
全結合層 1.0318 0.3957 2:17:10
1×1フィルターの畳み込み層の後に全結合層 1.0545 0.3926 1:39:37

考察

精度

全結合層のノード数は、移動できない座標を除外しているので、1×1フィルターの畳み込み層のラベル数(8181)よりもラベル数(5839)は少なくなくなっている。
そのため、精度が向上する効果があると予測したが、逆に精度が悪くなるという結果になった。
出力ラベルを減らす効果よりも、全結合にすることの影響が大きかったようだ。

全結合よりも、1×1フィルターの畳み込み層の方が精度が高くなる理由については、全結合は位置の情報が失われるためという説明をどこかで読んだような記憶がありますが、どなたかご存知でしたら教えてください。

このページとかには、パフォーマンスが改善するという記述がありますが、精度が上がる理由を説明している資料を探し中。

学習時間

全結合よりも、1×1フィルターの畳み込み層の方が計算量が少なくなり学習時間が短くなる。
測定結果でも、1×1フィルターの畳み込み層の学習時間が最も短かった。
全結合のみ(パターン2)の場合は、全結合への入力が192枚の画像となっており入力ノード数が多いため、学習時間が1×1フィルターの畳み込み層の約2倍になった。


前回の結果と合わせると、

  • 出力層は、1×1フィルターの畳み込み層
  • 出力ラベルは、移動先と移動方向で表現(移動する駒の種類は不要)

が、将棋AIのpolicy networkの出力層に最適と言えそうです。

なお、今回の実験の際に、今まで使っていたネットワークの出力層の直前の活性化層が漏れてたことに気づいたので修正しました。これも精度を落とす要因になっていました。

2017/11/21 追記

全結合よりも1×1フィルターの畳み込み層の方が精度が上がる理由を、はっきり説明できる資料は見つかりませんでしたが、以下のredditのスレッドで議論されている内容から、1×1フィルターの畳み込み層は空間の次元を保持して、色の次元を削減するために使用するようです。
www.reddit.com
全結合に比べて次元を削減できることで学習効率が上がるのか、空間の次元を保持することで将棋という位置が重要となるゲームで有効に働くかのどちらかではないかと思います。