電王戦トーナメント本戦 --- やねうら王 特設ページ


数々の奇跡が起こり、なんと電王戦予選を4位で通過したので本戦の実況中継をこのページでさせていただきます。


前回までの記事)
電王戦 --- 将棋電王トーナメント --- やねうら王特設ページその3
http://d.hatena.ne.jp/yaneurao/20131101#p1


■ 2013/11/03 9:00 AWAKEとは何物か?


やねうら王が次に対戦する予選通過5位のAWAKEとは何物であるか。昨日、ホテルに戻ってから、2chの電王戦スレを軽くチェックしたのだが、AWAKEについて非常に的外れな書き込みが散見された。そこで、私がAWAKEとは何物であるかを簡単に解説する。


いま私はドワンゴの会場からこれを書いていて、対戦のためのテストや準備などもあるのでこれを大急ぎで書いている。文章が粗いのはご容赦願いたい。


まず、AWAKEの作者のプロフィールはこうなっている。


このStockfishとはコンピューターチェスの強豪ソフトで、オープンソースであるため多くのコンピューター将棋開発者が研究している。コンピューター将棋ソフトでここ近年は探索においてほとんど進歩がなかったが(よく知らないがたぶん)、Stockfishは頻繁にソースコードが改良されており、コンピューター将棋ソフトの探索の進歩はすなわちStockfishの進歩によりもたらされたものである。


私はやねうら王を3年程度いじっていないと言ったが、すなわちそれはここ3年分の探索技術の向上(=Stockfish)に全くキャッチアップしていないことによる。私がコンピューター将棋の開発者としてサボってきた(忙しくて研究できなかった)、そして、やり残していた宿題、それがStockfishなのである。


StockfishというソフトはC++のtemplateを駆使して作ってあり、中堅以上のプログラマーでなければ読み解くことすら難しい。Stockfishをベースにしているという時点で、それはプログラマーとして中堅以上であることを意味し、そして、コンピューター将棋プログラマーとして一流かそれに準ずるということを意味する。


次に「3手詰めルーチン」を搭載していると書いてあるが、これはコンピューター将棋関係者には特別な意味を持つものである。そもそも世間で言われているような3手詰めなど、Bonanza型の探索では王手になる手を延長して読むので3手どころか、23手ぐらいは通常探索であっても数秒で読めることは昨日私が書いた。


それなのに「3手詰めルーチン」が何故要るのか。そもそも3手詰めルーチンとは何なのか。


「3手詰めルーチン」というのは、コンピューター将棋開発者にとっては符合のようなもので、これはBonanzaのmate3.cを意味する。要するにボナンザに搭載されている3手詰め判定の処理コードだ。何故こんなものが必要になるのかと言うと、例えば、右上に敵玉がいて、敵が手駒として歩香桂銀金角飛の7種をかなりの枚数もっていて、こちらが左上から飛車を打ったときのことを想像してみて欲しい。


このとき詰将棋的には1手で詰んでいる局面であっても中合い(実際は無駄な中合いなのだが)が発生し、その無駄な中合いの変化が1000通りぐらい発生するので(81歩、同飛成、71歩、同龍、61香、同龍…みたいな変化)、非常に無駄なのである。1手で詰んでいるものを中合いのために1000通りも調べるのは馬鹿らしいのである。


そこで、これを簡略化して、これを詰みだと先をあまり読まずに判定する。(中合いする地点に敵の利きがないなど、いくつかの条件を満たす場合にのみ可能) これを「3手詰めルーチン」と呼ぶのである。


この「3手詰めルーチン」は複雑怪奇であり、そしてLS3600(私のことだが…)によってかなり改良された部分でもあり、Bonanza特有の、そしてコンピューター将棋特有の技術なのである。


Bonanzaソース完全解析ブログ
http://d.hatena.ne.jp/LS3600/


この3手詰めルーチン(のことだとしたら)はそうそう自前実装できるものではないので、おそらくBonanzaからの流用、あるいはかなりソースコードを参考にしているのだろう。


