nnue-pytorchのメモその2

時間が経つのも早いもので前回から二ヶ月経過していた。

bleu48.hatenablog.com

 

そもそもnnue-pytorchに関しては初期の頃から少し弄っていたが2018年段階の経験から後回しにする課題との認識を持っていた。

nnue-pytorchに関して優れている2点を挙げるが,まずは前回も述べたデータローダ部分が改良されている点が実用的に素晴らしい。2018年時点の私はpythonクラッチで書いていたので恐らくそこがボトルネックGPUのパフォーマンスをあまり有効に利用できていなかった。

もう1点がネットワーク構造である。

前回ネタにしたnnue-pytorchのモデル1024x2-8-96と中細りのニューラルネットワーク構造である。一般的には中間層で失われた情報量は出力層で補われることがないので使われることは少ないが,本モデルの出力は機械学習における分類ではなく回帰の課題である。出力に非線形性が強く理想的な出力を得るには出力層の一段階前でこう言った処理でフィットさせる手法は例外的に存在する。

 

ということで将棋AI界隈に新風が吹き込まれた昨今である。

特に反応の早い開発者は直近の電竜戦TSEC5に採用されており一大勢力になろうとしている。

第5回世界将棋AI電竜戦TSEC指定局面戦 参加者一覧

 

これも野田さんがチェス界にNNUEを持ち込んで,チェス界で育った技術を逆輸入したお陰である。この辺も動画中継中にコメント入れておいた。知る人ぞ知るマニアックな話であるが,今年の選手権優勝など含め技術的優位との印象が大きいだろう。

 

で,私の方はTSEC5に関して前回作成した習作としてnn14というのでエントリーした。モデル形は1024x2-8-96と試作品のままというかきちんと学習できるようになった2つ目か3つ目である。TSEC5においても意外に強かったので公開しておいたが,反響を聞く限り所謂トップクラスにはあるみたいである。

 

nnue-pytorch自体は学習器でしかないので推論はやねうら王などに頼ることになるのだが,モデル型を変更するなどで連動的にビルドする仕組みがないので半手動でテストすることになっている。TSEC5でも様々なモデル型がみられるがそのうち流行りは落ち着くのだろうか。

ちなみに可変サイズにするとコンパイル時最適化が進まないのか実行速度が随分落ちる。JITのような仕組みが必要なのだろう。

 

nnueバイナリには型を表現する文字列を埋め込むことになっているのだがこれが固定値なので連動して変更するようにしておいた。NNUEの生みの親である那須さんが悲しまないくらいの対応はしたいものである。

 

 

--

追記:

nn14が初手76歩の率が高く,矢倉・雁木を選択する率が高い。

そのために初期局面から使うと千日手が多かったりするなど先手の優位をうまく生かせていないなど判明した。Kristallweizenのときもそうであるが序盤教師データをあまり入れていないとそういう感じになるのだが,純粋な対局ではなく解析などで使う分にはこれらどれを使っても皆そこそこ優秀なので大差ない認識となるようだ。

序盤の定跡を少し入れると勝率が稼げる話は随分昔に散々やったので再度する必要はないだろう。

 

--

追記2:

nn14と検索するとオレンジ色の鉄道が沢山出てくる。

単にうちの管理通し番号なので特に考えていなかった。

検索性の低い命名であることは申し訳ない。

他から提案頂いているネーミングストックから使うべきだったと反省している。