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

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

ついカッとなってやった。後悔はしていない。

 二駒関係の学習を打ち切って、三駒関係の学習開始。色々コードをいじったんで、デグレしていないのを確認する為に、現在は5五将棋モードで学習中。

 …したら、二駒関係のパラメータ、強くなっていました。

 まぁ、選手権で使うパラメータが確保出来たと思って納得しときます。

 で、上で書いたコード修正です。三駒関係有効でNoisy Networks風のノイズを加えた局面評価をしようとすると、ノイズの初期化に10数秒オーダーで時間がかかります。

 なので、ここは擬似的にノイズをクリアして、パラメータ参照時にノイズが設定されていなかったらその時にノイズを設定する様に修正しました。これで、ノイズ設定の負荷は大分軽減されたはずです。

 問題は擬似的なノイズクリアとオンデマンドでのノイズ設定ですが、ちゃんと動いているか不安が残りますね。まだ時間はあるので、5五将棋モードで検証して、ちゃんと動いている様なら本将棋モードでの学習を開始する予定です。

ここはじっと我慢の一手

 今朝からsspとスパーリングしてたバージョンのパラメータですが、昨夜のやつより誤差程度弱くなっています。

 ただ、まだ頭打ちと決まった訳では無いので、もうちょっと学習継続させてみます。今の感じだと、4月に入ってから三駒関係有効で学習開始しても何とかなりそうな印象なんで。

 ちなみに、現時点での最強パラメータは対sspの勝率が69.4%。まだ弱っちいですが、昨年の選手権版よりはだいぶマシになってます。

もうちょっと様子見が最善手かなぁ

 現在ssp相手に32勝23敗。頭打ちかと思っていましたが、まだ伸びるかもしれません。

 という訳で、当面は現在の学習を継続する予定。

 三駒関係有効での学習ルーチンの修正は完了して現在テスト中なんで、伸びなくなったらすぐに切り替えて学習させるつもりです。

VS ssp(本将棋モード)

 24時間ほど走らせたパラメータで149勝161敗、勝率48.1%。去年の選手権バージョンよりは強くなってます。

 ただ、どうもそろそろ頭打ち感があるので、早々に三駒関係有効にして学習出来る様にしようと思います。

あ、ひょっとしたら本将棋モードで三駒関係の学習可能かも

 「専有メモリ量の関係で三駒関係は無理ぽ」って書いた覚えがありますが、データ構造を見直せば行けそうな気がして来ました。

 まず、現在の実装だと評価関数内に「全特徴の平均(double型変数1個)と標準偏差(double型変数16個)」を保存しています*1

 で、この評価関数のインスタンスを、現在学習中のもの1個と過去のエース評価関数20個*2を128GBしか無いメモリに載せる関係上、KKP/KPPは無理だと判断していました。

 ただ、過去のエースに関しては標準偏差を保存しとく必要が無いので、ここをザクッと減らしたらKKP/KPP有りでもメモリに載るかも。

 …ただ、二駒関係の方が収束は速いと思うので、まずはこのまま学習を進めて、頭打ちになったら三駒関係有効にして再度ゼロから再開する事にします。

*1:16は学習用マシンの論理コア数

*2:強かった評価関数

Intelさん、PARROTの実装はよ

 https://pc.watch.impress.co.jp/docs/2004/1109/kaigai133.htm

 PC Watchの過去ログをつらつら眺めていたら、PARROT(Power AwaReness thRough selective dynamically Optimized Traces)という懐かしい単語が。もう15年前かぁ。

 私が理解した範囲だと、プログラムのホットコード*1に対して、ホットコードの実行と並行してガリガリ最適化してやって性能を上げる技術だったと思います。

 んで、現在のマルチコアCPUでは各コアにPARROTのハードウェアを実装する必要は無くて、1つのダイに1個の最適化を行うモジュールが有れば事足りると思うんで、実装すれば十分ペイすると思うんですがねぇ。

 仮に「1つのコアのサイズ」と「PARROTモジュールのサイズ」が同一だと仮定すると、コアを1個減らしてPARROTモジュールを積めば、現行のCPUと同じダイサイズを維持出来ます。

 で、その際の性能ですが、PARROTによる性能向上率を20%と仮定すると、「7コア+PARROTモジュール」で「8.4コア分の性能」、「15コア+PARROTモジュール」で「18コア分の性能」、「31コア+PARROTモジュール」で「37.2コア分の性能」と、コア数が増えるに連れメリットがどんどん大きくなります。

 こっから先は個人的な話になりますが、コンピュータ将棋の学習・対局では同じコードを全てのコアで処理しますので、PARROTによる効果は非常に高いんじゃないかと想像しています。

 という訳で、最近のIntelはつまずいている感が強いんで、起死回生の一手としてPARROTの実装はよ! と言っておきます。

*1:頻繁に実行され、性能に影響が大きいコード

本将棋モード、学習開始

 とりあえず最適っぽいメタパラメータは見付かったんで、本将棋モードの学習開始。

 スレッドのアフィニティマスク設定時に極力同じ物理コアに割り当てない様にとか、セコい改良をチョロっとだけして、後は5五将棋モードそのままです。

 ただ、評価項目に関してはメモリ専有量の関係で駒割・PPT・王将の移動可能範囲に限定しました。

 後1ヶ月チョイで学習を終わらせないといけないんですが、可能かなぁ… 正直、不安。