学習をやってみる

以前、序盤の強化に取り組んでいるという話を書きましたが、今は中盤・終盤の方に手をつけています。


まだうまくいったわけではないので、詳細な手法を書くのはちょっと気がひけますが、中終盤の方は、MOUSE*1というアルゴリズムを用いています。
これは、リバーシの評価関数を自己対戦による学習で生成させたもので、詳しくは原論文*2


簡単に特徴を書いてみると、
・評価関数の評価値は、予想される最終石差であらわす
・自己対戦の対局毎に、その対局で発生したパターンの発生回数と、誤差(=最終石差と評価値の差)を累積
・対局数が一定の周期(Epoch)に達するごとに評価値を更新*3
・評価値の更新は、パターンの発生回数が最小発生回数(MinCount)に達した場合のみ行う
・評価値の更新は、現在の評価値を、誤差を少なくする方向に変更する
  新評価値 = 旧評価値 + 学習率 * 誤差 / 出現回数
・出現回数は、次のEpochへそのまま引き継ぐ
・誤差も次のEpochに引き継ぐが、その際にある一定の率で小さくする
といったところです。


もちろんこのままでは将棋に使えないので、誤差としては単純に勝率を用いています。
評価値は勝率が0.5なら0、0.6で+500くらいになるよう傾斜をつけています。
非常に大きいようですが、実際のところ、勝率が0.51を超えるパターンは少なく、これでも2ケタを超える値はめったにつきません。
評価の要素は主として2駒間の位置関係、銀以上の駒については3駒間の位置関係を評価しています。
自己対戦は全幅深さ1+静止探索でやってるんですが、1時間で100〜150局しかできません。
オープン戦までに間に合うのか…?

*1:MOnte-carlo learning Using heuriStic Error reduction の略

*2:リバーシソフト"Herakles"に搭載されているエンジンの一部がこの学習アルゴリズムを採用しています。論文はメニューの"Engines"から参照

*3:一局ごとに行うのではない