TadaoYamaokaの開発日記

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

将棋でディープラーニングする その13(ハイパーパラメータの調整)

ディープラーニング将棋のニューラルネットワーク構成もだいぶ固まってきたので、そろそろ本格的に学習させてみたいが、その前にハイパーパラメータを調整を行った。

ハイパーパラメータはベイズ推定など使って調整するのが本当は良いが、そんなに試行数もこなせないので各パラメータごとにサンプリングして調整を行う。

以下のパラメータを調整する。

  • フィルター枚数
  • カーネルサイズ
  • ミニバッチサイズ

なお、前回までは422852局面を3エポック回していたが、今回から1エポックで測定する。
また、前回まではtest accuracyをサンプリングで確認していたが、測定ごとに値がぶれるので、エポックごとに全テストデータを使って測定するようにした。

測定結果

フィルター枚数

(ミニバッチサイズ:8)
f:id:TadaoYamaoka:20170512233808p:plain
f:id:TadaoYamaoka:20170512232915p:plain

フィルター枚数が64の場合、train loss、test accuracyともに最も精度が低い。
フィルター枚数が128,192,256でtrain lossはほぼ同じで、test accuracyは192が最も高い。
この結果からフィルター枚数は192がよさそうだ。

カーネルサイズ

AlphaGoの論文では1層目のカーネルサイズを5×5として、2層目以降を3×3としている。
前回までの測定では全ての層を3×3としていた。
1層目を5×5とした場合で測定してみた。
(ミニバッチサイズ:8、フィルター枚数:192)
f:id:TadaoYamaoka:20170512234201p:plain
f:id:TadaoYamaoka:20170512234221p:plain

1層目のカーネルサイズは3×3の方が、test accuracyが良い結果となった。

ミニバッチサイズ

(フィルター枚数:192、カーネルサイズ3×3)
f:id:TadaoYamaoka:20170512235520p:plain
f:id:TadaoYamaoka:20170512235604p:plain

train lossはグラフが見にくいが、ミニバッチサイズ8と16でほぼ同じで、それ以上では悪化している。
test accuracyはミニバッチサイズ8が最も良く、16,32,64で横ばいで、128で悪化している。
また、学習時間は、ミニバッチサイズを増やすほど短くなっている。
学習時間とtrain lossのバランスからミニバッチサイズは32あたりが良さそうだ。

なお、AlphaGoの論文ではミニバッチサイズは16が使われている。ただし、50GPUで分散して学習しているので同じ条件ではない。

上記の測定結果をハイパーパラメータに反映して、次回、大量の棋譜を使って学習してみたい。
大量といっても何日もかかるようなことはまだやりたくないので、とりあえず一晩で学習が終わるくらいの量を目標としたい。

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