合議アルゴリズムはインチキだ


昨年の10月11日に開催された清水市代女流王将とコンピュータ将棋「あから2010」との対局は記憶に新しい。


あから2010は、169台676coreを使った合議によるコンピュータ将棋マシンだった。


文殊」の論文*1が発表されたときから、私は「合議は全く意味がないし、普通にクラスター並列化したほうが強い」と主張し続けてきた。


「1台のマシンと、そのマシンを3台使って合議させたものとを対局させて、3台合議のほうが有意に勝ち越したから合議は意味がある」みたいな結論を出すのはおかしい。3台のマシンで普通にクラスター並列化したものと、3台で合議したものとをなぜ真っ先に比較しないのか?


3台のマシンで単純にクラスター並列化したものより3台のマシンで合議したもののほうが圧倒的に弱ければそれは単にマシンリソースの無駄遣いに他ならないし、その比較すらせずに169台のマシン用意しましたって馬鹿じゃないの。大学予算の無駄遣いにもほどがある。


合議にする意味なんか全くないのに、わざわざ合議にして合議マシンの1ソフトとして参加することによって清水市代女流王将に勝ったソフトとして商品の宣伝文句に使いたいだけなんじゃないの?


例えば、YSS(商品名AI将棋)なんか、2010年/2011年の世界コンピュータ将棋大会では8位でフリーのGPS将棋やBonanzaよりも順位が下なのに、あから2010の合議マシンの1ソフトとして参加してその結果、AI将棋18に次のように宣伝文句に使ってある。


AI将棋 Version 18 for Windows


とんでもない詐術だ。


合議にする意味が全くない、その最たるものがあから1/100だ。
あから1/100というのはあからを1台のマシンにしたものだ。


*2


このあから1/100がどれくらい弱いのか、どれくらい意味のないソフト構成なのかを以下に詳しく書く。



来たる7月24日に「電気通信大学エンターテイメントと認知科学研究ステーション特別企画」として「戦略的なアマトップ合議はコンピュータ将棋に勝てるか」というイベントが電通大で開催される。*3


電通大と言えば、コンピュータ将棋の合議アルゴリズムを最初に発表した伊藤毅志さん*4の本拠地だ。わざわざアマトップのほうも“合議”にして、コンピュータ将棋のほうもあから1/100という“合議”にして、「合議と合議の対決」みたいな試合を組みたいという意図が伺える。


そもそも今回のコンピュータ将棋大会で優勝したボンクラーズを差し置いて、なぜあから1/100みたいなしょーもない、強くもない合議マシンを持ってくるのか。


ちなみにボンクラーズのほうには電通大側から出演依頼をしておいて、出演依頼の取り消しの連絡があったそうだ。


*5


電通大側がボンクラーズの出演を取り消しておきながら、電通大側のアナウンスはこれだ。


*6


「*「ボンクラーズ」は事情により、出場できなくなりました。」じゃなくて、お前のところの都合でボンクラーズを出場できなくしてるんだろうが。ボケが!と言う感じなのだが。



それでは、あから1/100の強さについて調べて行こう。


まずマシン構成は「なお、ハードウエアは、Intel Xeon W3680一台で構成。」と告知されている*7ので、2011年1月22日(土)東京八重洲日東紡ビルにて開催された、「勝又教授の『コンピュータ将棋最前線』〜クラスタシステムと“あから2010”の思考〜」*8のときのものと同じと思われる。すなわち、W3680のdualではなくsingle。*9


このあから1/100らしきマシン(Akara100_expt)がテストのためいまfloodgateに参戦しているのでそのレーティングを確認しておこう。


*10


赤枠で囲った4つのソフトを比較してみよう。


ponanza(ponanza、Corei7 990xEEだと思われる) 2885
i72600bonanza6.0(Corei7 2600で動作させたBonanza6.0) 2798
Gekisashi_Xeon-X5482_1c(激指、Xeon-X5482の1コア縛り) 2692
Akara100_expt(あから1/100だと思われる) 2666


あから1/100はCorei7 2600(←W3680の数分の1の値段)より100以上レーティングが低い。ひどいことに激指1コアよりもまだ下。(これはたまたまだと思うが。) 大会(第21回世界コンピュータ将棋選手権)で5位だったponanzaより200点以上レーティングが低い。


