🥦
LLMの学習を分割すると精度は向上するのか?
はじめに
「DeepSeek関連の論文解説」松尾研 LLM コミュニティ "Paper & Hacks Vol.38"で、DeepSeekの学習戦略として強化学習をいきなり行うと多言語が混ざってしまうため数千件のデータでSFTを行った後、強化学習を実施し、さらにSFTと強化学習を繰り返すことで性能向上がされたとの解説がありました。
この解説を聞いて、一度で学習を行う場合と繰り返し(分割して数回)学習を行う場合の2つの学習パターンについて精度に違いが出るのか気になったので、比較してみました。
- 学習パターン① : SFT → ORPO
- 学習パターン② : SFT → ORPO → SFT → ORPO
環境・モデル
- 学習環境:Google Colab A100
時間短縮のためほぼ全てA100で実施。追加課金を3回したので3,000円くらいかかりました。 - モデル:gemma2-2b
- データセット:
- SFT:約30,000件
DeepSeekの学習においてSFT時には、長文やマークダウンなどで整理されたデータを使用したそうですが、Huggin Faceで公開されたオープンソースのデータセットを使用します。 - ORPO:約13,000件(SFTとは別のオープンソースデータセットを使用)
- SFT:約30,000件
- 評価方法:ELYZA-tasks-100 による生成結果のスコア評価(1〜5スコア)を実施
- スコア算出方法:ChatGPT-4o miniによりスコアリングをし、全体の平均点と標準偏差を算出
学習
学習パターン① :SFT → ORPO
- SFTによる学習を実施
SFTデータ30,000件全てを使用して学習 - ORPOデータセット作成と学習を実施
- DPOデータセット
input(instruction)
を使ってSFTモデルで推論結果を生成 -
DeepSeek-R1-Distill-Qwen-32B-Japanese(4bit量子化)
を用いて、DPOデータセットとSFTモデルの推論結果の比較を実施してDPO形式のデータセットを作成
※サンプリング(400件)抽出して結果を確認したところ、元のDPOデータセットの精度が高いと判断
- DPOデータセット
- 評価
- ELYZA-tasks-100 で定性的スコアを算出
- 結果
特に数学や推論のタスクが苦手な印象score mean: 1.80 score std: 1.22
学習パターン② :SFT → ORPO → SFT → ORPO
学習パターン①で使用した各データセットを半分にして学習を2セット行います。
- 前半のSFT(15,000件)
- 前半のORPOデータセット作成と学習
- データセット作成方法は学習パターン①と同様
- このタイミングで精度評価を実施
学習パターン①よりほんのわずかに高い結果
score mean: 1.89 score std: 1.18
- 後半SFT(残り15,000件)
- 後半ORPOデータセット作成と学習
- データセット作成方法は学習パターン①と同様
- 念の為、順序によるバイアスの影響を確認し、影響がないと判断
-
最終評価
スコアがかなり向上しました。
標準偏差の値も増えているので、得意なスコアは伸びて苦手なスコアが伸びきれてないようです。score mean: 2.20 score std: 1.42
まとめ
今回、同一量のデータセットを用いて、
- SFT → ORPO
- SFT → ORPO → SFT → ORPO
の2パターンで比較した結果、学習パターン②の方がスコアが高くなりました。2回目のORPOでは、モデルの生成能力が向上している状態のためさらに再学習を行うことで、良い学習ができたのではないかと推測します。また、2Bモデルとはいえ、生成内容も違和感なく、高品質な出力がかなり見られました。
おわりに
データセットの収集やモデルのライセンスなどについては、大規模言語モデル2024に参加した際の内容をかなり参考させていただきました。
また、発表されたばかりの gemma3は元モデルの精度がかなり高そうです。小さなモデルでローカルで簡単に使えるモデルになるかも。
参考
Discussion