GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

今年の世界コンピュータ将棋選手権は参加見送ります

 当面は5五将棋の方に注力したいので、選手権は参加見送り。秋のGPW杯コンピュータ5五将棋大会に向けて頑張ります!

 それから、学習ルーチンの分散コンピューティング化ですが、完全に暗礁に乗り上げちゃいました。困りました…

障壁が固い…(分散コンピューティング化、続報)

 クライアント側は大体実装完了して、さ~サーバとの通信・データ転送周りを作るぞーーー!! と思ってたんですが、技術的・セキュリティ的な大問題が発生・・・

 まず検討したのが自宅サーバを公開して、クライアント側と直にやり取りする方法。ただ、公開するのは諸事情により不可能と判明。

 んで、それならGoogle Drive経由でファイル転送するか…と思ってたら、認証情報をクライアントソフトと一緒に配布する必要があると判明。(←当たり前だ!)

 となると、クライアントソフトをクラッカーにいじられると、認証情報をすっぽ抜かれて私のGoogle Driveの中身をいじり放題。これは困る。

 という訳で、このままだと分散コンピューティング化は見送り、って可能性も出てきました。

 他に良い案があれば続行しますが、現状では先行き不透明です。

スターライトブレイカー カウントダウン中

 まず、クライアントGUIJavaで作成)から学習エンジン(C++)を起動して、基本的な情報のやり取り(Exeのバージョン情報をJava側に通知して、Javaからプロセス終了指示を出す)所までは出来ました。

 …エンジン側のstderrを読み飛ばす処理忘れてて、「何故か」停止指示に反応しないって事は有りましたが。てか、何回目よ、このバグ _| ̄|○

 という訳で、現状GUIはこんな感じに仕上がりました。

 とりあえず、今週末にはクライアント側のJava/C++部分を完成させて、来週はサーバ側の実装に移る予定。

 ちなみにサーバはCUIで行く予定なので、今よりは楽になる…はずです。どうせ自分しか使わないんで、凝ったGUI作っても無駄ですしね。

まだちゃんと書いてなかったので、今年の大会参加予定

 3月のUEC杯と5月のWCSC30は参加見送って、秋にあるはずのGPW杯コンピュータ5五将棋大会を目標に開発中です。

 昨年のUEC杯後にも書きましたが、棋力向上は評価関数の精度向上と探索ルーチンの改良の二本柱で行く予定。

 評価関数の方は、現在進行中の分散コンピューティング化で何とかなってくれれば嬉しいです。

 探索ルーチンに関しては現状ではノープラン。ABC探索とか実現確率探索とかに手を出してみたくはあるんですが、過去にどちらも実装失敗しているので、他の手を考える必要があるかもしれません。

学習ルーチンの分散コンピューティング化に必要な事

  • サーバ・クライアントのプログラムの修正・実装
    • サーバ(Java:通信周りを実装)
    • サーバ(C++:パラメータ更新周りを修正)
    • クライアント(JavaGUIと通信周りを実装)
    • クライアント(C++:自己対局&勾配計算周りを修正)
  • ランキングのデータ集計&HTML化プログラムの実装
  • クライアントでスレッド数の上限を撤廃する&必要なオブジェクトをスレッド数分だけ生成する様に修正(現在は最大スレッド数をハードコーディングしているので)
  • レンタルサーバの選定・契約
  • インストールマニュアル等のドキュメント作成

「強くてニューゲーム」の可能性を検証してみた@コンピュータ将棋界

 面白そうな話題なので、細々と検証してみる事にしました。
 

1990年編

www.eonet.ne.jp

 1990年のPCは、上記サイトによると高々20MHz程のCPUと2MB程のRAMしか無いので、現状のコンピュータ将棋*1を対局させる事すら無理そうです。

 ましてや、機械学習で評価関数パラメータを学習するのは、夢のまた夢かと思います。

 この時代だと、「現在の知識は全く活かせない」という可能性が非常に高いです。

2000年編

ハードウェア構成

 確か、IntelAMDが「1GHzレース」を展開中だった時代だと記憶しています。あと、この頃はコンシューマ向けのPentium II/IIIでもデュアルCPU構成が可能だったので、安価に構築可能でした。

 コンシューマ向けですと、2020年2月にRyzen Threadripper 3990X(64コア128スレッド・ベースクロック2.9GHz)が出る予定ですので、CPUパワーは現状から2桁程度落ちる計算でしょうか。

 メモリに関しては128MBのSDRAMが売っていた記憶があるので、512MB位の容量は個人でも確保出来そうな感じです。三駒関係だと「対局は可能だけど、学習するのは無理そう」かと思います。

探索ルーチン

 私がコンピュータ将棋を実装し始める前なので書籍等から得た知識ですが、この頃は選択的探索が主流だった様です。

 ただし、激指さんが実現確率探索を実装したのが2001年選手権バージョンからで、2002年には優勝していますので、実現確率探索に関する知識は活かせるかと思います。「劇的に強くなる」かは分かりませんが、数年のアドバンテージは得られそうですね。

 ついでに、当初の実現確率探索は「指し手をグループに分類して、グループごとの遷移確率を採用する」方式だったのが、後に「指し手の遷移確率を、ロジスティック回帰を用いて学習する」様に変更されたので、変更後の方式を実装すれば当時のソフトと比較して強くなる可能性は高いかもしれません。

