ボンクラーズは実は弱いのでは?

以下は、あくまで私の勝手な想像でして、これを裏付けるものは何一つありませんので、「またひよこが勝手なこと言っているな」と思いながら以下をお読みください。


将棋倶楽部24にて、ボンクラーズが(瞬間的に)R3335まで到達し、ponanzaの瞬間最高レーティング(R3211)を大幅に上回りました。


将棋倶楽部24に投入されているボンクラーズは、クラスター化されておらず、1PCらしいです。

ボンクラーズはもともとはボナンザをクラスター化したもの(「ボナンザクラスターズ」の略)だそうですが、その後、何をどう変更してあるのかは情報が公開されていないのでよくわかりません。


fv.bin(Bonanzaの評価関数のパラメーターが収められているファイル)そのままですとコンピューター将棋選手権のライブラリ制限に引っかかるため、評価関数自体は何らかの変更を加えてあるらしいのですが*1、それによってボナンザからどれくらい強くなっているのかについても情報が公開されていないのでこれについてもよくわかりません。

クラスター化の方法ですが、公開されている情報*2を信用するならYBWCを使っていない並列化だそうで、これで成果が上がっているなら、これ自体が一つのブレイクスルーなのですが、これでどれくらいの成果が上がっているのかも実のところよくわかりません。

また、並列化のときに、スレーブをプロセス単位で動かしているそうです。*3 つまり、スレーブ側のPCは、4コアならば、4スレーブ(1スレーブ = 1プロセス・1スレッド)という構成になるのだと思いますが、常識的に考えれば、こんなことをするよりは、1PCを1スレーブとして、1プロセス4スレッドにしたほうが良いはずです。4プロセスですとそれぞれが置換表を共有できないのでその分だけ弱くなるはずです。

ところが、そこまで弱くなっていないのは(本当に弱くなっていないのかは私は知りませんが)、並列化の方法がきっとうまい方法でなされていて、置換表を共有できていないことによるロスが限りなく小さいからではないかと思うのですが、この部分も情報が公開されていないのでよくわかりません。

「1スレーブ = 1プロセス1スレッド」の典拠は、ボンクラーズの昨年の世界コンピューター将棋選手権でのアピール文書であるため、いまでもそのままなのかどうかはわかりません。

あと、今年のボンクラーズのアピール文書には「SSE bitboard、差分評価計算」とありますが、これらの変更はBonanza6に取り込まれたので、この点においてBonanza6との差はないはずです。

bonasseを忠実に真似てますんで動作はほぼbonasseといっしょです。まあいくつか改良はしましたけど。単体npsはbonasse v1.2より2〜3割上がってるはずです。また評価関数もいろいろいじってまして、fv.binは使ってません(というか使えない)。

http://aleag.cocolog-nifty.com/blog/2011/05/index.html

bonasse≒Bonanza6と比べて20〜30%高速化 + いくつか改良 + 評価関数をいろいろいじっている -(マイナスすることの) 1プロセス1スレッド構成 ということで、プラスマイナスで言えばほとんどゼロに近いか、よくて、せいぜい20%程度の高速化に相当する程度なんじゃないかというのが私の思うところです。

すなわちボンクラーズ1PCの場合、Bonanza6より圧倒的に強いということはありえないように思います。


しかし、それならば、Bonanza6に8割近く勝ち越すponanza*4が、将棋倶楽部24ボンクラーズより低いRになる説明がつきません。

ここで、原因を考えるに、ponanzaは手動で対戦させていたために、思考時間をフルに使えていなかったのではないかというのが挙げられるかと思います。


一方、ボンクラーズのほうは、思考時間いっぱいまで使います。1手30秒ならばそのギリギリまで使うそうです。自明な一手でも時間いっぱいまで使います。自明であろうと、その先を探索して、可能な限り置換表に情報を書きだしておいたほうが、その次の自分の手番で有利に働くからでしょう。

きっと「1手30秒というのが対局条件なのだから、この条件を守りつつ、最も強くするためにはギリギリまで時間を使うのがベストだ」という判断なのだと思います。

ponanzaの将棋倶楽部24での対局は、作者のisseiさんが相当レベルの将棋指しなので、自明な一手で相手を待たせては相手に申し訳ないと思ったのか、姑息だと思ったのかは私は知りませんが、ある意味、潔く思考を短く切り上げているように思いました。

