0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LLaMA シリーズの SFT で見るデータ数とエポック数の実践指針

0
Posted at

はじめに

こんにちは、ひよこです。
大規模言語モデル(LLM)を自分専用のアシスタントに近づけるために、Supervised Fine-Tuning(SFT)で「どれくらいのデータを、何エポックくらい学習させればよいか」というのは、実務でも常に悩ましい問題ですよね。

特に Meta 社の LLaMA シリーズは、7B 〜 8B クラスのモデルがオープンに利用でき、GPU コスト的にも現実的なため、社内ツールや研究用途で触れる機会が多いはずです。
しかし、公式ドキュメントやブログには断片的な情報しかなく、実際に「何サンプルを何エポック回すのが妥当か」を俯瞰的に整理した資料は意外と見つかりません。

そこでこの記事では、LLaMA 系モデル(主に 8B 以上)に対する SFT の代表的な事例と、2023 〜 2025 年の研究論文に基づいて、以下のポイントを整理します。

  • 指示データの規模: どれくらいの量が必要なのか
  • 学習設定: エポック数やハイパーパラメータの設計
  • 量と質のトレードオフ:「質の高い少量データ」vs「大量データ」
  • モデルサイズの影響: 7B / 13B / 65B ごとの違い

これから SFT を試そうとしている方の、「最初の一手」を決める参考になれば幸いです。


調査対象と前提

今回の記事では、Meta 社の LLaMA 系モデルをベースとした以下の代表的な SFT 事例と、近年の系統的な実験論文を対象にします。

🐣 お仕事との兼ね合いで LLaMA 限定です

  • LLaMA 2-Chat(Meta, 2023)
  • Stanford Alpaca(7B / 13B, 2023)
  • Vicuna(7B / 13B, 2023)
  • LIMA(65B, 2023)
  • Rethinking data selection for supervised fine-tuning(LLaMA-2-7B, 2024)
  • Massive supervised fine-tuning experiments(LLaMA-3-8B, 2025)

前半では具体的な事例を、後半ではこれらを統合した「実務レシピ」に落とし込みます。


代表的な SFT 事例で見えるデータ規模とエポック数

LLaMA 2-Chat 高品質 2.7 万件 × 2 エポック

LLaMA 2-Chat は、基盤モデル LLaMA 2(7B / 13B / 70B)を対話向けに調整したモデルです。

  • 使用データ: 約 27,540 件の高品質な指示応答ペア(多くは社内アノテータによる手動ラベル)
  • エポック数: 2
  • コンテキスト長: 最大 4,096 トークン
  • 学習設定
    • 学習率スケジューラ: コサイン減衰 + ウォームアップ
    • Weight Decay $\approx 0.1$(フルチューニング時の過学習抑制)

特徴的なのは、あえて 2 エポックに抑えている点です。
データ数は数万件とそこまで巨大ではありませんが、品質が高いため少ない反復でも性能が十分引き出せるという設計思想が見て取れます。
結果として、70B 版は SFT 後に RLHF を適用することで ChatGPT (gpt-3.5-turbo-0301) や PaLM 2 に匹敵するレベルの有用性・安全性スコアを達成しています。

Stanford Alpaca 合成 5.2 万件 × 3 〜 5 エポック

Alpaca は、LLaMA ベースの指示追従モデルとして非常に有名なプロジェクトです。

  • 使用データ: 52,000 件の合成指示応答ペア(OpenAI text-davinci-003 から生成)

  • 学習設定:

    • 7B 版: 3 エポック、学習率 $2 \times 10^{-5}$
    • 13B 版: 5 エポック、学習率 $1 \times 10^{-5}$(7B の半分)
    • グローバルバッチサイズ: 128
    • Weight Decay は 0(未使用)

7B 版は 8 $\times$ A100 GPU で約 3 時間という現実的なコストで学習可能です。
安全性や長いマルチターン対話には弱いものの、シングルターンの指示追従としては GPT-3.5 に近い挙動が得られます。

Vicuna 実ユーザ対話 7 万件 × 3 エポック

Vicuna は、LLaMA 13B をベースとする高品質なオープンチャットボットです。

  • 使用データ: 約 70,000 件の実ユーザと ChatGPT の対話(ShareGPT 由来)

  • 学習設定:

    • ベース: LLaMA 13B
    • エポック数: 約 3
    • グローバルバッチサイズ: 128
    • 学習率: $2 \times 10^{-5}$
    • 最大シーケンス長: 2,048 トークン

Vicuna-13B は、GPT-4 による評価で「ChatGPT の 90% 程度の応答品質」という高いスコアを獲得しました。
ここでもエポック数は 3 と控えめで、データの質(実ユーザ対話)とモデルサイズ(13B)の効果が現れています。

LIMA 65B に対する 1,000 件の極少データ × 15 エポック