つまり、AWAKEは、探索部だけStockfishを参考に書きなおしたBonanzaである(Bonanzaベースのプログラムである)と、作者自らがプロフィールで宣言しているのである。GPSがStockfishを参考に書きなおしたGPSfishが有名だが、Bonafishに相当するのがAWAKEなのである。


そういう意味で、AWAKEはponanzaに勝っても全然おかしくないソフトなのだ。予選での5位という結果はたまたまの不運であって、本来、やねうら王が10位あたりで、AWAKEが3位か4位には位置しているはずなのだ。


そして序盤定跡としてやね裏定跡にハマるかというと、そんなことはありえない。AWAKE作者は元奨励会1級まで行った将棋指しとしても実力者であり、むしろAWAKEのほうが最先端の将棋定跡を搭載していてもおかしくないのである。


プロ棋士と対局するのは、やねうら王などという事前調整不足で実力的に10位ぐらいしかない(来年には頑張りますよ?)ネタソフト(いまのところね)ではなく、AWAKEのほうがふさわしいのである。


それなのに、2chのお前らときたら…。まるでそれがわかってないな。AWAKEなら、昨年の電王戦上位にいた習甦とも互角以上に戦える(と私は信じている)。


そんなわけで、私としてはAWAKEに勝てる見込みは3割程度しかなく、敗者復活は2戦もするので実力的にはどうあれ、運になってしまう。正直告白すれば、やねうら王が5位以内に入って賞金をもらえる確率は10%未満である。であるから、期待値的に考えて本当は宿泊代がもったいないので、とっととブッチして帰りたいのが本音である。もちろん、予選4位通過の義務というか、責任として、最終日までは真っ当に対局を受けて立たねばならない。本当、私も辛いんだよ…。


・2013/11/03 10:00 追記


という話をいま横にいるponanzaの山本君に話したら「3手詰めルーチンを搭載してるからBonanzaの3手詰めって、どんだけBonanza脳なんですかwww」と言われた。(意訳「3手詰め自体は他にもいろんな手法があるので、Bonanzaとは限らず、Bonanzaほど複雑なことをしているとも限らないのでは?」の意味)


まあ、中立に見ればその通りで、私が上で書いたことはBonanza脳(Bonanzaが好きでBonanzaの研究のために没頭し、なんでもかんでもBonanzaを基準に考える)ゆえの、少し穿った見方であることもここに併記させていただき、読者の方にはそのへんも織り込んで理解しておいていただきたい。


■ 2013/11/03 9:15 やねうらおとは何者なのか


Bonanzaソースコードが公開されて以来、多くのコンピューター将棋開発者はBonanzaソースコードの解読に努めた。しかしソースコードは暗号のようなテクニックで書かれており、解読にはパズルを解きほぐすような特殊な能力が必要とされた。多くの開発者が理解に悩む間、短期間にBonanzaソースコードを完全解読し、Bonanzaを丸裸にしたブログがあった。それがLS3600による以下のブログだった。このブログを、多くのコンピューター将棋開発者は参考にし、コンピューター将棋の進歩に寄与した。第一回電王戦で戦果を上げたボンクラーズの作者の伊藤さんも大いに参考にしたと語っているブログ、それがLS3600のブログなのだ。


Bonanzaソース完全解析ブログ
http://d.hatena.ne.jp/LS3600/


Bonanzaソースコードの公開と、上記ブログの技術情報の公開とが双璧を成し、コンピューター将棋の技術は大きく進歩したのである。そのブログを書いたのは私だった。(なんだ、自慢か!)


そして、そのあと、駒得だけの評価関数でどこまで強くなるのかについて研究するブログがあった。ひよこ将棋のブログだ。このブログ主は、世界最速の指し手生成ルーチンを用い、シンプルに、そして高速に書かれたプログラムにより、駒得だけの評価関数でもfloodgateでR2200前後(アマ三段〜四段レベル)の点数がつくことを証明した。


ひよこ将棋、はじめました。
http://d.hatena.ne.jp/hiyokoshogi/


そして、そのブログ主は同時に、強くなりすぎたコンピューター将棋で、わざと、自然に弱くするための研究をし、それが可能であることを示すために接待ひよこ将棋を完成させた。


