前回の続き。
教師なし学習の実験に取り組んでいた、ひまうら王、ひようら王(ひよこ将棋)より有意にかなり強くなったので、floodgateに放流しておきます。明後日ぐらいにバイナリ公開します。
— やねうら王 (@yaneuraou) December 3, 2015
前回、ひようら王のほうがひまうら王よりnpsが高いため、駒得のみの評価関数(ひようら王)のくせに、なかなかそれを超えられないという話を書きました。
ところが、ひようら王同士の自己対戦を1手1~3秒1スレッド6並列×3PCで行なって、棋譜を2000局ほど作り、それで学習させるだけでなんとひようら王と同等か少し強くぐらいの強さになったわけですよ。これにはびっくり!
棋譜2000局でこの強さになるならば、棋譜を増やせばまだまだ強くなることは経験的にわかっています。
しかし棋譜を増やすにしても強い棋力で指された棋譜のほうが好ましいです。そこで、この棋譜から学習させたひまうら王で自己対戦させてまた棋譜を2000局ほど追加で生成。
棋譜合計4000局から学習させてみるとひようら王よりR50ぐらい高くなりました。
この強くなったひまうら王で自己対戦させて(以下略)
何がどう強くなっているのか対局棋譜を見ていてもよくわかりませんが、中盤で勝つための知恵が少しついたのかなという印象でした。
と金製造も少し減った気がします。
まあ、実戦において探索すれば敵玉から離れたところに「と金」を作って良しになるかどうかはわかるわけで、そういう指し手は回避される傾向にありますから、棋譜からそういうのを少しずつ学んでいくんでしょうね。
こうして強くなったソフトで自己対戦させて、またその棋譜から学習させることにより、悪いと金製造について学習する。
この過程は遺伝的アルゴリズムや淘汰による進化に似たものがありますね。
まあ、これをいつまでも繰り返していても仕方がないので、この手順で強くなるということが実証できたので、この手順を2,3回繰り返して、ひようら王よりR100ほど強くなったところで、次の実験にとりかかりました。
序盤を改善するということです。
ひまうら王、強くなったとは言え、序盤がでたらめです。端歩とか突く手が大好きです。なかなかこれが改善されません。上記の反復を繰り返していればもしかすると改善するかも知れませんが、それにはとてもとても長い時間がかかりそうです。
そこでBishopLearningを改良して…という話は長くなるので次回に書きます。
ともかく、今回の結論としては、駒得だけの評価関数の将棋ソフトの自己対戦棋譜から3駒関係を学習でき、強くすることが出来るということです。3駒関係だと教師なし学習は難しいというのが定説でしたが、今回はそれを覆す結論が出ました。Aperyでも同じ結果が出ると思うので、気になる人は是非Aperyを使って追試してみてください。
成功の秘訣は、ズバリ
・NDFのKPP相対
・KPE次元下げ
・(Stockfish風の)まともな探索部
・まともな学習部(ボナメソでもSGD+αでも良い)
だと思います。
探索部を下手に自作しようとしたり、Aperyがソースコードの形で示してくれているレベルの次元下げをしていなかったり、プロ棋士の棋譜を入力として与えたときにきちんと収束することすら怪しい学習部とか、そういう信頼性のないパーツを使わないことがこの手の未知の実験では非常に重要だと私は考えています。
他の教師なし学習の取り組んでおられる開発者の批判がしたいわけではありませんのでこの話はこれくらいにしておきます。
そして次回、序盤をなんとなく(?)改善した学習手法および、ひまうら王のバイナリを公開します!
なるほど。なんか人っぽいですね。
ひようら王を教師とした学習によってひようら王に律速される形でそれを少しだけ抜きんでたひまうら王ができた。
まさに教育現場ですよ。
ひまうら王にはひようら王のいうことを理解できる頭があったという、人に転化しても通じることが起こってるように思いました。
すごい面白いです。
そうなってくると、人を俯瞰して、もっと教育環境ををよくしたいですね。
ひまうら王はたぶんひようら王の弱点も学習すると思います。
それを裏切る棋譜をどうにかして自動生成しないといけないのではないかと感じました。
まぁどうですかねぇ。
屋根さんが悲観してた部分はただ初期投資がなってなくて基礎学力がなかったということなのかもしれないですね。
ほんとにおもしろいです。ぜひもっとやってください。
お願いします。
>ひまうら王のバイナリを公開します!
なぜかいつも発表順と実現順が逆になるやねさんエフェクト。
発表順
ブラうら王ー>やねうら王miniー>ひまうら王のバイナリ
実現順
ひまうら王のバイナリー>やねうら王miniー>ブラうら王(いまや風前の灯状態)
「ブラうら王」は「やねうら王mini」でチャラにしてあげてもいいかも、、、。
超つようら王を作って、ブラウザで遊べるようにします!そ、、そのうち..
順序が逆になるのではなくて深さ優先なんですよ。
スタックなんですよタスクの処理順序が。
それでいいんですよ。
>端歩とか突く手が大好きです。
玉側の歩がつきこされていると、終盤で玉が広くなり有利に働く場合がありますね。(格言では、銀1枚分違うそうです。)
囲いに応じて突く、突かないを判断できるといいのですが。
ただ、反対側も突くと展開が遅れる事が多いので、中盤(仕掛けの辺り)が強くなれば、両方は突かなくなるかも。
いずれにしても、面白いというより、有意義な実験結果と思います。
ひまわりの山本です。
1点気になることがあるので質問させて頂きます。
自己対局で棋譜を作る際のランダム性についてです。
本文を読みますと持ち時間に揺らぎを持たせているように読めますが、それ以外に何かされてますでしょうか。
ひようら王について詳しくないので分からないのですが、駒割だけのプログラムだと類型ばかりになるのではないかと気になった次第です。
> Aperyがソースコードの形で示してくれているレベルの次元下げをしていなかったり
この辺りはぐうの音も出ません…
次元下げはやらなきゃとは思っているのですが…
返信が長くなりそうなので次の記事中に書かせていただきます。
そして、ひまわり、応援してます!(^^)