TadaoYamaokaの日記

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

将棋でディープラーニングする その27(対局できるようにする)

以前の対局できるバージョンは、別プロセスのUSIエンジンを補助的に使用して詰みの探索を行っていたが、Pythonから呼び出せるC++のモジュールに変更した。

elmo_for_learnのソースを流用してPythonから使用できるようにした。
cppshogiというモジュールにしている。

対局中の各局面で深さ6で評価値を求めて3000を超えた場合は、探索の結果で指すようにした。

今回は、policy networkの出力からBoltzmann分布に従う確率に応じて手を選択するようにした。
これにより指し手が固定化されなくなる。
Boltzmann分布の計算は、policy networkの出力を合法手でフィルターして、残ったロジットについて、expf(logits[i] * beta)を計算した。
本来は分布の合計が1になるように正規化するが、C++のdiscrete_distributionを使うと合計が1になっていなくても、確率分布に応じたインデックスを返却できるため、計算を簡略化した。

elmo_for_learnで生成した2千万局面で学習したSL policy networkを使って、Lesserkaiと対局させて勝つことがあるのを確認した。(勝率は低い)
f:id:TadaoYamaoka:20170529220205p:plain

elmoの教師データを使うと、floodgateの棋譜に比べて学習の進みが遅い。
f:id:TadaoYamaoka:20170529220646p:plain

まだ学習が進んでいるので、教師データを1千万ずつ生成して学習させてみる予定。

RL policy networkはまだcppshogiに対応できていないので、後日修正予定。

github.com