そう、上のブログ主も私だ。(なんだ、また自慢か!)


また、「fpga 将棋」で検索すれば検索1位に出てくる、fpgaによるコンピューター将棋(Bonanza以上の棋力のもの)は実現可能なのかについて深く考察したブログがある。


FPGAによるコンピューター将棋「スーパー田舎将棋」作ってます!!
http://fpgashogi.hateblo.jp/


このブログは、現時点で何故FPGAではまともな強さのコンピューター将棋が作れないのかについて深く考察されており、コンピューター将棋関係者からはあまり注目されていないが(コンピューター将棋関係者はFPGAでの実装にはあまり興味がないので)、ハード寄りのコンピューター将棋に興味のある研究者から大いに注目されているブログである。


これを書いたのも私だ。(なんだ、またまた自慢か!)


しかし、私は数年ぐらい前から、ベンチャー企業を立ち上げるために奔走していたので、その合間合間で熱病に取り憑かれたように瞬発的にこういうブログに思いの丈を書き散らすことはあったが、コンピューター将棋の研究においては後手にまわり、全くキャッチアップが出来ていない状況だったのである。


幸いにして、私が立ちあげに関わっていた会社は、成功し、ヒルズにオフィスを持つまでになった。私はそのセキュリティ会社のCTOである。(なんだ、またまたまた自慢か!)


そのように、ビジネスパーソンとしての才覚も、自分ではよくわからないが、たぶんあったというべきなのだろう。客観的に見る限りは。


ただ、コンピューター将棋のほうは、上でつらつら書いたように、先駆的にやってきて、そして、ほとんどのコンピューター将棋開発者に大いに参考にされるブログ・記事をたくさん書いてきて(本大会でも半数ぐらいの人からLS3600のブログは大いに参考になりましたと感謝の言葉を頂戴した)、そしてBonanzaの改良にも多大に貢献してきたつもりであるが、ここ数年分の遅れを取っているのは否めない。


本来、こんな大会に出ること自体がおこがましいのだが、それでも1分で考え1日、2日で実装したやね裏定跡が予選トーナメントで決まり、そして予選4位で通過できたことは、身に余る光栄である。(そして、いますぐこの場から逃げ出したい) まあ、この幸運は、いままでコンピューター将棋の進歩に、客観的に見ても多大な貢献をしてきた私に神様がくださったご褒美なのであろう。


それゆえ、これ以上の結果は何も望んでいないのである。上にも書いたようにAWAKEは実力派であり、やねうら王が勝てる見込みは非常に薄いのが実状だ。AWAKEに負けたやねうら王を見ても「なんだ、こんな無名のソフトに負けて!やねうら王、よええな!」となどと思わないでいただきたい。(いや、やねうら王が弱いのは、まあ、そうなんだけど…)


■ 2013/11/03 12:30 YSSのこと


YSSが千日手になって指しなおしになった。指しなおしは15分秒読み10秒という予選のときと同じ条件でだ。YSSは、千日手含みになりやすい戦型を選んでくる。やねうら王と対局したときもそうだった。


予選で千日手になると引き分け(勝ちポイントは0.5ポイント)なので下位のソフトに引き分けになるとずいぶん損だと思うのだが、YSSは千日手含みで時間を相手に使わせ、そのあと秒読みになったあと力戦形で力を発揮するという考え方なのかも知れない。きっと秒読み + 力戦形においてはYSSは勝率が高いのだろう。(私の推測)


もし山下さんがそういう考え方で戦型選択をしているのであれば、これは実験の鬼である山下さんらしい考え方だと思う。


■ 2013/11/03 12:35 他の開発者と話し込んでいて


他の開発者と話し込んでいて実況できる状況ではないな…。そもそもモニターに映し出される将棋だと棋譜を追いかけるの大変だし…。


それはそうと、ついさきほど私が更新した記事であるが、プロ棋士の遠山先生から「さっきのやねうらさんの更新、読みましたよー」と言われた。さすが、日本将棋連盟棋士、モバイル編集長の遠山先生だけあって、モバイル端末で他の参加者のブログチェックにも抜かりがない。(っていうか、このタイミングで電王戦関係のブログ更新しているの私だけなんだけど…)


