将棋の学習 - TD法

保木さんの論文などを皿のように穴があくまで眺めて、ようやく意味が分かってきました。
まだいんちきな方法ですが、学習に成功しています(まだ精度が悪いです)
復習をかねて、ゲームの学習について書いてみたいと思います。


まずは、東京農工大のTD法による学習法ですが

  • TD法


http://shouchan.ei.tuat.ac.jp/~shougi/old_shougi/presentation/1999-10-07P.pdf


TD法は現在の状況から未来を予測する強化学習のようです。
簡単にまとめると、


将棋の評価関数を E(w)=Σw・x と表すとき、
これは、重みであるwと金の枚数などを表現する特徴xをかけたものを足し合わす線形式になります
次にシグモイド関数を使って、評価関数から勝利予測関数を作りましょう。


ちなみに、駒の価値はすべて同じ数値からスタートします。
金の特徴は、自分の金の枚数-相手の金の枚数になります。
自分が多く持てばプラス。相手が多く持てばマイナス。
金の価値・(金の枚数の差)=金についての評価になります




P(E)=1/(1+e^E)となります。


評価関数が大きいときは1に近づきます。マイナスで小さいときは0に近づきますので、勝利予測確率になります。
E=0の時は、1/(1+1)=0.5になります


TD法の目的を目的関数Pを増やすことにすると、

W未来 = W現在 + α ・ ( P現在 - P過去 ) ・ Σλ▽P

と表現できる。


▽PはPの勾配で、▽P=(∂p/∂w1 , ∂p/∂w2 , … ∂p/∂w(n) )となります。


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

ここで、シグモイド関数pは微分が簡単にできることを思い出しますと、


∂p/∂E = p x (1-p)となります(これはインパルス関数です)


∂e/∂wも簡単ですね。E(w)=Σw・xなので、wで偏微分して、

∂e/∂w(i) = x(i) です。


よって、総合すると、


∂p/∂w(i) = (∂p/∂E) ・ (∂e/∂w) = p x (1-p)・x(i)です。



目的関数に戻ると、


W未来 = W現在 + α ・ ( P現在 - P過去 ) ・ Σλ▽P

W未来 = W現在 + α ・ ( P現在 - P過去 ) ・Σλ・p x (1-p)・x(i)


この式の言わんとすることは自分の理解では、


ある局面で、ある手を指て、


局面が「現在の評価関数」で良くなったとします。そのときに、金をとっていたら、


金の特徴であるx(金)が1増えてます。

( P現在 - P過去 )もプラスになってますので、

プラス・プラスで、w(金)未来は、w(金)現在より増加します。
金の価値は若干増加することになります。


今度は金をとられた場合は、マイナス・マイナス=プラスですから、
金の価値はやはり増加します。


自分は、はじめは金も歩も同じ価値ですから、同等に扱いますが、
相手は、「金をねらいます」ので、歩と金のどちらもとれるときは、金をとるでしょう。
従って、歩兵より、金の方が、とられることによって、金の価値の方が上昇します。
金の価値が上昇すれば、自分も相手の金をねらいますので、もし金をとれれば、さらに金の価値は上がります。



このような行為を繰り返せば、はじめは横並びの駒の価値が、対戦者の価値観によって価値に差が出てくるはずです。
対局内容によって学習の内容が変わると思いますので、学習するたびに結果が変わるという考察は
確かになあと感じました。
不思議なのは、王との距離で、敵王と近いと良いというのをまったく学習できなかったようです。
原因は自分も考えてみようと思います。