人間の棋譜を用いずに評価関数の学習に成功

今回、新たに評価関数をゼロベクトルから学習させた。elmo絞りを使うと意外と簡単にApery(WCSC26)相当の棋力を持つ評価関数にまで出来るようだ。追試できるように記事の前半に手順を記しておく。また、記事の後半には何回目のelmo絞りでどの程度の強さであったかも示す。

elmo絞りを知らない人のために簡単に説明すると、今回、将棋ソフトが人間の棋譜を用いずに勝率の高い形を強化学習でソフト自らが自動的に覚えたということである。今回、1回に生成している教師の数は5億局面。対局回数で言うと400万局程度であろうか。それだけの対局を終局までこなすことで、どういう駒の位置関係だと勝ちやすいのかを学習したということだ。

私は以前、elmo絞りを用いずにある程度の強さまでは到達出来たのだが、計算資源を湯水の如く消費するので途中で断念してしまった。今回はそのリベンジである。題して「Re : ゼロから始める評価関数生活」、略して「リゼロ」だ。

あらかじめ書いておくが、今回作った一連の評価関数ファイルはすでにやねうら王のGitHubのほうで公開した。興味のある人は評価関数のダウンロードのところにある「リゼロ」からダウンロードして試してもらいたい。

私は棋風を語るほどよく見ていないので本当に強いのかもよくわからないが、ちらっと技巧(2015)相手の対局を見た限り、見たことのない変な囲いから攻めて、よくわからないけど攻めを繋いで、詰みを見つけるのが数手早かった。これがこの評価関数の特徴なのかも知れない。将棋に詳しい人は、是非使ってみて、この記事にコメントをもらえると嬉しい。

人間の棋譜を用いずにプロ棋士レベルの棋力を持つ評価関数を生成するのはかねてより私の研究対象であったが、今回は追試できるように手順を詳しく書き、かつ、そのためのソースコード一式を用意できた。また条件も緩いので普通のPCでも時間さえかければ簡単に再現できるはずだ。このような形で公開できることを嬉しく思う。そして、これは、もしかすると歴史的快挙なのかも知れない。

再現手順

Step 1. 評価関数をゼロにリセットする。評価関数パラメーターの値がすべて0である評価関数ファイルを用意すべし。これはKK/KKP/KPP配列をゼロで埋めるコードを書いてそれを保存してもいいし、中身が0であるファイルを所定の長さだけ書き出すだけでも良い。やねうら王で評価関数を読み込む前にsave()関数を呼び出して保存する、というのでも良い。

Step 2. やねうら王(V4.66)のgensfenコマンドでその評価関数から教師局面を生成。定跡ファイル未使用。depth 6で5億局面。eval_limit = 32000 , lambda = 0.5。(これには40c80tのPC 1台で半日かからない)

この学習に用いたのは以下の時点のものだ。これより新しいバージョンでも古いバージョンでもここに書いてある挙動と異なる可能性がある。
https://github.com/yaneurao/YaneuraOu/tree/b6e096cd323ae59d3089996cacb3095271c2abbe

Step 3. やねうら王(V4.66)のlearnコマンドで学習させる。更新式 = AdaGrad eta = 30.0 , 絞り方 = elmo_method , mini batch size = 1M局面。1周。(40c80tのPC 1台で1時間強)

Step 4. ここで出来た評価関数をもってStep 2.に戻る。(Step 2.〜4.を納得いくまで繰り返す)

ここで用いたPCは動作クロック2GHz程度のものであるから、いまどきの家庭用PC、例えば4c8t 4GHzのものを用いた場合、ここで書いた5,6倍程度の時間で完了するものと思われる。

評価関数ファイルの呼び名

以下では、ゼロベクトルの評価関数ファイルをepoch 0と呼ぶ。そして1回目に出来た評価関数ファイルをepoch 1と呼ぶ。N回目のものは、epoch Nだ。

epoch 0の棋力

epoch 0はゼロベクトルであり、駒割りは有効であるから、駒得のみの評価関数(駒割りしか考慮しない)相当である。その棋力は、以前の計測によると定跡使用でfloodgateにてR2200程度であった。定跡を用いないならもっと弱いだろう。R1800ぐらいと考えておこう。

epoch 1の棋力

最初、私はelmo絞りで少しでも強くなるのかな?ぐらいの気持ちでやってみた。

しかしepoch 1でもそこそこ強かった。角道を開けたり、飛車先を突いたりする。こいつ、どうやってそれを覚えたのか…。ちらっと対局を観戦した限りは、定跡で中飛車に振っても、居飛車が好きらしく居飛車に振り直したりしているようであった。

ここで、epoch 1の棋力を計測しようと思ったのだが、epoch 0とやらせてみると1手2秒で200局中199局勝った。差がありすぎる!これでは棋力の計測は不可能である。おそらくR500以上棋力が向上しているのだろう。