せっかくなので遠山先生(現役プロ棋士)とAWAKEの巨瀬さん(元奨励会員)には、やねうらお流の将棋のトレーニング・メソッドについて熱く語っておいた。私の横にいるやねうら王チームで参加している友だちは、「釈迦に説法ですがな…」と呆れ顔。やねうらお流の将棋トレーニング・メソッドについては、いずれ記事にまとめてどこかで公開したい。


■ 2013/11/03 18:00 対AWAKE戦


序盤でAWAKE側の不調(途中でAWAKE暴走?)により、一時中断。ドワンゴ様のほうで別の対局サーバーを用意していただいて同じ局面から指しなおし。ところが、AWAKEがそのあと2手目で指し手を返してこないので、これにより、やねうら王の勝ちが決定しました。(この時点で本戦4位確定)


AWAKE側は単純なバグだと思うのですが、この大一番でこんなバグが出るのは不運としか言いようがなく、私のほうも直前まで調整だったので、やねうら王のほうもこういうバグが出てもおかしくない状態だったのでまったく人ごとではなく、素直に勝ちを喜べる気分では決してないです。


■ 2013/11/03 20:15 ドワンゴなう!


今日は午前中はやねうら王は対局がなかったので、ドワンゴから2chの電王戦スレをチラッと見ているとき「いま、ドワンゴのIPで2chfusianasanで、ドワンゴなうって書いたら面白いんだろうなー」とかいう考えが一瞬頭をよぎり、「いやいやそんなことしたら関係者の首が飛ぶぞ!」と身震い。本当、ときどき悪いイタズラとか妄想とかがフラッシュバックするかのように勝手に脳裏に浮かぶの、やめて欲しいです。> 私の頭


ところで当該スレには、このブログの熱心な読者な人とかいらっしゃって嬉しかったです。でも、このブログを読んでいない人に対して敵意むき出しで書き込むのはやめましょう。別に知らない人とか知りたくない人にはそれはそれでいいじゃないですか。


■ 2013/11/03 20:30 本戦トーナメントにおけるBonanza vs YSS


YSS → 作者の山下さんいわく、Stockfish風探索を取り入れたとのこと。(私にはよくわかりませんが、おそらく前年度のバージョンからR100以上上がってるんですかね…。探索がどうあれ、YSSは独特の評価関数なので、面白い指し回しですね。)


Bonanza → 保木さんいわく、評価関数以外あまり改良していないとのこと。評価関数の学習のほうに力を入れていた。(他の人からの情報ですが、保木さんは情報処理学会誌にKPを先に学習させ、そのあとKPPを学習させると収束が速いという要旨の論文が最近掲載されていたそうです。おそらく、このことでしょう。) 以前のバージョンより強くなっているかどうかはわからないとのこと。


以上のことからYSSがBonanzaに勝ったのはマグレではないような気がします。


ついでに保木さんには個人的に聞きたかったことについて質問してみました。(別の開発者からきいて欲しいと言われていたこと)


私「Bonanza Final(商用版)のfv.bin、あれ、Bonanza6のfv.binより強いんですか?なんか対戦させた話では勝率がかなりあがっているそうなんですが。」
保木さん「(Bonanza6.0からはさらに長い時間学習させたものですが)いやー、誤差なんじゃないですかねー。自己対戦させて勝率とか見てないのでわかりませんねー。」
私「学習させるときのDEPTH(探索深さ)を深くすると強くなるという話を以前保木さんがおうかがいしましたが、深さ3(DEPTH定数2)から深さ4(DEPTH定数3)にすると3倍、深さ4から5でさらに3倍というように学習時間が必要になりますが、こうやってDEPTHを上げるのって意味ありますかね?」
保木さん「いやー、誤差じゃないですかねー。深さ1と3のときは少し上がった気がするんですが、いま考えるとあれも誤差みたいなもんですし…。」


とのことでした。保木さん、そんなアバウトでいいのですか…。
とりあえず、ボナンザメソッドの考案者、保木さんのありがたーい(?)お言葉でした。


