オセロの学習 - 二乗平均誤差


参考文献
http://fujitake.dip.jp/sealsoft/thell/bibliography.html


次に、ロジステロという評価関数を学習するオセロについて考えると、

ロジステロは、局面のパターンをあらかじめもっています。

次に、評価関数をその局面からの何目差で勝つか?を予測する関数と定義しますと、
棋譜から分かる「正確な何目差で勝つかの数値」を教師にすると、


目的関数(二乗平均誤差) = 1/N・Σ( e(真の値)-e(自分の予測) )^2 と定義されます
二乗してるのは誤差をはかるために絶対値をとるためです。


問題は、この誤差を下げることと考えます。


やはり評価関数は、
E(w)=Σw・x
と表せるので、


P=1/N・Σ( e(真の値)-e(自分の予測) )^2


とすると


∂p/∂w = (∂p/∂E) ・ (∂e/∂w)なので、


(∂p/∂E)= ∂p/∂E ・( e真^2 - 2・e真・e自分 + e自分^2 )より、
=2・(e自分 - e真 )になります。

(e真は変数じゃないで数値なので、微分すると0になります)


∂e/∂w(i)=x(i)なので、


∂p/∂w(i) = 2・(e自分 - e真 )・x(i)となります


最急降下法から、
Pを最小化するにはwを次のように更新すれば良い。


Δw(i) = - α・Σ(e自分 - e真 )・x(i)


これの意味することは、正確な評価値と自前の評価値の差分を集計して、


もし集計後、正確な値の方が大きいなら、棋譜の局面に存在しているパターンの重みを増加する。
もし集計後、正確な値の方が小さいなら、棋譜の局面に存在しているパターンの重みを減少する。


要するに、パターンの重みを増やせば、そのパターンが存在する局面の評価値は増加するし、
パターンの重みを減らせば、そのパターンが存在する局面の評価値は減少する


ので、誤差が最小になるまで繰り返せば、自前の評価関数は、正確な評価値と一致するように最適化される