先日、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で使われている技術を試すことになるので、技術をキャッチアップするという個人的な目的もある。
次回は、特徴量をトークンに埋め込む部分あたりから実装をはじめたい。