読者です 読者をやめる 読者になる 読者になる

TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

将棋でディープラーニングする その3(棋譜から学習)

プロの棋譜を使って前回の日記で作成したニューラルネットワークの学習を行った。

棋譜サイトにあった竜王戦棋譜を使用した。

訓練データとテストデータの数は以下の通り。

訓練データ テストデータ
局数 3744 417
局面数 422852 47242

学習には非常に時間がかかるため、学習が進んでいることが確認できたら途中で打ち切ることにした。

はじめ最適化手法をAdamで行ったが学習が進まないので、AdaGradにしたところ学習が進むことを確認できた。
ミニバッチサイズを8として、1ミニバッチサイズの学習を1イテレーションとして、32500イテレーション学習した結果は以下の通り。
f:id:TadaoYamaoka:20170410204331p:plain
accuracyは100イテレーションごとに、テストデータからランダムに抽出した64サンプルで評価している。

グラフを見ると、lossは順調に下がっている。
accuracyは、0.15程度まで上昇しており、15%の精度でプロの指し手を予測している。

lossはまだ下がりそうなのでこのまま学習を進めれば予測精度は上がっていくと思われる。

lossが下がらなくなるまで学習を進めないとはっきりしたことは言えないが、将棋でもディープラーニングを使用して指し手の予測ができそうである。

学習に使用したソースをGitHubに公開した。
github.com

次は、特徴に手番や王手、2歩などを追加した場合に精度が上がるか比較してみたい。

追記

3エポック(158500イテレーション)学習した結果、accuracyは0.21程度まで上昇した。
f:id:TadaoYamaoka:20170410221308p:plain

実行時間は、GeForce1080で35分かかった。

追記2

後手番のときに盤を回転しないで学習していたので、180度回転して学習するようにしたところ、accuracyが0.25くらいまで上がった。
f:id:TadaoYamaoka:20170410234225p:plain