LIMA(Less Is More for Alignment)は、「本当に 1,000 件だけでいいのか」という問いに対する実験的なモデルです。

  • 使用データ: 合計 1,000 件(Stack Exchange や WikiHow、研究者の手書きサンプルなど)
  • 学習設定:
    • ベース: LLaMA 65B
    • エポック数: 15 エポックまで学習。65Bでは過学習が見られなかったため最終エポックを採用(7Bでは途中を採用)

人間評価では GPT-4 や Bard と比較しても遜色ない結果が報告されています。
ここから見えてくるのは、「モデルの知識の大半は事前学習で獲得済みであり、SFT は知識を追加するよりも出力スタイルを整える側面が強い」という事実です。


データ規模とエポック数の実務レンジ

上記の事例を俯瞰すると、LLaMA 系モデルの SFT はおおよそ次のレンジに収まります。

項目 実務的な目安 傾向
データ規模 数千 〜 数万件 1 万 〜 10 万件が最多。LIMA のように 1,000 件で成功する例もあり
エポック数 2 〜 5 エポック データが多いほどエポックは少なく、少ない場合は増やす(ただし Early Stopping 必須)

直感的な関係はこんな感じです。

  • データが多い場合: エポック数は少なめに(2 〜 3)
  • データが少ない場合: エポック数は増やすが(5 〜 10)、過学習に注意

近年の実験から見えた「質 > 量」の構造

最近の研究では、より体系的に「何サンプルあれば十分か」が検証されています。

LLaMA-2-7B 長い高品質応答 1,000 〜 4,200 件で十分

論文『Rethinking data selection for supervised fine-tuning』では、Alpaca、Dolly、WizardLM などのデータセットから「高品質な長い応答サンプル」だけを抽出して比較しています。

  • Alpaca。5.2 万件すべて使うより、上位 1,000 件の長文サンプルだけで学習した方が勝率が高い
  • WizardLM。上位 6%(約 4,200 件)のサンプルが最良の結果

「とりあえず全部突っ込む」よりも、長くて情報量の多い良質なサンプルに絞った方が強いという結果です。

LLaMA-3-8B 1,000 サンプルで飽和傾向

『Massive supervised fine-tuning experiments』では、LLaMA-3-8B に対する実験で以下の傾向が報告されています。

  • 約 1,000 件のインストラクションセットで、すでに大幅な性能向上が見られる
  • 2 万サンプルまで増やしても、性能の伸びは緩やかになりコストに見合いにくい

データ品質の評価:パープレキシティ (PPL)

SFT(Supervised Fine-Tuning)の際、データの質をどう担保するかは悩みどころですよね。そんなとき、ベースモデルに対する パープレキシティ (Perplexity, PPL) が一つの基準になります。

一言で言うと、「そのモデルにとって、その文章がどれくらい自然で読みやすいか」を数値化したものです。

定義と直感的な理解

数式的には、トークン列 $x_{1:T}$ に対するクロスエントロピー $H$ を用いて計算します。

$$
H(x_{1:T}) = -\frac{1}{T}\sum_{t=1}^{T}\log p_\theta(x_t \mid x_{<t})
$$

$$
\mathrm{PPL}(x_{1:T}) = \exp(H(x_{1:T}))
$$

少し難しく見えますが、要するに 「数値が小さいほど、モデルが次の単語を予測しやすい(=エントロピーが低い)」 状態を表します。

使い方

手順はとてもシンプルです。

  1. SFT 用の各データについて、ベースモデルで PPL を計算する
  2. PPL が低い(=自然な)順にデータを並べ替える
  3. 上位 $k$ 件を採用し、PPL が高すぎるデータは除外する

なぜ「PPL が低い」と良いのか?

SFT の目的が「新しい知識を覚えさせること」ではなく、「指示への答え方やフォーマット(口調や論理展開)」 を教えることであれば、ベースモデルがすでに理解しやすい(低 PPL な)文章を使った方が効果的だからです。

モデルが文章の意味理解に苦しまずに済むため、勾配が「出力スタイル」の調整に素直に使われます。

逆に PPL が高すぎるデータは、以下のようなリスクがあります。

  • 文章が崩れている(ノイズが多い)
  • 特殊すぎてモデルが理解できない

これらが混ざると、本来やりたい「応答スタイルの整形」の邪魔をしてしまうわけですね。

注意点

ただし、PPL は万能ではありません。

  • 内容の真偽:PPL が低くても嘘の内容が含まれている可能性がある
  • 知識の注入:新しい知識(ドメイン知識)を入れたい場合は、あえて高 PPL なデータが必要になることもある

まずは「明らかに質の悪いデータ(高 PPL)を足切りする」ためのフィルタとして使うのがおすすめです。

🐣 PPL を敢えて日本語にすれば「困惑度」でしょうか?


モデルサイズによる違い(7B vs 65B)

大きいモデルほど少量データで強い

