大規模言語モデルや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のモデルは価値(勝率)も学習するが、指し手のみを学習する。
実装
LoConを参考に実装にした。
実験
条件
- 「将棋倶楽部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を適用して棋風を学習できるか試してみた。
結果、事前学習済みモデルと比較して、訓練に使用した棋譜の傾向を学習できることが確認できた。
モデルを直接ファインチューニングした場合と比べてどうかも気になるため、別途追試をしてみたい。