評価関数

 上記の通り、三駒関係の評価関数は主記憶の容量の問題で学習不可能だと思います。なので、「任意の二駒関係」が上限かと思います。

 ただ、二駒関係ならメモリ専有量が減る&学習の収束が速くなるので、2000年でも実用レベルかもしれません。

機械学習

 Bonanza Methodならある程度容易に並列化出来るので、ハイエンドPCを多数並べて学習させれば実用可能範囲かと思います。あるいは、1台のPCで学習を回して、収束するまでじっくり数ヶ月~1年程度待つとか。(参考までに、Bonanzaさんの選手権デビューは2006年。)

 自己対局等での強化学習は、Bonanza Method以上にマシンパワーを要求します。多分、同じ棋力になるまでに必要な計算量は1~2桁は上がるんじゃないかという印象です。なので、こっちは「知識はあっても、ハードウェアの制限で実現不可能」かと。

並列探索&合議

 当時のハイエンドPCでも、高々2コア2スレッド構成ですので、並列探索の場合にLazySMPはあまり有効に動かなそうです。YBWCで十分かと。

 合議に関しては、単にLAN等で接続された複数のPCがあればOKなので、2000年当時でも実用可能な技術です。文殊さん(2009年選手権デビュー)方式の多数決合議よりも、後で提案された楽観的合議の方がクライアント数を増やした場合の伸びしろが大きい*2ので、こっちを採用すれば10年程度のアドバンテージは有るかと。

結論:わたしのかんがえたさいきょうのコンピュータ将棋ぷろぐらむ@2000年

 ここではPentim IIIデュアルCPU程度のハードウェア*3を前提に考えてみます。

  1. 探索ルーチン:ロジスティック回帰を用いた実現確率探索。YBWCで並列化する。
  2. 評価関数:二駒関係ベース。
  3. 学習ルーチン:Bonanza Method。

 具体的にどの程度強くなるかですが、「ソフトウェアの技術革新によって、年間200程度Eloレーティングが向上する」と仮定すると、5~10年程度のアドバンテージが有るので、+1000~2000程の向上になるはずです。

 ついでに、コストパフォーマンスとかは一切考慮せず、金に物を言わせてハードウェアを揃えた場合を考えてみます。具体的には、上記のPCを64台揃えた場合。1台30万円なら2000万円前後ですね。

 この場合、楽観的合議を実装して更にレーティングが+数百、と言った所でしょうか。夢は有るんですが、コスパ的には微妙ですね。

 まぁ、当時のハイエンドPC1台でも当時の最強ソフトに対してレーティング+1000は固いと思うので、選手権に出れば無双出来るかと思われます。

*1:例えばBonanza型の三駒関係の評価関数を仮定しています

*2:確か、32クライアントか64クライアントまでは棋力が向上する、って論文があった筈

*3:当時、個人で購入可能な上限

学習ルーチンの分散コンピューティング化を検討中

 GA将?の学習ルーチンは、ミニバッチサイズ(1回のパラメータ更新に使用する、自己対局の棋譜の数)を大きくすると、学習が安定する傾向があります。

 ただ、私のPC(Core i7 5960X)では、マシンパワーの関係上ミニバッチサイズは500~1000程度が限界です。

 という訳で、マシンパワーを提供してくださる方がみえれば、その力をお借りしてミニバッチサイズを2~3桁上げれないかと検討中です。

 当面は5五将棋モードで学習する予定ですが、将来的には本将棋でも同様の事をしてみようと検討しています。

 動作環境は下記の通りです。

  • OS:Windows 8.1/10 x64(エディション問わず)
  • CPU:POPCNT命令をサポートしたCPU(Intel製であれば、Core iシリーズ以降)
  • RAM:4GB以上(実行するスレッド数に応じて増加します。)
  • その他:Javaの実行環境(JRE*1のインストール必須)

 学習の流れとしては、下記の様な感じで考えています。

  1. 初期パラメータファイルを、各クライアントにネットワーク経由で配布。
  2. 10分程度、各クライアントが自己対局を実施。
  3. 全クライアントから、パラメータ更新に必要なデータをサーバに送付。
  4. サーバ上でパラメータ更新。
  5. 全クライアントに、最新のパラメータファイルを配布。
  6. 2.に戻る。

 金銭的なお礼は出来ませんが、5.で配布したパラメータファイルはユーザ様がGA将?相手に対局する為に使用可能にしてはどうかと思います。(UEC杯で上位入賞が狙えそうなパラメータファイルを、早期に入手可能になります。)

 また、ユーザ様の提供してくださったマシンパワーを、GA将?のウェブサイトでランキング形式で公開してみようと検討中です。(こちらに関しては、現在検討中ですので、場合によっては非公開とさせて頂く可能性もあります。)

 https://twitter.com/MoriokaYuichi/status/1213718758335795200 でアンケート実施中です。ご興味がありましたら、投票をお願いします m(_,_)m

*1:フリーソフトで有ります