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 を取るのが標準です。
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-instruct | LLM 自身に 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 されます。
関連ページ
主なソース
- InstructGPT: https://arxiv.org/abs/2203.02155
- LIMA: https://arxiv.org/abs/2305.11206
- Self-Instruct: https://arxiv.org/abs/2212.10560
- Alpaca: https://crfm.stanford.edu/2023/03/13/alpaca.html