もはや、あから1/100の惨敗と言っても過言ではない。これがあから1/100の実力だ。これがマルチコアマシンでの合議の性能だ。マルチコアマシンでは合議が何の意味もない、単なるリソースの無駄遣いであることが証明された。


少なくとも大会で優勝したボンクラーズを差し置いて出すべきマシンじゃ決してない。


電通大はそこまでしてインチキ“合議”に華を持たせたいのか。“合議アルゴリズム”に意味があると世間に思わせたいのか。こんなのまともな研究者のやるこっちゃねーわ。


■ 2011/07/18 19:45追記


コメント欄でいただいたコメントに返信。

(3台クラスター)×3の合議でさらに強くなればそれで良いのだから。


それならば「(3台クラスター)×3の合議」と「9台のクラスター」との性能比較をまずすべきだと思うのですよ。


そのためにも合議がどの程度スケールアウトするかだとか、合議でどの程度性能がアップするかという正確な数値が示されていないと、「9台のクラスター」をわざわざやめて(3台でクラスター化できているなら9台でクラスター化するのは追加プログラムは一切なしで可能なのに)、「(3台クラスター)×3の合議」(この場合、合議の処理をするプログラムが追加で必要になります)にしようだなんて誰も思わないのです。


そして、「9台のクラスター」から「(3台クラスター)×3の合議」にすると間違いなく性能が落ちます。それで性能が落ちないなら、合議に意味があるのですが、性能が落ちるので9台ではまったく合議にするメリットが無いのです。


無論、もっと台数が多いクラスター化だと性能が頭打ちになるということはあるかも知れません。


それならなおさら、あから2010のとき、どうして169台での合議と169台での単純なクラスター化との性能比較をしなかったのでしょう。自己対戦で一晩寝かせるだけでも良かったのです。


「台数が多い場合、単純なクラスター化だとオーバーヘッドが大きく、うまくやらないと頭打ちになるので、32台以上で頭打ちにならない手段を我々は持っておらず、それゆえ169台ならば32台×4ソフトで合議することに意味がある」ともしそういう主張をされるのであれば、私はその主張自体はよくわかりますし納得もできます。


その場合は、「32台以上でも頭打ちにならないクラスター化をみんなで研究しましょうね」という話にはなると思います。
また、この「32台」という部分はプログラムによって異なっていて、もっと早い段階(少ない台数)で頭打ちになるコンピュータ将棋ソフトもあるでしょう。「そういうコンピュータ将棋ソフトにとって、合議は朗報ですよ」と言われるならば、その話も私にはよくわかります。


要するに、そういった部分を評価するプロセスが抜きにして、あから2010の場合、いきなり合議でマシン編成して最終的な性能評価もせずに終わっているところが「これはまともな研究じゃないな」と感じるところです。


そのツケがあから1/100で、「清水市代女流王将に勝ったあから2010の1/100の性能」というのは興行的には大変面白いのですが、実際は普通に1台のマシンでBonanza6.0を動かすよりはるかに弱いわけで、それを強いかのように見せて観客を騙すやりかたには疑問を持たざるを得ません。


例えば、今回のイベントの告知には次のように書かれています。
*11


この流れですと、まるであから1/100が将棋倶楽部24で3200点か、それ以上あるかのように錯覚します。言うまでもなく将棋倶楽部24で3200点を記録したのはponanzaです。*12 *13


ponanzaとあから1/100とは上で書いたfloodgateの成績からわかるように200点以上離されていて、大差です。つまりあから1/100は将棋倶楽部24で3000点に満たないと思われます。無論、アマトップでも将棋倶楽部24では2400点〜3000点あたりに分布しており[要出典]、あから1/100でもいい勝負は出来るのは間違いないので、問題ないと言えば問題ないのですが、もう少し正確な情報を書いて欲しいなぁと思うところです。




■ 2011/07/18 20:30追記


はてブに返信。

filinion 興味深く読んだが、事実この通りなら、なぜ合議アルゴリズムを使いたがる人がいるんだろう。違う立場から解説してくれる人はいないかしら。…なるべく素人向けに。


お呼びでないでしょうけど、それでは私がはりきって解説させてもらいます。(笑)



合議の優れている点は、クラスター化で頭打ちになったときに、そこプラスαの伸び代を得られる(かも知れない)という点にあります。


