TadaoYamaokaの開発日記

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

将棋AIの進捗 その19(初期局面集)

自己対局による強化学習を行う際に、対局の開始局面には、初期局面集を使用している。
AlphaZeroでは、固定手数まではノイズを加えルートノードの訪問回数に応じた確率で手を選択することで局面の多様性を確保している。
しかし、この方法ではモデルに依存した限られた序盤進行になってしまうため、初期局面集を使う方が良いと考えている。
実際のところは、どちらが良いかは検証してみないとはっきりはわからない。

他の将棋AIでも決まった方法があるわけではなさそうだ。
Aperyでは、初期局面集に1手ランダムムーブした局面から生成していて、やねうら王では20手までランダムムーブを行っているようだ。

第5回電王トーナメント版のdlshogiを学習したときは、elmo_for_learnで教師局面を生成した。
そのときは、Aperyのroots.hcpにネット集めた棋譜の85手までの局面を足して、重複局面を排除したものを使用した。
elmo_for_learnは、初期局面集からさらに6手ランダムムーブを行っていたので、1~6手の範囲で一様分布で選んだ手数だけランダムムーブするように変更した。
ランダムムーブしない初期局面を1回ずつ使用した局面も生成した。
AlphaZero方式で自己対局を行う際は、Aperyと同じ方法を使うようにしている。

elmo_for_learnで教師局面を生成すると、重複局面が4%近く生成される。
また、ディープラーニングでモデルを学習すると局面を使い切る前に収束する。
このことから、教師局面の多様性があまり確保できていないのではないかという疑いを持っている。

ディープラーニングは序盤は強いが、中終盤で悪手が増えるので、学習局面に中終盤のバリエーションがもっと増やしたいと考えている。
これを初期局面を増やすことで対策できないか試している。

最近の平岡さんのツイートで、初期局面をフィッシャーランダムで生成すると弱くなったという情報があった。


初期局面の多様性は重要だがランダムではかえって弱くなるようだ。
実際の対局で起こりそうな局面に近いことも重要なのかもしれない。

AlphaGoとイセドル九段の対局の第4局の敗北は、Policyの予測漏れに起因している。
これも中終盤の学習局面のバリエーション不足が原因になっている。
AlphaGo Masterでは弱点を克服しているが、どのように学習したかは明らかにされていない。(敵対的ネットワークを使ったとか使ってないとか)

ということで、初期局面集のバリエーションを増やすために、floodgateの2013年から2017年の5年分の棋譜をもとに、開始局面から棋譜上の評価値が1000点以内の手数までの局面を初期局面集に加えた。
重複局面を除くと、17,391,142局面が生成できた。
Aperyのroots.hcpは重複局面も含んでいるので、重複局面を除くと、45,945,496局面が含まれる。
それからすると少ない。Aperyは相当な数の棋譜を集めてroots.hcpを作成しているようだ。

Aperyのroots.hcpとfloodgateの棋譜から生成した局面集を合わせて重複局面を除くと、52,078,876局面になった。
6,133,380局面を増やすことできた。
効果があるか比較検証したいが、自己対局に時間がかかりすぎて比較検証はできそうにない。
検証は将来の課題として、勘を信じることにする。


初期局面集作成に使ったツール類を公開しています。
github.com