Aestetica

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

Seleneの話

最初に書けよ!というお話。
コメントで「WCSC24Selene」とか書いてしまったので順番に。
現実逃避?いや違う違う。

WCSC22Selene

初参戦のもの。
Bonanzaにより、コンピュータ将棋で機械学習大流行り。流行ったというレベルではなくて、もう、機械学習以外は考えられなくなりましたね(手調整の方いたらごめんなさい)。
コンピュータ将棋に多大過ぎる影響のある人、プログラムとしては、まずは保木さん。そしてStockfish、今は巨瀬さんの利き(KPE)だと思います。多くの人がそうなりましたねー。

で、
機械学習について、まったくわからなかったけれどもやってみたい!ということを当時伝えたところ、森岡さんにチェスプログラムのknightcapというTD-leaf(λ)を採用しているプログラムを教えて貰う。
へー、じゃあそれをやってみようかな。と、軽い気持ちで始めたものの、これがまたぜんぜんうまくいかない。
どうかしちゃったんじゃないかというくらい、何度も何度もソースを読む。印刷して電車で読んでたなあ。

おとなしくBonanza Methodをやれよ。という感じですが、それはもちろん保木さんがいらっしゃるので、他のアルゴリズムがあったほうが面白いんじゃないかなあ。と思いました。機械学習アルゴリズム勢揃い!のほうがよくないですか?(笑)
それで、これまた収束しないわ、特徴もなにがいいんだかよくわからんわ。で、とにかく試す。

leafだけではなく、兄弟手にもマイナスの点を評価値に応じて分配することで、ようやくうまくいくっぽい。
一応、Bonanzaと同じ仕組みを自力発見ですよ!自力発見!(笑)
特徴をアレコレ延々といじっていたら、うまいことすると少ない棋譜でも学習できる!(たくさんの次元に点をつけます)
なので、最初は絶対2駒、相対2駒+α(今も使っているので内緒ですー)

探索部分は「いつもの」chess programming wikiから取ってきては試す、取ってきては試す。数字変えてもうまくいかなかったり、そもそも理解ができていなくて適用方法を間違っていたり。

ほぼGPSチルドレン的だった初代Seleneを捨てて、レーティングは劣るものの、完全オリジナルのSelene2で参戦。
3000~4000くらいの棋譜だけで学習。当時は、こういうのが無かったんですよ。
これで決勝とか行けたらカッコ良かったんですけどねー。

WCSC23Selene

TD-leaf(λ)は強化学習に分類されるので、本来は教師なしで学習できるはず。
ということで、今度は教師なしにハマる。
これがまた、まったく強くならないしー。そのときはSeleneBonanzaを相手に対戦して、勝ち越したら出そうと思っていたけど、勝ち越せない。

特徴を一から見直し、駒ごとに細かく特徴をつけたらなんか強くなった!しかし序盤最悪。
散々悩んだ末、序盤だけ棋譜から学習したらみるみる強くなる。とはいえ、Bonanzaにはやや負け越す。
中盤~終盤は棋譜使ってません!(中途半端)
いやあ、どうしよう、これにするのか、実はこっそり改造し続けた初代Selene改で行くべきか。

でもまあ、1年間一所懸命やったんだし、こちらで行こう。ということで、去年よりも弱くなった教師なしSeleneで参戦。
そんな人、他にいるんだろうか(笑)我ながらバカなんじゃなかろうか(笑)
なんとかシードに残れたんだけど、これは結構、自分では「俺、よくやった」という、よくわからない満足感でした。

WCSC24Selene

オンライン学習をやってみよう。ということで、いろんな人に超絶ベーシックなことを聞いてまわり、averaged perceptronを試してみる。
これもまたぜんぜんうまくいかない。というか、いつもうまくいかないなあ(笑)これが楽しいと思えないと、どうにかなるわ。
学習のバグが一番よくわからず、本当につまんないところを別目的で修正したら、なんかうまくいってるように見える。
選手権に参戦する上でははじめての棋譜を100%使用したもの。

結果としてはうまくいっていないというか過学習を起こして失敗だと思うんだけど、学習以外の他の要因もあって勝敗的にはかなり良いところまでいけた。
もうちょっと調整したりなんだりすれば、学習もうまくいって胸を張って戦えたと思うのだけど、この大会は一番失敗した感が強い。終わったら続けて研究していこうとしていたんだけど、そのままにしてしまった。sunfish3のソースを見たときにそれを思い出す。


と、それぞれ思い入れもあれば、失敗して試してばかりなんだけど、前から本当に作りたいのは局後学習できるやつをfloodgateにゼロ(=ランダムプレイヤー状態)から出したい。というもの。こんなこと書いちゃっていいのか(笑)みんなで強くなっていく様を見ましょう。と、いうことです。できなかったらごめんね。
いやしかし、もう激指にずいぶん先を越されてしまったので焦ってます(笑)