もしかしたら、そういう思考時間の使い方の差が、ponanza R3211、ボンクラーズR3335という差を生み出したのかなぁと思ったりもします。


棋力的には1PCでの比較の場合ですと、ponanzaとボンクラーズではR100もの差はないと思うのですが、人間の能力の限界付近ではわずかな差が雌雄を決するということはありえるのかなとも思います。

例えば、100メートルを12秒で走る陸上選手は世界にたくさんいると思いますが、これがさらに10%速くとなると、ごくわずかになり、さらに10%速くとなるとゼロに近くなるというのと同じ原理です。

Bonanza6やponanzaはもう人類が到達できるかできないかギリギリの領域に存在して、そこから10%か20%の高速化をすると、これに勝ち越せる人類は、いなくなってしまってもおかしくはないです。


ともかく、ボンクラーズをいつまでも将棋倶楽部24でのさばらせておくのも癪に障るので(?)、ひよこ将棋も来年は将棋倶楽部24デビューを果たし、直接対決において、ボンクラーズは1PCではさほど強くないことを証明しようと思っています。いや、逆にボンクラーズは1PCでもめっぽう強いことを証明する結果になるかも知れませんが。

ボンクラーズが(Bonanza6などに比べて)本当に強いのか弱いのかについては、ボンクラーズと同じく、思考エンジンのクラスター並列化に取り組む一人の開発者である私から見て大変興味深いところので、その部分をはっきりさせるために挑戦してみようと思っています。楽しみにお待ちください。(ひよこが将棋倶楽部24に参戦するまでボンクラーズがいてくれるのかはわかりませんが…)


・以下の文章は、追記しました。(2011/12/24 8:00)


某スレで議論の対象になっているようですのでここで名言しておきますが、私が将棋倶楽部24に参戦させるときには、私はBonanzaのfv.binは使いません。また、最終的なひよこ将棋でもfv.binを使うつもりはないです。

くどいようですが、fv.binを週刊ひよこ将棋で使ったのは、評価関数の形をいろいろ実験するためで、その実験すべきいろいろな評価関数の形のうち、fv.binから部分的に値を抽出すれば済むところに関しては、わざわざ棋譜からの学習をさせるのは時間の無駄なのでfv.binから抽出したまでです。実験以外の目的でfv.binを使うつもりは毛頭ありません。

プレマッチは米長会長の惨敗

注目された米長会長の第2手目は62玉でした。62玉は私の予想にもあった手なので「米長会長、定跡外しを相当研究してきたな」と思いました。感想戦によりますとこの手は米長会長がとある有名なコンピューター将棋開発者に教えてもらった秘手だそうです。

ただ、その後の変化は全く教えてもらっていなかったそうで、米長会長が序盤で争点を作ってしまい(74歩〜73桂としたために65歩の仕掛けを与えた)、一方的に攻められていいとこなしに終局しました。


以下に棋譜を貼っておきます。

開始日時:2011/12/21 19:00
棋戦:電脳戦
先手:ボンクラーズ
後手:米長邦雄永世棋聖

▲7六歩 △6二玉 ▲6八飛 △5四歩 ▲3八銀 △4二銀
▲4八玉 △5三銀 ▲3九玉 △6四歩 ▲6六歩 △7二銀
▲9六歩 △6三銀 ▲7七桂 △7四歩 ▲7八銀 △7三桂
▲5八金左 △7二金 ▲4六歩 △9四歩 ▲6五歩 △同 桂
▲同 桂 △同 歩 ▲同 飛 △8四歩 ▲7五歩 △8三金
▲7四歩 △同 金 ▲2五飛 △3二金 ▲7五歩 △6四金
▲7四桂 △同 銀 ▲同 歩 △同 金 ▲6七銀 △6四歩
▲7六銀 △7三金 ▲6五歩 △7四歩 ▲6四歩 △同 銀
▲6五歩 △5三銀 ▲6四銀 △同 銀 ▲同 歩 △同 金
▲9七角 △6三歩 ▲6五銀 △7三銀 ▲4一銀 △3一金
▲2三飛成 △5三玉 ▲6四銀 △同 歩 ▲3二金 △3四銀
▲2二龍 △同 金 ▲7一角 △6三玉 ▲8二角成 △同 銀
▲2二金 △7五歩 ▲3二飛 △9二飛 ▲5二飛成 △7四玉
▲7六歩 △4四角 ▲7二龍 △7三桂 ▲7五歩 △6五玉
▲6七金
まで85手で先手の勝ち

