ディープラーニング将棋のニューラルネットワーク構成もだいぶ固まってきたので、そろそろ本格的に学習させてみたいが、その前にハイパーパラメータを調整を行った。
ハイパーパラメータはベイズ推定など使って調整するのが本当は良いが、そんなに試行数もこなせないので各パラメータごとにサンプリングして調整を行う。
以下のパラメータを調整する。
- フィルター枚数
- カーネルサイズ
- ミニバッチサイズ
なお、前回までは422852局面を3エポック回していたが、今回から1エポックで測定する。
また、前回まではtest accuracyをサンプリングで確認していたが、測定ごとに値がぶれるので、エポックごとに全テストデータを使って測定するようにした。
測定結果
フィルター枚数
(ミニバッチサイズ:8)
フィルター枚数が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)
1層目のカーネルサイズは3×3の方が、test accuracyが良い結果となった。
ミニバッチサイズ
(フィルター枚数:192、カーネルサイズ3×3)
train lossはグラフが見にくいが、ミニバッチサイズ8と16でほぼ同じで、それ以上では悪化している。
test accuracyはミニバッチサイズ8が最も良く、16,32,64で横ばいで、128で悪化している。
また、学習時間は、ミニバッチサイズを増やすほど短くなっている。
学習時間とtrain lossのバランスからミニバッチサイズは32あたりが良さそうだ。
なお、AlphaGoの論文ではミニバッチサイズは16が使われている。ただし、50GPUで分散して学習しているので同じ条件ではない。
上記の測定結果をハイパーパラメータに反映して、次回、大量の棋譜を使って学習してみたい。
大量といっても何日もかかるようなことはまだやりたくないので、とりあえず一晩で学習が終わるくらいの量を目標としたい。
GitHubでソースを公開しました。
github.com