局面評価の学習を目指した探索結果の最適制御2

ということで、GPW2006から帰ったその日から学習方法を研究中なのですが、
あの数式群をプログラムに落とし込むところが、まだまだできておりません。


が、言わんとすることはおぼろげながらわかってきたように思います。
会社の行きも帰りも、GPWの論文を読み返しておりますので。


というわけで、詳しい内容は保木さんのスライドを見ていただくとして、
学習以前の、目的関数l(P,v)による棋譜の評価を先にやってみました。


まず、評価関数として、「駒の交換値」のみを実装したもので、
どの程度、目的関数が評価値を返すのかを検証しました。
今回はBonanzaが求めた「交換値」を設定しています。
羽生さん関係の古い600棋譜を利用しました。

特徴ベクトル「駒の交換値のみ」

 12-137 Lpv= 85.9/avg 20.0   0.0sec
OK(250)17.0% NG(1217)83.0%
top5(406)27.7% top10(501)34.2% top20(1079)73.6% top30(1198)81.7%

 12-138 Lpv= 50.5/avg 20.0   0.0sec
OK(250)17.0% NG(1218)83.0%
top5(406)27.7% top10(501)34.1% top20(1079)73.5% top30(1198)81.6%

 12-139 Lpv= 44.6/avg 20.1   0.0sec
OK(250)17.0% NG(1219)83.0%
top5(406)27.6% top10(501)34.1% top20(1079)73.5% top30(1198)81.6%

12局-139手までで、トップ5にプロの指手が来た割合が27.6%
オーダリング30手までには81.6%と出ました。
正解率は17%。Bonanzaは35%ぐらいと聞いた覚えがあります。
※厳密には、これはオーダリングに収まった数ではなく、評価関数の差をシグモイド関数にぶちこんで、その総和をとったものです(論文中にあるように、棋譜の手より良いと判断した手の総数)


次は、持ち駒の得点も加えました。これもBonanzaが採用しているものです。

特徴ベクトル「駒の交換値、持駒の数に対する得点」


 12-137 Lpv= 93.4/avg 20.1   0.0sec
OK(257)17.5% NG(1210)82.5%
top5(417)28.4% top10(509)34.7% top20(1068)72.8% top30(1193)81.3%

 12-138 Lpv= 50.5/avg 20.1   0.0sec
OK(257)17.5% NG(1211)82.5%
top5(417)28.4% top10(509)34.7% top20(1068)72.8% top30(1193)81.3%

 12-139 Lpv= 48.6/avg 20.1   0.0sec
OK(257)17.5% NG(1212)82.5%
top5(417)28.4% top10(509)34.6% top20(1068)72.7% top30(1193)81.2%

ほとんど差はありませんが、
top5に収まった割合が0.8%ほど向上しているようです。
手にして11手分、増加してますね。


理論上は、これに、大駒の移動量、駒の関係、などなどBonazaの評価用の特徴ベクトルと同じものを
すべて入れてしまえば、オーダリングのトップにプロの手が並ぶ確率35%が実現できる(はず)
あとは実際は探索の手法の差、なんといっても速度の差も利いてくるはずです。
学習は、(6)式がなかなか難しく。今、うんうんうなっているところです。
「vを更新すると最善応手列が変わる」とスライドに書かれてますが、そのへんもあって(6)のような近似法を使われてるのだと思うのですが、
要するに、評価関数をv(l)について一階の偏微分をやればいいのか……?


保木さんが言ってました「まずは駒割をきちんと学習できること」
まずはそれだと思います。それができれば、さらに……


というわけで、夜はふける。