感想戦によりますと、米長会長は第二手目の62玉は自宅のボンクラーズ(米長会長の自宅に設置してある)で20局ぐらいは試してきたそうですが、銀を79に置いたままの77桂は初めてだったとか。

もしかすると米長会長の自宅のボンクラーズと今回のボンクラーズとではマシン構成が違うのかも知れません。今回のボンクラーズのほうは深くまで読めたため、ボンクラーズが何か速攻で仕掛ける手順を見つけたのかなと私は思いました。


コンピューター将棋相手に下手に定跡を外して有利になる変化を見つけても、PCのスペックが上がったりクラスター化で探索量が増えたりしますと、以前通用した変化が通用しなくなることは多々ありまして、通用しないだけならまだしも、コンピューター将棋側に定跡を外した手自体を的確に咎められることもありうるのでしょうね。

そう考えますと、米長会長にわざと探索量の少ない、PC1台分相当の弱いボンクラーズを提供し、米長会長に「コンピューター将棋の弱点見つけたり!!」と思わせておいて、本番では(会場は2600Wまでと言っていたので)8台ぐらいのクラスター化したボンクラーズを用いた場合、ボンクラーズ開発者の伊藤さんが意図せずとも「ボンクラーズが1PCのときに見せた弱点は実は弱点じゃありませんでしたー!」というハニートラップが自然と出来上がっているのかも知れません。


まったくこれでは定跡を外して勝つのも楽ではありませんね。

米長会長 vs ボンクラーズのプレマッチについて

米長邦雄永世棋聖 vs ボンクラーズ プロ棋士対コンピュータ 将棋電王戦」 (2012年1月14日開催)のプレマッチ! 
http://www.shogi.or.jp/topics/2011/12/-vs-201214.html

ニコニコ生放送 将棋電王戦プレマッチ (番組id:lv74364124)
2011/12/21(水) 開場:18:50 開演:19:00
http://live.nicovideo.jp/watch/lv74364124


いよいよ明日ですね。ドワンゴの川上会長の振り駒の結果、ボンクラーズ側が先手で、米長会長は後手のようです。

よく知りませんが、先手は76歩と決まってるんですかね?米長会長の初手(第二手目)を当てるクイズが開催されており、正解者には米長永世棋聖、渡辺竜王、谷川九段の直筆色紙がもらえるらしいです。

米長会長のことですから、お得意の角頭歩(24歩)だと予想する人が大半だと思うのですが、実戦的には92香とかやって、定跡を外して自分だけ穴熊に組むのが一番勝ちやすいのではないですかね。

コンピューター将棋の終盤がR3300相当であったとしても、序盤はいまだにR2000〜R2400程度でしょうから、序盤で定跡を外して人間側有利な状態で終盤に突入すれば十分勝算はあるのではないでしょうか。

角頭歩のほうは乱戦になるので、そういう激しい変化にするとコンピューター将棋相手だと損ですから、少なくとも人間側は穴熊を狙うべきでしょう。

しかし、他にも人間側が有利になりやすい作戦がいくつかあって、定跡を外した上で(初手42玉とか、92飛とかetc..)、例えば、わざと飛車先の歩を切らせて横歩を取らせるというものです。コンピューター将棋側は飛車をひねるのが非常に下手なので金銀で圧迫されて飛車が頓死する可能性が高いです。

これは、Bonanza型の3駒関係ですと飛車の機動性(≒広さ)を正しく評価できないことに起因する問題です。

Bonanza風の評価関数を採用しているソフト(本家Bonanza 6、ボンクラーズ、ponanza)がコンピューター将棋界を席巻している(?)現在、この部分は当分解決されることは無いのでしょうね。


私は米長会長を応援しています。米長会長がプレマッチか本戦かのどちらかで一勝すれば、コンピューター将棋もまだまだなのだという認識に改め、私は来年は本気でコンピューター将棋の開発に取り組みます。

もし、米長会長が二戦とも惨敗するようであれば、来年のひよこ将棋は休みの日にビールでも飲みながら枝豆片手に開発します。


ひよこ将棋の未来は米長会長の双肩にかかっています!米長会長、頑張って!!!

来年のひよこ将棋の予定