試しに、epoch 1をApery(WCSC26)とやらせてみたところ、5%ぐらい勝つようである。あのApery(WCSC26)に対して5%でも勝つだけ凄いと思うが、それでもこれでは棋力の正確な計測は出来ない。

epoch 0がR1800で、このソフトに99%以上勝つということはおそらくR2600以上であって、Bonanza 6と同じぐらい(少し弱いぐらい?)の棋力なのではないかと思う。

なお、ここでは評価関数の質だけを問題としているので、探索部は常にやねうら王の最新版(V4.66)を用いている。この記事に「Apery(WCSC26)」と書いてあっても、断りがない限りそれはやねうら王の最新版の探索部 + Apery(WCSC26)の評価関数ファイルの意味である。

epoch 2の棋力

こうなってくると必然的にepoch 2への期待が高まる。

epoch 2とApery(WCSC26)とを対局させてみると、1スレッド1手2秒で25%程度勝つようである。レーティング差で言うとR200程度。R3000程度あるのだろうか。

uuununnnさんのサイトによると、Apery(WCSC26)は、いまのところR3277らしい。epoch 2にして、Apery(WCSC26)が射程圏内に入ってきた。凄すぎ。Bonanza6のプロの棋譜からの学習とは何だったのか…。プロの棋譜なんて最初から要らんかったんや〜。

ちなみに上の追試手順では5億局面に対して学習を1周回すことになっているが、2周回すともう1,2%勝つようである。レーティング差R20程度。Apery(WCSC26)とR180の差。

まあしかしここで手順をころころ変えると追試しにくくなるので、上に書いてある手順通り1周回したものからまた教師局面を生成することにした。

epoch 3の棋力

Apery(WCSC26) vs epoch3。

1スレ2秒と1スレ4秒での計測は以下のようになった。まだApery(WCSC26)にR80程度負けている。

T1,b2000,609 – 20 – 371(62.14% R86.1) win black : white = 51.22% : 48.78% T1,b4000,593 – 25 – 382(60.82% R76.4) win black : white = 51.38% : 48.62%

Apery(WCSC26)とやねうら王の最新版(V4.66)とだとやねうら王の探索部のほうが優れているので、やねうら王の最新版(V4.66) + epoch 3は、Apery(WCSC26)の探索部 + Apery(WCSC)の評価関数との棋力の比較だと、同等ぐらいか、やや前者のほうが優れていると言えるだろう。

それでも評価関数同士の比較としてはまだApery(WCSC26)に負けているので実験を続けていこう。

epoch 4の棋力

Apery(WCSC26) vs epoch4。

1スレ2秒、4秒の戦績は以下の通りで、ほぼ互角と言えるだろう。

T1,b2000,543 – 20 – 437(55.41% R37.73) win black : white = 52.24% : 47.76% T1,b4000,472 – 11 – 457(50.81% R5.61) win black : white = 53.07% : 46.93%

わずか4回目にしてApery(WCSC26)のレベルに到達した。

NDFの手法であるKPP相対[2014]とか、AWAKEの手法であるKPE次元下げ[2015]とか、一体何だったのか…。この瞬間にすべてが過去の遺物となったと言えるだろう。

epoch 5…

epoch 5以降の実験も継続しているが、いったんこうして記事にしておく。

まとめ

一言で言うとelmo式の効果が凄すぎた。プロの棋譜を使わない評価関数の栄誉はelmoの作者である瀧澤さんに捧げられるべきである。

また、やねうら王の教師局面の生成部、学習部も今回きちんと書きなおした。今回の実験が成功した背景にはそのへんの事情も大いに関係している。記事が長文になってきたので、その詳しい解説は機を改めて行なうが、この、「きちんと書く」というのがとてつもなく大変な作業だった。

科学的な実験において、理論が間違っているのか実験手法が間違っているのか実験装置に不備があるのか判然としないことが多々ある。今回の成果も、探索部、教師局面の生成部、学習部、それぞれがきちんと動作していることが大前提なのであるのだが、この前提条件を満たすのがそもそも簡単なことではなかった。それらのパーツを精巧かつ丁寧に、そしてミスなく作り上げるために多くの協力者のもと非常に多大な時間を費やしたことをここに付しておく。

またこの場をお借りして、やねうら王のプロジェクトに協力してくださっている方々に感謝の意を表したい。elmo式の発案者である瀧澤さんと、やねうら王の学習部に関する一番の功労者であるtanuki-さん(およびtanuki-チームのメンバーの皆様)に厚くお礼申し上げたい。

質問等はコメント欄でお願いします

実験手法などに関する質問等はこの記事のコメント欄にて受け付けています。ツイッター上での個別の質問にはお答え出来ません。(ツイッターでは同じ質問を何度も受けるため) 何卒、ご理解ください。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です