続々・実験結果
全局面の平均二乗誤差
- | 着手数あり | 着手数なし |
---|---|---|
開放度あり | 4.99 | 6.09 |
開放度なし | 5.18 | 5.40 |
対局中に表れた局面の平均二乗誤差
- | 着手数あり | 着手数なし |
---|---|---|
開放度あり | 7.51E-4 | 0.002 |
開放度なし | 0.001 | 1.86 |
今回は着手可能数なし・開放度なし以外はちゃんと学習していました。
学習途中の様子はこんな感じのグラフになります。
横軸は対局数で、目盛りの数値×100が実際の対局数です。このグラフは2000までなので20万ゲーム、かかった時間は1時間前後です。
min・average・maxは初期配置の一手後の局面の情報で、それぞれ評価値の最小値・平均値・最大値。最近の石差は対局終了時の石の数の差を平均したものです。
ちゃんと学習すると大体こんな感じのグラフになって、全局面の平均二乗誤差は一旦減った後に少しずつ増えるんですが、その後も対局中に表れた局面の平均二乗誤差は減っていきます。
今の石の位置による評価は「置いてある石の数がn個で場所(x,y)に手番tの石がある場合はこのパラメータを使う」という感じで実装している影響で、学習が遅くなっている感じです。
そこで、置いてある石の数が4の時*1と盤面が石で埋まっている時の二つのパラメータを用意して、それを進行度で重み付けして石の位置による評価を行おうと思います。
式は単純に以下の様にします。
evl = p(0) * s + p(1) * ( 1 - s ) s = ( sc - 4 ) / ( w * h - 4 ) evl:石の評価値 p(0),p(1):上記二つのパラメータ s:進行度 sc:置いてある石の数 w,h:盤の幅・高さ
この実装に変更すると、平均二乗誤差は2つとも増えるが学習は速くなるはずです。
というか、今まではリバーシの学習がちゃんと出来るか確かめる為に、解像度*2高めで汎化能力*3低めの評価関数を使っていたので、実装の変更で本来考えていた状態に戻るだけなのですが。
という訳で、二日間溜めてたストレスを今日の開発で発散したいと思います。