読者です 読者をやめる 読者になる 読者になる

Aestetica

コンピュータ将棋Selene(セレネ)を作っています。名前は西海枝昌彦(さいかいし まさひこ)と読みます。

学習のこと

方策勾配法について

会場でいくつか質問を受けたので。
将棋の場合は勝敗があるので、勝敗に基づいて報酬を与えていきます。勝ったらプラス、負けたらマイナス。
今回は浅い探索で自己対局を行ってできた棋譜から、指し手を追っていき、順々に点をつけます。

初手26歩で勝ったら26歩にプラスして、16歩で負けたら16歩をマイナスにする。
これを終局までやっていくので、結果的に平均120手だとすると120手後の評価を見越しての点をつけています。
TDleaf(λ)と異なるところは、報酬を求める場合、局面単位で計算するところ。
そんなことなので、序盤も終盤も同じような仕組みで点をつけるのだけれど、方策勾配法の非常にありがたいところは他の指し手と評価値の差が大きい場合はゼロに近い報酬。差がない場合は大きい報酬を与える。マイナスの報酬の場合はその逆。

自己対局は定跡を使用せず、評価値の大小で選択確率を求めるので、同じ戦型を集中的に学びやすい。これはいいのかどうなのか。
例えば、矢倉で勝率が良い場合、自己対局でも矢倉を組みやすくなり、負けた側はやらなくなっていくので、矢倉が組みあがってからの攻防を何万局とか行って(例えば)どうやっても後手が負ける場合、矢倉自体の点も下がっていき、他の戦型を選ぶ確率が上がっていきます。
たくさんの自己対局の中では、何度も流行りの戦型が生まれ、また指されなくなり、違う戦型が流行って、またそれも・・。と言う感じなのだろうけど、あまり棋譜自体を見てるわけではないので詳細はわかりません。

定跡を使ったほうが格段に良いような気が、1秒間に16回くらいしてるんだけど、それをやったら本来の数学的な感じじゃなくなるのでやっていません。数で解決すべきことなのかな。

Seleneが抱えている致命的な問題は、浅い探索での自己対局では強さの伸びに限界がありそうなこと。
ずっと探索深さ3でやってきたので、3手読み選手権だったら強いはず。そんなルールの大会は残念ながら現状無いので、どうしよう?ほんとどうしようか。

N手先の評価値を持ってくる学習(RootStrap)について

Rootのleaf(静止探索した先の局面)に点をつけるということなので、正確にはRootStrapと言わないのかもしれないけど。
これは探索した先の点が200点で、現局面が100点の場合、「100点だなんて言うなよ!未来は明るい!You、増やしちゃいなよ」という感じで点を持ってくるもの。NDFがやって成果を出した方法(とはちょっとだけ違う)。
評価値がつくのが早くなります。

探索深さは3派と6派、あるいはその両方をやっているとのこと。
Q学習みたいに、終局後から値を持ってくるタイプの学習方法です。

現在はみんな棋士棋譜で学習させたベースからやっているので、探索を深くしているのとあまり変わらず、もしベースをゼロから始めた場合は勝ちになったら1とか決めておいて、勝ち直前の駒の配置にまず点がつき、どんどん続けていくと終盤に点がつき、中盤に点がつき、序盤に点がついていく。といった感じになります。対局数はかなり必要そう。

大会中はこの話題が大半を占めていて、雑巾絞りと呼ばれていました。
勝ち確定判定をだんだんと序盤のほうに向かって引き寄せてるイメージなので、果物で言うとミカンかな(余計わかりにくい)。