■ 2013/11/03 20:50 本戦トーナメント ツツカナ vs Apery


ツツカナとAperyとの一戦ですが終盤の寄せで驚愕の現象が起こりました。


ツツカナが大長考に入ったのです。AWAKEの再来かとざわめきが起きるなか、ツツカナの作者は、「fail-high*1したときは、さらに思考を続けるようにしてあるんですけど…」と、一応意図的なものであることを強調。


「しかしさすがに考えすぎでしょ。時間残ってないですよ。」「仮にfail-highしたときに思考続けるって言っても限度ってものがあるでしょ。普通、5倍ぐらいの時間使ったら打ち切るでしょ。」など否定的な開発者もいるなか、この長考によりツツカナが勝ちまで読みきり、大盤面には9999の評価値が。


ツツカナが高らかに自分の読み切り勝ちを宣言したのです。これには観戦者全員驚愕。


ApreyのほうはStockfishをベースに作られており(本当に本大会は、Stockfish風探索にあらずんばコンピューター将棋にあらずという勢いなんです)、そこまで探索が悪いわけではないはずなのですが、数手進めてもまだAperyのほうの評価値は普通のまま。


「ツツカナ、バグってるんじゃないか」


などと言われるなか、しかしそのあとAperyの評価値が急変。自玉が詰みであることを認識し、-9999の表示。ツツカナの読みが正しかったことを認めました。


公式のコンピューター将棋の大会においてここまでの長考が見られたのはもしかして初めてではないでしょうか。そして、このまま時間切れになっても仕方がないほどの大長考において勝ちを読みきったのもこのケースが初めてではないでしょうか。


そもそも他のコンピューター将棋はそんな大長考するようには作られていません。この大長考はもしかしたらツツカナの時間制御の甘さなのかも知れませんが、しかし本局ではもしかしたらこの大長考自体が唯一解だった可能性もあり(将棋の内容をよく検討していないので私はわかりませんが)、「こんなことが起こりうるんだ…」と、素晴らしい奇跡に立ち会えたことに素直に感動しました。(あとで聞いた話によると55手詰みだったとか…なんとか…→ 訂正。Aperyの作者に確認したところ、最後の最後の詰み自体は13手程度の詰みだが、それよりずいぶん前からのツツカナの読み切りだったそうで…)


■ 2013/11/03 21:20 息子からやねうら王への応援メッセージ


息子が誕生日なので息子に「たんじょうび、おめでとう。あさってかえるね。パパ」と書いて送ったところ、嫁が気を利かして、息子に音声入力でメールを入力させて返信してきた。


「パパメールおくるよ
パパあさってかえってきてね
パパどこにいってんの
【息子の名前】くんまってるよ
【息子の名前】くんはたんじょうびしたよ
しょうぎをやってんの?
パパまけたらよるにかえってきてね
あるいてかえってきてね
またしょうぎがんばってね
おわり」


なんだよ負けたら歩いて夜に帰ってきてねって…。東京から大阪まで歩けってか。それ一体、何の罰ゲームだよヽ(`Д´)ノウワァァァン!!


■ 2013/11/03 22:00 お前らどんだけBM98好きなんだよ!という話


そういや、保木さんが以前、私に「学生時代、BM98にはお世話になりました…」とおっしゃっていたが、今日はドワンゴの川上会長が会場に見学に来てらして、「あれがかの有名なBM98のやねうらおさんか…」みたいな話をされていたらしい。(私のほう、対局の準備で忙しく遠目に確認しただけだったので伝え聞きなのですが)


川上会長はきっと今回の将棋の内容とかご存知ないので「やねうら王、さすが、やねうらおさんだな!初登場なのにいきなり本戦四位抜け確定じゃないか!」ぐらいに思ってらっしゃるかと思うんですけどね、ラッキーパンチって普通パンチが相手に一応は当たるじゃないですか?やねうら王の場合、パンチする前に相手が勢いよく走ってきて勝手に転んで勝ちを拾っただけですからね!何も期待しないでくださいよね!


でもいままで私がコンピューター将棋の開発のために関西電力に払った電気代はキッチリ払ってもらいますからね!!ヽ(`Д´)ノ


