TadaoYamaokaの開発日記

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

将棋でディープラーニングする その23(バリューネットワークの実装)

前々回の日記に書いたバリューネットワークの実装を行った。

elmoで生成した教師データのフォーマットで教師データを読み込むようにした。

前々回の日記で書いたAlphaGoの手法を参考にして、ネットワーク構成は、SL policy networkの出力層に全結合層を繋げてtanhで勝率を表すスカラー値を出力するようにした。
AlphaGoの論文では入力に手番の色の加えているが、とりあえずSL policy networkと同じにした。
教師データは勝敗データ(-1, 1)、損失関数は平均2乗誤差とした。

教師データ

elmo_for_learnで100万局面を生成した。
(elmoの教師データの生成については以前の日記を参照)

学習結果

ミニバッチサイズを32として、SGDで1エポック学習させた結果は以下の通り。
f:id:TadaoYamaoka:20170524234930p:plain
1エポック後のテストデータ1万局面のtest lossは、0.9058882594108582となった。

train lossは順調に下がっているので、学習は成功している。

学習時間は、0:30:08かかった。
elmoと同じ50億局面学習すると、105日(3.5ヶ月)かかる。

バッチサイズを4倍の128にすると、学習時間は0:23:58になった。(1エポック後のtrain lossは0.898と少し悪化)
少し速くなっているが、4倍にはなっていない。
ミニバッチデータを作成する際のハフマン符号のデコードにCPU時間がかかっていると思われる。
この部分をマルチスレッドで処理するなど高速化の工夫が必要そうだ。

ネットワークのパラメータは初期値から学習したが、出力層以外はSL/RL policy networkと同一なため、転移学習が可能である。
転移学習した場合についても次回検証を行いたい。

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