LLaMA 2-Chat のレポートや LIMA の実験から、以下の傾向が見て取れます。

  • 65B / 70B クラス: 1,000 件程度の高品質データでも、かなりの性能に到達する
  • 7B / 8B クラス: 同じ 1,000 件だけでは、巨大モデルほどの劇的な性能向上は望みにくい場合がある(もう少しデータ量やエポック数で粘る必要がある)

エポック数の最適点

  • 小さいモデル(7B): 3 〜 5 エポックと少し多めに回す余地がある
  • 巨大モデル(65B): 少量データでも早めに性能が頭打ちになるため、Early Stopping が重要

実務向けの最初の一手レシピ(7B 〜 8B 想定)

最後に、LLaMA-2 / 3 系の 7B 〜 8B モデルを社内用チャットボット向けに SFT する場合の、現実的なスタートラインをまとめます。

データセット設計

  • 目標数: まずは 1,000 〜 3,000 件の高品質サンプル。余裕があれば 5,000 件まで

  • 内容:

    • 社内: FAQ やログから抽出
    • モデルにドラフトを書かせ、人間が編集して「人間らしい回答(理由や背景を含む)」に修正する
    • 一問一答だけでなく、少し長めの説明を含める

初期ハイパーパラメータ(フルチューニング)

# 設定例
learning_rate = 1e-5        # 学習率
num_train_epochs = 3        # エポック数
per_device_train_batch_size = 4
num_gpus = 1                # GPU 数
# グローバルバッチサイズ 128 を目指す場合 (GPU 数に合わせて調整が必要)
gradient_accumulation_steps = 32 // num_gpus
lr_scheduler_type = "cosine"
warmup_ratio = 0.03         # 3% ウォームアップ
weight_decay = 0.1          # または 0.01

※ LoRA を使う場合は、学習率を $2 \times 10^{-4}$ 〜 $2 \times 10^{-5}$ 程度、ランクを 8 〜 16 に設定します。

モニタリング戦略

  • 開発セット(数百件)を用意し、各エポック終了時に評価
  • 3 エポックで頭打ちなら停止。まだ伸びるなら 4 〜 5 まで延長
  • 逆に損失が悪化したら、前のチェックポイントを採用する

継続事前学習との関係

SFT に対するよくある誤解に、「SFT は新しい知識(社内用語や最新ニュースなど)をモデルに覚えさせることである」があります。しかし、近年の研究はこのアプローチに対して否定的です。

SFT は「知識」ではなく「振る舞い」を学ぶ

Meta 社の研究者らによる論文『LIMA: Less Is More for Alignment』では、「モデルの知識や能力の大半は事前学習(Pre-training)ですでに獲得されており、SFT はその引き出し方(スタイルやフォーマット)を整えるに過ぎない」という「Superficial Alignment Hypothesis(表面的なアライメント仮説)」が提唱されています。

つまり、SFT は「知っていることをユーザーの指示通りに答える練習」であり、「知らないことを暗記する勉強」ではないのです。知識注入を目的に SFT をすると、モデルは事実に即して答えることよりも、それらしい形式で答えることを優先してしまい、結果としてハルシネーションが悪化するという報告もあります。

知識を入れたいなら「継続事前学習」か「RAG」

もし特定のドメイン知識(医療、法律、社内文書など)をモデル自体に埋め込みたい場合は、SFT の前に 継続事前学習(Continued Pre-training / CPT) というステップが必要です。

  • データ量の桁が違う
    2025 年のドメイン適応に関する研究では、知識を獲得させるためには、学習リソース(トークン数)の 99% 以上を継続事前学習に割り当て、SFT に使うのは残りの 1% 未満にするのが最適であるという結果が出ています。SFT の数千〜数万件程度では、知識の注入にはまるで足りないということです。

  • 役割分担の明確化
    Microsoft などの研究でも、新しい知識への対応にはファインチューニングよりも RAG(検索拡張生成)の方が効果的であることが示されています。

したがって、実務での切り分けとしては以下のようになります。

  1. 話し方やキャラを変えたいSFT(数千件で OK)
  2. 知識を外部から与えたいRAG(検索拡張生成)
  3. どうしてもモデル内部に知識を持ちたい継続事前学習(億単位のトークンが必要)

「SFT で頑張って知識を入れようとしていないか?」を一度立ち止まって確認してみてください。

🐣 英語を話せることと、英語のテストの解答をマークシート形式ですることは違うということです


おわりに

Meta 社 LLaMA シリーズや周辺の論文を調査してわかったことは、SFT においては「量」よりも「質」と「多様性」が支配的であるということです。

実務ではつい「データをとにかく集める」「エポックを増やす」方向に進みがちですが、まずは少量(1,000 〜 3,000 件)の高品質データを用意し、短めの SFT を回して挙動を確認するアプローチが、コストとリスクのバランスにおいて最適解と言えそうです。

皆さんのプロジェクトでも、まずは「小さく始めて質を高める」方針で試してみてはいかがでしょうか。
ではまた次の記事でお会いしましょう。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?