ソフトによって何台のクラスター化で頭打ちになるかは異なります。大規模クラスターでうまくスケールアウトさせるのは大変難しいのです。なぜ難しいかというと、マシンが異なりますから、メモリを共有できません。メモリを共有できないということは別のマシンで詰みだとわかっている局面でも、別のマシンではそのことを認識できないがために、再度詰むかどうか検討する必要があったりするわけです。1台のマシン内ならばメモリを共有しているので、この問題を基本的には回避できます。


クラスター間でメモリをある程度共有すれば良いのですが、いまのネットワーク帯域的にそれは厳しく、それでも、まあ、部分的にでも重要な局面の結論だけでも共有しあうことが出来ればもう少し探索効率は良くなると思われますが、そのようなプログラムは現実的には大変難しく、いまのところ誰も出来ていません。


そこで現状は、たとえば次のような通信をしています。


「俺、36台目のマシンだけど、いま与えられた局面から3三角成→同桂の局面が詰むかどうか知りたいんだけど、誰か手が空いてるやつ、それ調べて結果くれない?詰むかどうかがわからなければその局面の評価値(形勢を判断した値)でもいいからさ。」
「わかった、俺が調べよう。俺は、39台目のマシンだ。」


そこで、台数が増えてくるとどうしても同じ局面について調べているマシンが増えてきて、ネットワークの通信のためのオーバーヘッドが上回り、頭打ちになるのです。


合議ではそれを打開できる可能性があります。


ただし、そのためにも単純なクラスター化でどのへんで頭打ちになるのかだとか、単純なクラスター化と比べて少ない台数では性能的にどうなのかだとか、そういう部分をきちんと検証せずに、単純なクラスター化を置き換えるものとして合議を提唱してはならないのです。


あくまで単純なクラスター化が最優先にあって、そこにさらに伸び代を与えるための方法としてしか合議は存在できないのです。



もう一つ合議の大きな利点として耐障害性に優れているというのがあります。


例えば上の例で「39台目のマシン」が調べると言ったっきり、結果を返さない場合はどうでしょう?36台目のマシンはある程度時間が経過して39台目のマシンが結果を返さない(タイムアウト)ならば、39台目のマシンに見切りをつける必要があります。


この処理をうまく書くのは結構難しいのです。なぜなら、その局面を調べるのにどれくらいの時間を要するかは事前にわからないからです。タイムアウト時間を長めに設定すると、39台目のマシンが壊れていると毎回タイムアウトまで待たされることになり、効率が悪いです。またタイムアウト時間を短めに設定すると39台目のマシンはまだその局面について調べている最中かも知れません。


とても熟練したプログラマならば、こういう問題を回避して、うまくクラスター並列化するための処理を書けると私は思うのですが、かなりの難度であることは違いありません。


その点、合議ならば、一部のマシンが壊れていて結果を返さなくとも、多数決をとるときに票が少なくなるだけで、将棋が指せなくなるだとか決定的に弱くなるだとかそういうことは無いというのがあります。



あと、クラスター並列化に対応させるのはそこそこ面倒だということです。例えばクラスター並列化に対応していない他人の作ったコンピュータ将棋ソフトをクラスター化しようと思うとそのプログラムを解析して、理解して、プログラムを書き足す必要があります。


ところが、合議であれば、多数決をとるだけですみますから、そのプログラム自体には一切手を加える必要は無いのです。


つまり、合議化は簡単で、お手軽に出来ます。1台のときよりそれでわずかでも性能アップするのであればいいという考え方もできます。


そういう人にとっては合議はとても意味があるでしょう。


そして、合議で複数のソフトの多数決にすれば、ソフトの暴発(たとえばBonanzaによくありがちな角切りからの無理攻め)を抑制することが出来ます。ただしレーティングを絶対的な指標としてみなすなら、1台のマシンの場合ですと合議によってレーティングがあがっていない以上、暴発を防げるメリットより読みの絶対量が減ることによるデメリットのほうがはるかに上回るということにはなりそうです。しかし暴発が減る分、格下の相手に対する安定度(≒勝率)は増すかも知れません。このへんは実際に検証すべきでしょう。



とまあ、合議アルゴリズムがインチキであることを暴くはずの記事で、合議のメリットを書きまくってしまいましたが、これでこの記事は公平で学術的にも価値のある良記事に近づいたでありましょうか…。