今年のSDT(将棋電王トーナメント)の開催日が発表になりましたね。11月の11,12日だそうです。参加予定の皆さんの開発は捗っているでしょうか?やねうら王はまだ1㍉も強くなってませんが。
将棋ソフトに興味のあるプログラマの方から「将棋ソフトばっかりずっといじってて飽きないのか」という質問があったのでこの場でお答えしますが、毎年トレンドって変わるんですよね。
SDT1(第一回将棋電王トーナメント)からやねうら王の変遷をざっと振り返ってみましょう。
SDT1 .. Bonanzaの高速化
高速化と言っても並列化もさほどする余地がないので、SSE2/4の命令でガシガシ書いて速くなるわけでもなく、アルゴリズム的に等価な変換を利用して計算量を減らすとという感じでした。コメントがほとんど書かれていないBonanzaのソースコードを解読する作業とパズルを解くような作業の繰り返しでした。ずいぶん頭の体操になったような。
SDT2 .. Stockfish化
探索部をStockfishにして丸ごと書き直し。この作業は、アーケードゲームをプレーステーションに移植する、みたいな感じの移植作業に近いですね。Stockfish化したおかげで、ソースコードはずいぶんシンプルになりました。
SDT3 .. 機械学習
Bonanzaメソッドによる機械学習、そして、KPP/KPA次元下げ。機械学習について色んな論文を読んだりした時期でした。また、この次元下げのコードが本当、腕力が必要なコードで大変苦労しました。
SDT4 .. 大規模学習
教師局面を50億ほど生成してそこからの評価関数を学習させました。連続自己対戦フレームワークの作成、Jenkinsを導入してjob化するなどインフラにずいぶん時間がかかりました。『技巧』の開発姿勢に大いに影響を受けました。
SDT5 .. 新たな評価関数の設計
そして今回のSDT5のトレンドは言うまでもなく、新たな評価関数の設計です。KPPT型評価関数が限界を迎えているので、新たな評価関数を設計したチームのみが上位に残れます。
新たな評価関数と言うとすぐに(3駒関係の次だから)「4駒関係だろ?」と思われるかも知れませんが、4駒関係は3駒関係に比べると12倍ぐらいの計算量が必要で、現在の3駒関係でも評価関数に40%程度のCPU時間を消費しています。それが12倍も時間がかかるようになるとnpsは1/5以下に低下します。レーティングで言うとR500程度のダウン。4駒にしてそれ以上のリターンがないと結果的に弱くなります。まあ、そもそもPCの搭載メモリが128GBあっても4駒関係は収まりませんしね…。
ともかく、SDT1〜4をざっと振り返り、SDT5の展望を書いてみました。こうして見てみると、毎回トレンドが違うので、力を入れている分野が異なるんですよね。来年のトレンドは探索部かも知れませんし、再来年のトレンドは定跡部やDNNかも知れません。
そう考えると、コンピューター将棋で長年にわたり上位の成績を残すには、このように毎年激しく移り変わるトレンドに適応していく能力が問われているのかも知れませんね。「将棋ソフトを作って5年目になります」とは言っても、毎年やっている内容(競技種目)が異なる感じです。それだけに、私としては、やっていて飽きないのですが、このトレンドについていけなくなったチームは上位から脱落していくのでしょうね。