TadaoYamaokaの開発日記

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

将棋でディープラーニングする その7(最適化手法の変更)

前回に続き、学習の改善を試します。
今回は、最適化手法を変えて収束性、精度を測定します。

最適化手法は、はじめAdamではうまく学習できなかったためAdaGradとしていました。
Batch Normalizationを入れたことで、Adamを含めた他の手法でも学習できるようになった可能性があるので試してみます。

手法は、SGD、AdaGrad、RMSprop、Adamを試しました。
学習率ははじめ大きめの値として、学習できない場合は1/10にして測定しました。

測定結果

手法 学習率 train loss test accuracy
SGD lr=0.1 2.85 0.34
SGD lr=0.01 2.09 0.40
SGD lr=0.001 3.38 0.29
AdaGrad lr=0.1
AdaGrad lr=0.01 2.58 0.38
AdaGrad lr=0.001 2.71 0.35
RMSprop lr=0.01 9.36 0.02
RMSprop lr=0.001 3.23 0.31
Adam alpha=0.01
Adam alpha=0.001 2.73 0.34

※-は学習が進まないため中断

Adamなどの比較的新しい手法が良いと思っていたが予想に反して、SGD(lr=0.01)が一番収束が速く、精度が高くなった。
AlphaGoの論文でもモーメントは使用しないでSGDで学習したと記述されている。
学習率の初期値は0.003で8千万ステップごとに半分にしている。

上記の測定結果で良い結果となったSGDの学習率は0.01でAlphaGoの論文の値より大きいが、Batch Normalizationを入れているので、大きめの初期値でも学習できていると思われる。

測定結果を受けて、最適化手法はSGD(lr=0.01※Chainerのデフォルト)にすることにします。

GitHubにソースを公開しました。
github.com