来年5月に開催される世界コンピュータ将棋選手権(WCSC29)では、ライブラリ本家は、(他のライブラリを使用していない限り基本的には)ライブラリ使用とはみなされないらしい。これについて、少し意見を述べたい。
私(やねうら王)は、ライブラリ使用チームとはみなされない。仮に私がいまのやねうら王のGitHubのソースコードのまま、NNUE評価関数を使って出場してもライブラリ使用チームではないのである。
言うまでもなく、NNUE評価関数は、tanuki-チームが開発したもので、私は1行もソースコードを書いていない。将棋ソフトにおいて、探索と評価関数は車輪の両輪である[要出典]と言われるが、その片側を私はノータッチなわけだ。これで、ライブラリ使用チームでないと言うなら、tanuki-チームもライブラリ使用チームではないとみなすべきである。(あるいは、両方のチームをライブラリ使用チームとみなすべきである。)
WCSC29では、ライブラリ使用であるからと言って予選通過の制限などはないようなので、最終的な順位には影響しないと思われる。なので、ライブラリを使用しているからと言って、表彰される/されない以外の不利益があるわけではない。(と思う)
だから、今回はあまり問題にはならないかも知れないが、個人的には何かもやっとする線引きではある。
あと、ライブラリ制度の本来の意義としては、誰が書いても同じような差がつかない部分(指し手生成やら、USIプロトコルの実装やら、Stockfishを真似た探索であるだとか)を用意しておいて、新規の参加者の負担を減らし、もっと本質的な部分で独自性を発揮してもらおうということだと思うのだが(よく知らない)、この「誰が書いても同じ」というのは、そうであるようでいてそうでない。
例えば指し手生成。現状、Aperyもやねうら王も同じぐらいの速度で1つの局面の指し手をするコードとなっている。Aperyの平岡さんなら「指し手生成なんて誰が書いても同じでしょう」と言うと思う。(言っていたと思う) 私もそれには同意する。AVX2を利用して実装されたBitboardとC++のtemplateとを使って実装すればだいたい同じような速度になって差がつかないと思っている。まして、Apery、やねうら王のソースコードを参考にしていい状態であれば同等の速度の出る同等のコードが出来上がるだろう。これは、優秀な新規の開発者にとっては単なる作業であり、優秀な開発者の時間をいたずらに奪ったに過ぎない。こんなことはあってはならない。
しかし、「誰が書いても同じ」「単なる作業」とは考えていない開発者もいる。「(指し手生成を含め)俺は苦労して実装したのに!」と思っている。「畜生、楽しやがって!俺が苦労して実装したのだから、お前たちも同じ苦労をしろ!」と思っている。「俺がうまく実装できていないのだから、お前たちもうまく実装できないだろう。同じだけの苦労をしろ!」と思っている。「ライブラリを使って何が面白いんだ!自分で実装してこそ(以下略)」
私もその気持ちはわからなくはないが、それを他人にぶつけるべきではないと思う。
選手権でもライブラリ使用チームの人が「ライブラリ使ったので速攻で書けました、ウヒョー!」みたいな発言(本人はライブラリによる恩恵を教えてあげているつもり。あるいは自分の作業は大したことがないという謙遜)をして、それがライブラリ不使用のチームの人の地雷を踏み抜いて、のちに個人攻撃につながったりする。あるいは、ライブラリ使用チームとライブラリ不使用チームとの軋轢を生んだりする。ライブラリ使用チームの人たちは、このへん、センシティブな問題があるということを理解した上で発言に気をつけてもらいたいし、ライブラリ不使用のチームの人たちには、もっと寛容な気持ちで彼らの発言を受け入れてもらいたいと思う。
ここまで書いてから思ったのだが、平岡さんや私の言う「誰が書いても同じ」とは、非常に曖昧な言葉である。私は「(自分たちと同じぐらいのレベルのプログラマーならば)誰が書いても同じ」みたいな意味で使っている。これは、「(IT系の一部上場企業で働くレベルの技術者なら)誰が書いても同じ」かも知れないし、「(全体の上位1%に属するような技術者なら)誰が書いても同じ」かも知れない。少なくとも「(平均的なプログラマーなら)誰が書いても同じ」の意味ではないだろうし、平均的なプログラマーから見える風景からはここで述べた意見とは著しく乖離しているかも知れない。読者の方々は、そのへんを考慮した上でこの記事を受け止めていただければと思う。
[追記 2018/11/06 7:45]
本記事に対する平岡さんのツイートを参考のため貼り付けておきます。
トップレベルの将棋ソフトに関して言えば、合法手生成とかで強さの差はほとんど出ないのは現状事実だけれども、合法手生成だけで言っても、探索効率と高速化の為に駒得な駒取りの手だけ先に生成してそれらの手を評価していて、これに成も含めるかどうかとか、設計上の決断ポイントは色々とありまして、
— 平岡 拓也‹‹(´・_・` )/›› (@HiraokaTakuya) November 5, 2018
懸念されていることは今では非常によくわかります。
初参加故多方面への配慮が欠けていた点は深く反省しております。部分的なテストを様々な言語で試してますがよほど時間が取れない限りスクラッチで全部作るのは大変だと思います。一度ライセンス関連で問い合わせた件もその辺の絡みです。
興味が出てきた学生には池さんや山岡さんの書籍やオープンソースのプログラムの部分改造から入ってはどうかと話していますが,これも無責任ですかねぇ。あまり多くのハードルを上げるような行為はしたくないものです。
入門としては評価関数の改造から入るのがお手軽なのではないでしょうか。evaluate()を独自に実装すれば良いだけなので。
やはり独自性出しやすいのが評価関数ですよね。その点やねうら王はブログ解説が多いので手が出しやすいです。
プログラムの独自性とか要らんとグーグルが教えてくれてるんじゃないのかだぜ☆(´~`) 電気で温めたデータと、マシンの使用料金で叩き合おうぜ☆(´~`)
それは、Google以上の資金があればの話なのでは。同じ計算資源で比較するならAlphaZeroのような汎用型のプログラムより、特化型のプログラムのほうが何倍、何十倍も効率のいいプログラムが書けるはずなので(書くのは容易ではないが)、我々はそれをやっている。つまり、この意味においてはAlphaZeroよりずっと先の地点で勝負をしている。
なるほど!汎用型か特化型プログラムの違いですか。それは面白いです。只し、私のようなPCど素人としては、マシンを抜きにして、elmoを圧倒したAlpha zeroと最新やねうら王がガチンコ勝負してどちらに軍配が上がるかについて一番高揚します。
まあ、同じ計算資源で(4コア程度のPCで)の勝負であればこちらが優勢だと思います。ただ、こちらはスレッド数が増えてきたりPCが分散したりしたときにきちんとスケールアウトできてないのでもっと大きな規模だと不利でしょうね…。
補足:因みに先程の勝負に関して、『マシンリソースを同じにしたら勝つ』という回答であった場合は納得する一方で、ややロマンが無く、いつぞやの世界コンピューター選手権で1台ノートPCで登場したBonanzaや、同じく1台PCで、並列化したGPSに競り勝ったツツカナのような『巨人を倒す蟻』のような構図にやねうら王を昇華できているならば大変ワクワクします。
ここに書いてあることを見ると、NNUE型評価関数を使うのにはやねうら王さんのライブラリだけでも良いという事ですか?
現行のWCSCのルール上はそうですね。やねうら王のGitHubからcloneして使うだけであれば、「やねうら王ライブラリ使用」のみの申請で良いです。
あと、ライブラリを使うと1位になっても表彰されないんですか?
私は知りませんが、賞金がもらえる以上、何らかの表彰はあるのでは…。