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

TadaoYamaokaの日記

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

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

前回までに調整したニューラルネットワークを、floodgateの棋譜を使って学習した。

floodgateの棋譜の入手

floodgateの棋譜は、コンピュータ将棋対局場の「情報収集」→「棋譜倉庫: 圧縮CSAファイル(7z形式)」から1年単位でアーカイブが入手できる。
とりあえず2016年の棋譜をダウンロードした。

棋譜には人が対戦したものや、手数が短すぎる棋譜が混じっているので、適切な条件でフィルターする必要がある。
以下の条件でフィルターを行った。

フィルター条件
  • 投了で終局している
  • 手数が50以上
  • 両対局者のレーティングが3000以上
フィルター前
局数 80,141
局面数 9,375,564
平均手数 117
フィルター後
局数 14,230
局面数 2,116,546
平均手数 149

フィルター後の手数のヒストグラム
f:id:TadaoYamaoka:20170513182339p:plain:w400
フィルター後のレーティングヒストグラム
f:id:TadaoYamaoka:20170513182455p:plain:w400

floodgateの棋譜で学習

フィルターしたfloodgateの棋譜を使って学習した。
前回の実験結果から、ミニバッチサイズを32としたときの学習時間は1エポックあたり0:31:23の見積もりとなる。
5時間くらいで終わるように10エポック学習を行った。

学習結果

1000イテレーションごと
f:id:TadaoYamaoka:20170513182817p:plain
エポックごと
f:id:TadaoYamaoka:20170513203036p:plain

10エポック学習後の間train lossは下がり続けている。
test accuracyは8エポック目以降では0.001~0.002ずつくらいしか上昇していない。

そこで、学習率をlr=0.01から半分のlr=0.005にして、追加で1エポック学習してみた。

f:id:TadaoYamaoka:20170513203010p:plain
今度は、1エポックでtest accuracyが0.005上昇した。

SGDの場合、徐々に学習率を下げていくことが重要であることがわかる。

AlphaGoの論文では、入力特徴が盤面の情報のみの場合、Test accuracyが47.6%になっている。
11エポックで43.6%になったので、このまま学習を続ければ近い値になるかもしれないが、時間がかかるので検証は一旦ここまでにする。

なお、AlphaGoの論文では、シチョウなどの入力特徴を増やすことでTest accuracyが54.7%までになっているので、将棋において効果的な入力特徴を見つけて追加するとさらに改善できる見込みがある。

次回は、今回学習したモデルをベースラインとして、強化学習で方策改善を試したい。

github.com

2017/5/15追記

バグがあり駒の成りが学習できていなかったので、学習をやり直した。
今度は20エポック学習した。10エポックで学習率を半分にしている。
1000イテレーションごと
f:id:TadaoYamaoka:20170515233154p:plain
エポックごと
f:id:TadaoYamaoka:20170515233420p:plain
14エポックでtest accuracyが43.2%になった後、train lossは下がっているがtest accuracyが下がっている。
つまり、過学習をしている。
これ以上精度を上げるのは難しそうだ。
パラメータ数に対して学習データが足りていないので、学習データを増やす必要がある。