TadaoYamaokaの開発日記

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

rollout policyの学習(やり直し)

以前にrollout/tree policyをAdaGradで学習させたが、学習データとは別のテストデータを使った評価を行っていなかったので、学習をやり直した。

学習に使用させてもらっていた棋譜サイトが閉鎖してしまったので、今回からGoGoDという有料の棋譜を購入して使用することにした。
それほど高くない値段でプロの棋譜を大量に入手できる。

また前回は、棋譜を局単位でシャッフルしていたが、局面単位でシャッフルした方が偏りなく学習できるため、そのように修正した。

GoGoDの2000年以降の棋譜、約800万局面を学習に、約80万局面をテストに使用して学習した結果、以下の通りとなった。
学習方法は、SGD、AdaGrad、RMSpropで比較した。

SGD

f:id:TadaoYamaoka:20160807165339p:plain

AdaGrad

f:id:TadaoYamaoka:20160807165351p:plain

RMSprop

f:id:TadaoYamaoka:20160807165411p:plain

テストデータの棋譜との一致率はそれぞれ以下の通りとなった。

rollout policy tree policy
SGD 10.3% 12.1%
AdaGrad 9.3% 12.4%
RMSprop 12.9% 16.1%

RMSpropが最も一致率が高かった。

AlphaGoの論文では、rollout policyの棋譜との一致率は、24.2%である。
それに比べたら一致率が低い。

Nakadeのパターンを実装していないという違いはあるが、Nakadeが出現する局面はそれほど多くないはずなので、それほど違いがでるとは思えない。
Response PatternやNon-responseパターンは棋譜での出現率が高いものから論文のパターン数と同じくらいになるように抽出しているが、パターンの選び方によっては差がでそうである。
論文にはどのように抽出したかは記載されていない。
パターンの抽出にノウハウがあるのかもしれない。
あと、AlphaGoではTygemサーバの棋譜を使用しているので、アマチュア棋譜で学習・評価した方が一致率が高くなるのかもしれない。


一致率が一番高くなったRMSpropでの学習結果を使って、9路盤、7万プレイアウトでGnuGoと対戦させた結果、10戦して勝率40%であった。(10戦では評価するには少なすぎるが。)
パターンを用いないと勝率はほぼ0なので、rollout policyがそれなりに機能しているようである。

github.com