S.Lightweight-EFについて

第32回世界コンピュータ将棋選手権が終わりましたが、そちらに出場していた「S.Lightweight-EF」について記載します。
どちらにしろ後からアピール文書としても出し直しますが、主にそちらには書かない部分について言及しようと思います。


■概要
dlshogiをベースとしたライブラリ勢のソフトで、Lightweightシリーズの最新版にあたります。
コンセプトは「ローカルPC環境でもCPU系/GPU系に限らず、高級スリッパやつよつよインスタンス勢と戦うこと」であり、末尾のEFはモデルに採用しているEfficientNetが由来です。



■第2回電竜戦時からの改良点とdlshogi本家との差異
大きく①②③④⑤の特徴がありますが、本家との差異は以下①②です。
①モデルアーキテクチャ
本家ではResNetを使っていますが、S.Lightweight-EFでは「EfficientNet」にて構築し1から学習しています。
また、本モデルは第2回電竜戦に出場した「Lightweight-EF」のモデルの改良版にあたるため、頭に「スーパー」を意味する「S」をつけています。(イギリス重戦車のS.Conqueror的な)
※ただしEfficientNet単体ではなく、入力部に7層のResidual blockを入れていて、そこから更にEfficientNetに接続しています

②探索部
dlshogiでは、PUCTアルゴリズムに従って探索木を降りていく際、現在ノードの各子ノードに対してUCB値の計算を行い、
UCB値が最大の子ノードを選択しています。(二番絞りはこのときLCB値を利用しているとのこと)
ただ、この処理は子ノードの数だけUCB値計算を繰り返すため、有望な手以外はこのUCB値計算を行わないことで探索を効率化・高速化できるのではと考えました。
事前にいろいろな局面でのbestmoveと各子ノードのPolicy値を調査した上で閾値を設定し、
その閾値を下回るPolicyを示した子ノードはUCB値計算自体をスキップさせています。
この手法を一ヶ月前に開催されたさくらリーグに出場させた「S.Lightweight-AP」で試しており、白ビールに続いてB級2位と感触は得られていたものの、
今回の一次予選の結果があまりふるわなかったことから二次予選以降はdlshogi本家の形に戻しました。

③KLDを使った時間制御
選手権前にdlshogiが検証していたKLDによる時間制御を取り込んでいます。
ただし、これも②と同じく一次予選にのみ使用しています。
中盤に入る前に時間を使いすぎてしまうことと、NPSが75%程度に落ち込んでしまうため、
二次予選では取り除きました。

④マルチストリーム対応
こちらを参照

⑤入力特徴量作成の改善
こちらを参照

※上記②③が功を奏したのか、2次予選の調子は良かったです。


■学習
以下、①②③④⑤を利用しました。その大部分をこちらからお借りしています。(①②④はこちらから利用しました)
①floodgateから抽出した棋譜データ
②gctの自己対局データ(selfplay_gct-001.hcpeから)
③dlshogi本の付属データ(dlshogi_with_gct-01.hcpeから)
④水匠による入玉データ(nyugyoku)
⑤S.Lightweight-EFによる自己対局データ
※本日の対局でQhapaqさんとの会話で②③⑤だけのように言っていた気がしますが、①④も利用していたことに後から気づきました。


■その他
RTX3070, 3080をマルチGPUとして使用すると、平均NPSは約120,000程度になります。
ただこれはあくまでbenchmarkスクリプトによる測定の結果であり、実戦では100,000前後を示すことが多いように思います。
以下は、一次予選における谷合先生の「prelude」との対局中のキャプチャです。