TadaoYamaokaの開発日記

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

大規模言語モデルで将棋AIを作る

先日、dlshogiをPyTorch Lightningに対応させてマルチGPUで学習できるようにした。
これは、より大規模なモデルで将棋を学習するための布石でもある。

Transformerを使ったLLMで使われている技術を将棋に応用することを計画している。
Deep Learning Shogi」(dlshogi)にちなんで、「Large Language Shogi」(llshogi)として開発していきたい。
※モデルサイズは昨今のLLM並みに数兆パラメータとかにはできないので、LargeはLLMの技術を使うという意味で。

ベースラインの方針

まずベースラインとして、「Grandmaster-Level Chess Without Search」を参考にして、Transformerによる将棋の方策を実装したい。

トーク

以前に、将棋でTransformerモデル(Multi-Head Attention)の学習を試したことがある。

【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する - TadaoYamaokaの開発日記
【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する 続き - TadaoYamaokaの開発日記
【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する 続き2 - TadaoYamaokaの開発日記

その際は、dlshogiの特徴量を盤の位置(持ち駒の場合は駒の種類)ごとのトークンに埋め込んでいた。

上記の論文では、FEN文字列をトークンにしているが、駒の利きや利き数も活用できた方がよいので、基本的に以前と同じ方法にしたい。

ただし、持ち駒は、駒の種類と枚数ごとに別トークンにしていたが、持ち駒の種類ごとのトークンに枚数を埋め込む形にして、トークン長を節約する。

位置エンコーダ

位置エンコードは、以前は段と筋それぞれで表していたが、入力層が1層全結合では段と筋の組み合わせが表現できていないため、座標ごとに改める。
今後、LLMで使用されている「Rotary Position Embedding」などの相対位置を表現する位置エンコーダを試したい。

モデル構成

モデル構成は、上記論文を参考に、post-normalizationとSwiGLUを使用して、8ヘッド、8層のトランスフォーマー、埋め込み256次元とする。

出力

上記論文では、行動価値を予測しているが、モデルをMCTSで使用する予定のため、dlshogiと同様に方策と状態価値を出力するようにする。

方策は、以前はdlshogiと同じ移動先座標と移動方向の組み合わせで表現していたが、方策の出力層が1x1の畳み込み層で重み共有することを前提としているため、非合法手も含まれていて効率が良くない(端の座標へ盤外の方向から移動なども含まれる)。

今回は、非合法手を除いた1496のクラス分類とする。

まとめ

LLMの技術を使用して大規模言語将棋を作る計画について記載した。

将棋にLLMの技術を応用することで、飛躍的に精度を向上できると考えている。
セルフアテンションの解釈で、将棋の解説にも応用できる可能性もある。
また、LLMで使われている技術を試すことになるので、技術をキャッチアップするという個人的な目的もある。

次回は、特徴量をトークンに埋め込む部分あたりから実装をはじめたい。