TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】TransformerモデルのPython実装

将棋AIの大会で、DL系の開発者が減少傾向にあるため、dlshogiの成果物を少し共有したいと思います。

TransformerのPython実装

第5回電竜戦第35回世界コンピュータ将棋選手権で使用したResNet+TransformerモデルのPython実装をGitHubのmasterブランチに追加しました。

github.com


先日開催された第36回世界コンピュータ将棋選手権で使用したモデルは別ですが、ResNet+Transformerモデルのベースとして使用してください。

ResNetとハイブリッド構成にするため、通常の言語モデルのMulti Head Attentionとはテンソルの次元の扱いが異なっており、Linerは1x1のConv2Dで代替しています。
BatchNorm2dを使用しているのと、活性化の位置も通常のMulti Head Attentionから変更している部分があります。
変更の余地は多々あると思います。

モデルの訓練は、「--amp_dtype bfloat16」を指定しないと損失がnanになりやすいです。

入玉特徴量

第35回世界コンピュータ将棋選手権以降に使用している入玉特徴量をmasterブランチのVisual Studioプロジェクトで有効化しました。
使用しない場合は、プロジェクトのC++->プリプロセッサの定義から「NYUGYOKU_FEATURES」を削除してください。
また、unpack.cuのプロパティのカスタムビルドのコマンドラインから、「-DNYUGYOKU_FEATURES」を削除してください。

Linuxでビルドする場合は、デフォルトはOFFになっています。
有効にする場合は、makeの引数に「NYUGYOKU_FEATURES=1」を追加してください。

make NYUGYOKU_FEATURES=1

有効になっているかは、「usi」コマンドで、id nameが、「dlshogi NYUGYOKU_FEATURES」になっているかで確認できます。



また、モデルの訓練時に入玉特徴量を有効にするには、Pythonモジュールのインストール時に有効化が必要です。
環境変数に「NYUGYOKU_FEATURES=1」を追加してインストールしてください。

NYUGYOKU_FEATURES=1 pip install -e .

有効になっているかは、

from dlshogi.common import MAX_FEATURES2_NYUGYOKU_NUM
MAX_FEATURES2_NYUGYOKU_NUM

が31になっているかで確認できます。

まとめ

DL系の開発者の助けになるようにdlshogiの成果物を少し共有しました。
アピール文書で要点は書かれても実装が公開されていない状況だったので、実装を共有することでDL系の開発が活性化することを願います。