・定跡の自動学習機能を搭載する。
・df-pnをやめて独自の詰将棋ルーチンを書き、通常探索でもっと活用する。
・探索を改良する
・評価関数の設計と棋譜からの学習
クラスター化に取り組む
・半自動学習の研究をする
将棋倶楽部24に参戦(対戦は自動化して)

です。

あと、ひよこ将棋のために私が開発したいくつかの技術は論文として発表するに値するものもあると思っているのですが、いまはともかくやることが多すぎてそれどころではありません。まずは納得のいくところまで作り込んでからです。

接待ひよこがR2900を超えていた件

そう言えば、先日、接待ひよこ将棋の素の強さ(接待していないときの強さ)を測定するのお試しで接待なしにしてfloodgateに投入したところ、二週間レーティングでR2907がつきました。

このことを受けてか、2chのコンピューター将棋スレでは「ボナンザファミリーのなかではまだ下位のほう」だの「ボナのパクリソフト」だの、「強いソフトと当たっていない」だの何だの言われております。

私としては、そういうのはどうでも良くて、接待ひよこ将棋がきちんと接待できるかどうかにまず興味があり、そのことを確認するために試しにfloodgateに入れてみただけです。R2500以上あることがわかればそれで私としては結果オーライです。

接待ひよこの素の強さがツツカナより上か下かだとか、ponanzaより上か下かだとか、そんなことには私は全く興味はありません。

そもそも私はfv.bin(Bonanzaの評価関数テーブル)を使い続けるつもりは毛頭なく、接待ひよこ将棋のテストのためにfloodgateに投入しただけなのに、「ボナのパクリソフト」とか言われてもなぁ…というのが正直なところです。

高速化と勝率の変化

いまBonanzaを2倍に高速化するとします。
元のBonanzaと自己対戦させます。

このとき当然、勝率は5割を超えます。

さて、持ち時間は短いときと長いときとでどちらのほうが勝率が良いでしょうか?


例えばプロ棋士であっても100面指しで1手1秒とかですと結構負けます。ときどきプロ棋士が、小学生相手に100面指し(体育館をぐるぐる歩きながら)をやったりしますが、たいてい10局ぐらいは負けます。

要するに実力差がどれだけあろうと考慮時間が0に近づけば近づくほど勝率は5割に近くなります。ポカをしたり、読みが足りなかったり、いろいろ理由はありますが。


コンピューター将棋同士の対戦でも同じことが言えて、実力差があっても短い持ち時間で勝負させるとそれがあまり反映しません。

例えば、2倍速BonanzaBonanzaとを3分切れ負けで勝負させても6割弱ぐらいしか勝ち越しません。しかし10分切れ負けですとおそらく7,8割勝ち越します。(私は簡単にしかテストしていないのでこの数字は不正確かも知れません。ご注意ください。)


要するに、実力差があるなら長い持ち時間のほうが有利というのは言えます。おそらく時間が無限大に近づけば近づくほど、実力が上であるほうの勝率が100%に近づきます。


そう考えますと、3分切れ負けで勝ち越すようにチューンするのと、15分切れ負けで勝ち越すようにチューンするのとでは少し話が違ってきます。

3分切れ負けですとどうせ序盤の立ち上がりは短い持ち時間ではそう簡単に咎められないので、勝ち越すようにチューンするためには終盤力を強化するべきです。読みの量を増やしたり、詰将棋探索をしたり、終盤の手筋を重点的に読むようにしたりです。

一方、15分切れ負けならば、序盤の立ち上がりを咎められたりするので、序盤にもそこそこ時間を使う必要があって、かつ、中盤で挽回不可能なほど押さえこまれたりするので、序・中盤の評価関数の強化・枝刈りの性能upなどに力を注ぐべきです。


しかし15分切れ負けですと1局に20分程度時間がかかるため、何百局も自己対戦させようと思うと非常に時間がかかり、なかなか自己対戦でのチューンが出来ません。ですのでたいていは1手1秒だとかで勝率が下がっていないかを確認することになるのですが、これは大変危険です。そうやってチューンすると知らず知らずのうちに終盤のほうをチューンしていることになって、いざ15分切れ負けで対戦させてみると弱くなっていることが多々あります。

ひよこカルロ将棋は、それでずいぶん痛い目を見ました。しばらく原因がわからずに悩んでいたのですが、大雑把に言うと以上のような原因で弱体化しておりました。