■ 2013/11/03 22:15 コンピューター将棋の探索技術とは何だったのか


本大会でStockfishの探索ルーチンを参考にしている派が多いのがもう皆様に伝わっているかと思いますが(私も正直驚きました)、日本の伝統文化である将棋の探索において何故日本の探索技術では駄目だったのか。これについて簡単にご説明します。


おそらく、5年か10年前は日本と海外とでこの手のゲームの探索技術というのはさほど差がなかったのだと思います。Blunderのaki.さん(今回ponanzaチームとして参加)は、「そこまで日本の探索技術が劣っているというわけではなく、Stockfishが何人もの人が日々細かい改良をしていて、そいういう細かい改良が積み重なってここまでの差になっているのでしょう」という趣旨のことを言われていました。


つまり、細かい改良なので探索効率の0.1%とか0.2%ぐらいしか改善しないものも多数ありますが、全体で見るとそういうのが累積されて何十%かが改善され、コンピューター将棋をStockfishの探索部風にするとレーティング換算で100ぐらい変わってくるのでしょう。この100ぐらいは普通は誤差であるという見方もありますが、本大会のような競技となったときは、勝率に大きな変化をもたらしますから誤差の一言で片付けられるものではないでしょう。


日本はそれぞれの開発者がそれぞれ自分独自の改良を加えてきて、従来、それが良かった状況もありますが、しかしいまとなっては彼らが独自にやってきた改良というのは、ソースコードが公開されていないのでそのアイデアが開発者全体で共有されているわけでもなく、開発者が開発をやめてしまえば、もはや後世に何も残っていないわけです。


そんなわけで日本では、コンピューター将棋の探索部において、開発者全員でアイデアを共有したり、開発者全員で改良したりする場所や機会が存在しなかったがために進歩が立ち遅れ、ノウハウとして蓄積されず、その結果、コンピューターチェスの探索技術に圧敗するようになったのです。


今日(こんにち)の状況は、後の歴史から見れば、これはコンピューター将棋開発関係者が後世に残るようなものを何も生み出せなかったという意味において、「コンピューター将棋の探索技術の研究における空白の10年間」と言えるかも知れません。(私は専門の研究者ではないのでこのへんよくわかりません。反例があるならコメント欄で教えてください。)


私はこの状況を好ましくないと思い、この閉塞的状況を打開するために日本でStockfishの研究グループを発足することにしました。(研究グループというか、「私が調べて解読した内容をどこかに書いておいてやるから勝手に読め」というのが基本的な趣旨ですが。) とりあえず、今回の電王戦の参加者のうち、Stockfishに興味のありそうな人全員に声をかけたつもりです。「自分も参加したい」という今回の電王戦参加者がおられましたら、お手数ですがやねうらおまでメールください。


■ 2013/11/03 23:00 fail-highとは何か?


さっきツツカナ戦の記事で書いたfail-highについて教えて欲しいと要望をいただきましたので簡単に書かせていただきます。


コンピューター将棋の探索でaspiration search(アスピレーション探索)という技法があります。これは、「この局面は先手のほうが少しよさげなので評価値は0から50ぐらいの範囲におさまるはず!」のように評価値の範囲を探索開始時に仮定して探索する手法です。


その結果が仮に25だとしたら、これは0から50の範囲に収まっているので探索成功です。このとき「探索が早めに終わって、美味しかったね」という話になります。


ところが、結果が75が返ってきたとします。0から50の間だと仮定していたのに75が返ってきたということは、これはおかしな結果だと言えます。つまり、この75は信用ならない数値です。0から50と仮定した上限(50)を超えた結果が返ってきているので、この現象をfail-highと呼びます。(ひとことで言えば「もしかしたら最初思ってたより、いいんじゃね?」という状態です。)


こうなったとき、本来の値は75以上であるということが保証されています。(基本的には、です。いろいろ条件があってこのへんなかなか難しいのです…) そこで、本当の評価値の値を求めたいときには、aspiration searchで仮定する評価値の範囲を今度はもう少し広げて探索します。そういう手法です。