TadaoYamaokaの開発日記

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

将棋AIの実験ノート(重みの初期値)

dlshogiでは、ニューラネットワークの重みの初期化はChainerのデフォルト(LeCunNormal)を使用している。
モデルをSEResnetに変える予定なので、どの初期化が良いか実験してみた。

すべてデフォルトの場合と、活性化関数がReLUの場合はHeNormalが良いとされているので畳み込み層と全結合層の初期化をすべてHeNormalにした場合と、SENetは2層目と最終層はSigmoidなのでそれらの前の層をデフォルトのLeCunNormalにした場合と、すべてGlorotNormalにした場合を比較した。

おさらい

測定条件

先日のSENetのモデルの測定結果と、同じデータで初期化を変更した場合の測定結果を比較した。

測定結果

損失
初期化 訓練損失 (合計) テスト損失 (Policy) テスト損失 (Value) テスト損失 (評価値)
LeCunNormal 1.5167899 1.0261396 0.5962995 0.6469054
HeNormal 1.5568473 1.0442668 0.59593064 0.6480267
HeNormal(ReLUの前のみ) 1.5600953 1.0449593 0.59660757 0.6493638
GlorotNormal 1.5095649 1.0290614 0.59567547 0.6469674
テストaccuracy
初期化 テスト accuracy (Policy) テスト accuracy (Value)
LeCunNormal 0.37059274 0.66360927
HeNormal 0.36606634 0.6646332
HeNormal(ReLUの前のみ) 0.3656447 0.6607967
GlorotNormal 0.37014192 0.6625231
テストデータの局面を推論した際の平均エントロピー
初期化 エントロピー (Policy) エントロピー (Value)
LeCunNormal 2.159858 0.62993383
HeNormal 2.1518285 0.6302004
HeNormal(ReLUの前のみ) 2.1530159 0.6284531
GlorotNormal 2.0393212 0.6299689

考察

活性化関数がReLUなので、HeNormalにすると精度が上がると予測していたが、テスト損失はHeNormalにするとPolicy、Value、評価値ともに悪くなっている。
Sigmoidの前の層をLeCunNormalにした場合でも傾向は変わっていない。

LeCunNormalとGlorotNormalでは、テスト損失は誤差程度の違いしかない。GlorotNormalは、Policyのエントロピーが下がっているため方策が決定論的な傾向になっている。

この結果からは、重みの初期化は、ChainerのデフォルトのLeCunNormalのままで良さそう。
活性化関数がReLUの場合でも、必ずしもHeNormalが最適ではないということが分かった。