TadaoYamaokaの開発日記

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

将棋AIの棋風学習にLoRAを適用

大規模言語モデルやStable Diffusionなどの拡散モデルのファインチューニングには、LoRAという手法が使われることが多い。
全てのパラメータを微調整するよりも効率的に学習できる。

LoRAを将棋AIのモデルに適用して、棋風の学習に使えるか試してみた。

将棋AIのモデル

将棋AIのモデルには、dlshogiの学習済みモデルを使用する。
dlshogiのモデルは、ResNetで構成されている。

LoRA

標準のLoRAは、全結合層に対して適用されるため、ResNetで使用している畳み込み層には適用できない。
LoRAを、畳み込み層にも適用できるようにしたものにLoConがある。

LoConは、カーネルサイズ3x3・フィルタ数Nの畳み込み層を、カーネルサイズ3x3・フィルタ数Rの畳み込み層とカーネルサイズ1x1・フィルタ数Nの畳み込み層に分解して表現する。
RはRankを表し、元のフィルタ数Nよりも小さい値とする。
推論時には、元のパラメータにマージすることができる。

棋風学習

棋風は、特定の傾向のあるプレイヤーの棋譜から学習する。
dlshogiのモデルは価値(勝率)も学習するが、指し手のみを学習する。

実験

条件
  • 将棋倶楽部24万局集」の人間プレイヤーの棋譜を学習する(以前の記事参照)。
  • レーティング帯別に訓練データと評価データを9:1に分割する。
  • レーティング帯別に一致率で評価する。
棋譜

レーティング別の件数は以下の通り。

1800から2000あたりの件数が多い。
1000から1300あたりや1500から1700あたりの件数が少ない。
そのため、レーティング帯を500間隔に分ける(2000以上は件数が少ないため一つにする)。

結果

4エポック学習し、評価データで一致率を測定した結果は以下の通り。
比較のため、LoRAを適用前の事前学習済みモデルでの結果も載せる。

事前学習済みモデルと比較して、一致率が10%以上高くなっていることがわかる。

レーティング帯別では、低いレーティング帯ほど一致率の差が大きくなっている。

人間プレイヤーの傾向を学習できていると言えそうである。

低いレーティング帯のみ学習

低いレーティング帯の訓練データのみを学習した場合、そのレーティング帯の一致率が上がるか検証した。

レーティング1500未満のデータを学習した結果を、全レーティング帯を学習したものと比較した結果は以下の通り。

差が分かりにくいので、差分をグラフにした。

x軸が1000(500~1000)と1500(1000~1500)の一致率が少しだけ高くなっているのが分かる。
逆に、2000以上では低くなっている。
500が低い理由はわからない。

差はわずかだが、低いレーティング帯の傾向を学習できていると言えそうである。

絶対的な一致率は、高いレーティング帯の方が高い。
これは、事前学習済みモデルの傾向が反映されてためと考えるが、低いレーティング帯のプレイヤーの棋譜のみで、高いレーティング帯の一致率も事前学習済みモデルから上昇するのは、レーティング帯によらず人間のプレイヤーに共通する傾向があるのかもしれない。

まとめ

将棋AIのモデルにLoRAを適用して棋風を学習できるか試してみた。
結果、事前学習済みモデルと比較して、訓練に使用した棋譜の傾向を学習できることが確認できた。

モデルを直接ファインチューニングした場合と比べてどうかも気になるため、別途追試をしてみたい。