Skip to main content

Supervised Fine-Tuning

Supervised Fine-Tuning (SFT) は、pretrain された LLM に (instruction, response) ペア を見せて、指示追従や chat 形式の応答を学習させる段階です。RLHF や DPO の前段として、ほぼ必須の工程になっています。

何を学ぶのか

SFT の目的は、

  • 指示に従う形で答える (instruction following)
  • 望ましい形式 (Markdown、JSON、コードブロック) で出力する
  • 不適切な要求を断る
  • Chat 形式の会話を維持する

ことです。Pretrain 直後の LLM は web text の続きを書くだけなので、これらの「対話的な振る舞い」を SFT で教え込みます。

Objective

SFT の損失は、基本的に pretraining と同じ next-token prediction です。ただし、response 部分の token だけに loss を取るのが標準です。

L=tresponselogpθ(xtx<t)\mathcal{L} = -\sum_{t \in \text{response}} \log p_\theta(x_t \mid x_{<t})

Chat template

Chat 形式の SFT では、role と message を明示する chat template を導入します。

<|system|> You are a helpful assistant.
<|user|> What is the capital of France?
<|assistant|> Paris.

Template は model ごとに異なります (ChatML、Llama、Mistral、Qwen の各形式)。SFT と推論で異なる template を使うと性能が落ちるため、揃える必要があります。

データの作り方

SFT データの集め方は、おおよそ次の三通りです。

方法内容
人手執筆高品質だがコスト大
Distillation強い LLM の出力を蒸留 (Alpaca、ShareGPT 系)
Self-instructLLM 自身に instruction を生成させる
Hybrid人手 + LLM + rule-based filter

近年は、少量だが高品質な SFT (LIMA 仮説) と、大量で多様な SFT の両方向が研究されています。

Catastrophic forgetting

SFT のリスクは、pretrain で得た能力が損なわれる ことです。例えば、特定 domain の SFT を強くやりすぎると、一般的な知識や coding が劣化します。

対策として、

  • 一般データを SFT mix に混ぜる
  • LoRA / QLoRA で base model を frozen に保つ (詳しくは PEFT)
  • 小さい学習率と短い epoch
  • Replay や regularization

などがあります。

SFT と RLHF / DPO

SFT は「望ましい応答を真似る」段階、RLHF / DPO は「複数の応答のうちどちらが良いかを学ぶ」段階です。多くの aligned LLM では、SFT → preference alignment の順で training されます。

関連ページ

主なソース