自己対局学習時のレア局面の検出・誘導機能
http://d.hatena.ne.jp/Gasyou/20170110/1484038534
前回の日記ではきちんと書いていませんでしたが、今トライしているのはレア局面の検出と誘導です。RPSと書いたのがそれで、過去のエピソード中に出現しなかった状態へと優先的に移動する様にした結果、5x5の格子世界問題では望ましい結果が出た所まで書きました。
その後の進捗ですが、まずプロ棋士の棋譜からのレア局面・頻出局面の検出を予備実験として実施しました。
ザックリ書くと、「本譜に現れた局面」を「頻出局面」、「本譜の兄弟手で進めた局面」を「レア局面」として扱い、局面評価関数クラスとロジスティック回帰を用いて学習させました。
実装上のポイントとしては、頻出局面数はレア局面数に比べて非常に小さいので、頻出局面の学習時だけ学習率を高める処理が必要でした。
んで、1万局の学習ではそこそこの精度になったので、今から自己対局時のレア局面の検出・誘導を実装してみようと思います。
具体的にどうするかと言うと、通常のSoftmax方策では「局面の評価値」をベースとして方策πを求める所を、「評価値+c*レアリティ」をベースに挙動方策πbを求める様に修正します。レアリティは「頻出局面なら0に近い値、レア局面なら1に近い値」になる様に学習・計算します。cはレアリティの影響度を調整する定数です。
こうすると、学習対象の方策πと挙動方策πbが異なるので、方策オフ型の学習ルーチンが必要になります。これに関しては、以前の日記の時点で「重点サンプルングを用いた方策オフ型PGLeaf」を実装済みですので、これを用いる事とします。
上手く行けば「最近は居飛車ばっか指してるから、たまには振り飛車で行こう」って感じの指し手選択が可能になる(はず)ですので、多様な局面から学習可能になると思います。