学習パイプライン(事前学習/SFT/RLHF/DPO)
ここまでの章で組んだ Transformer は骨格にすぎず、重みは乱数のままだった。実物はこの骨格を 3 段階で育てる。膨大なテキストで次の語を予測する事前学習が知識と言語を作り、指示と応答の例で微調整する SFT がアシスタントの形を教え、人間の選好から学ぶ RLHF や DPO が答え方の質を仕上げる。この章はコードを書かず、各段階の損失関数と、規模の配分を決めるスケーリング則までを追う。
この章で読むもの
mini-GPT の生成が意味をなさなかったのは、重みが乱数だからだ。では実物の重みはどう決まるのか。答えは 1 回の学習ではなく、目的の違う 3 つの段階の積み重ねになっている。この章は実装せず(理由は最後に書く)、各段階が何を最適化しているかを損失関数のレベルで追う。以降の系譜の章で「このモデルは後段の学習が違う」という言い方を多用するので、その語彙を先に揃えるのが目的だ。
1. 事前学習 数兆トークンの生テキストで「次の語」を予測
(数ヶ月) → 知識と言語を獲得。ただし「続きを書く」ことしかしない
2. SFT 「指示 → 良い応答」の例 数万〜数百万件で微調整
(数日) → 指示に従う形を覚える
3. 選好学習 応答ペアの「どちらが良いか」から学ぶ(RLHF / DPO)
(数日〜) → 役に立つ・無害・正直の方向へ答え方を寄せる先に押さえることが3つある。
- 事前学習がほぼすべての知識を作る: 計算量の 9 割以上はここ。後段は知識を足すのではなく、引き出し方を変える
- SFT は模倣、選好学習は比較: 良い例を真似るだけでは「どちらがより良いか」の情報が入らない。この差が第 3 段階の存在理由
- 規模の配分には法則がある: パラメータとデータをどう配分すべきかはスケーリング則として測定されている
① 事前学習: 次の語の予測がすべての土台
損失は mini-GPT の出力にそのまま繋がる。各位置で次のトークンの確率分布を出し、正解トークンの対数確率を最大化する:
L_pretrain = −Σ_t log P(x_t | x_1 … x_{t−1})これだけだ。ラベルは要らず、ウェブテキスト・書籍・コードがそのまま教材になる。Transformer全体像 で見たとおり全位置が同時に教師信号になるので、1 兆トークンのコーパスは 1 兆個の予測問題になる。「次の語を当てる」を極限まで押し込むと、文法、事実、推論の型までがパラメータに折り畳まれていく。
スケーリング則: 賢さは配分の問題
事前学習には設計上の大問題がある。計算予算 C が決まっているとき、パラメータ数 N とデータ量 D にどう配るか。2020 年の Kaplan らの測定(スケーリング則)は「損失は N、D、C のべき乗則で滑らかに下がる」ことを示し、当時は N を大きくする方に予算が振られた。GPT-3(175B)はこの読みの産物だ。
2022 年の Chinchilla 論文が配分を修正する。同じ予算なら N と D をほぼ等分に伸ばすのが最適で、目安はパラメータ 1 個あたり約 20 トークン。GPT-3 世代のモデルは軒並み「大きすぎて学習不足」だった。70B の Chinchilla が 280B の Gopher を上回った実測がこの主張の裏付けで、以後のモデルはデータ側を大きく増やす方向に転じた。Llama 3 の 8B が 15 兆トークン(目安の 90 倍以上)で学習されているのは、学習時の最適を超えても、推論コストの安い小さいモデルを賢くする方が運用で得だからだ。最適配分は「何を最適化するか」で変わる。
② SFT: 形を教える
事前学習だけのモデル(base モデル)に「フランスの首都は?」と入力すると、答えるとは限らない。「という問題がテストに出た」と続きを書くかもしれない。テキストの続きとしてはどちらも自然で、モデルは「質問には答えるものだ」という規範をどこからも学んでいない。
SFT(supervised fine-tuning)は「指示 → 良い応答」のペアを人間が書き、その応答部分だけで同じ next-token 損失を回す。数式は事前学習と同一で、変わるのはデータの質と、何を正解と見なすかだけだ。数万〜数百万件の例で、モデルは「指示されたら応答する」という形を覚える。これが base モデルと instruct モデルの分かれ目になる。
③ RLHF: 比較から学ぶ
SFT には構造的な限界がある。人間が書いた良い応答を模倣するだけなので、「2 つの応答のどちらがより良いか」という比較の情報が入らない。長すぎる丁寧さと簡潔さのどちらを好むか、断るべき依頼への断り方はどちらが感じ良いか。こうした質の勾配は、正解例 1 本では表現しにくい。
RLHF(reinforcement learning from human feedback)は比較そのものをデータにする。手順は 2 段になっている:
報酬モデルの学習:
同じプロンプトへの応答ペア (y_win, y_lose) を人間が選好
L_RM = −log σ( r(x, y_win) − r(x, y_lose) ) ← 勝った方のスコアを上げる
方策の最適化(PPO):
maximize E[ r(x, y) ] − β·KL( π ∥ π_SFT ) ← 報酬を稼ぎつつ SFT から離れすぎない第 2 式の KL 項が要点だ。報酬モデルは人間の好みの不完全な近似なので、無制約に報酬を最大化すると、報酬モデルの穴を突く出力(意味のない定型句の繰り返しなど)に退化する。報酬ハッキングと呼ばれるこの現象を、「SFT モデルから離れすぎるな」という正則化で抑える。ChatGPT を作った InstructGPT 論文(2022)がこの構成を確立し、"helpful, harmless, honest" へ寄せる後段学習が業界標準になった。
④ DPO: 強化学習を消す
RLHF は効くが重い。報酬モデルと方策モデルを別々に持ち、PPO のループは不安定でハイパーパラメータに敏感だ。2023 年の DPO(direct preference optimization)は、RLHF の最適解が選好データから閉形式で書けることを示し、強化学習のループを 1 本の損失に畳み込んだ:
L_DPO = −log σ( β·[ log π(y_win)/π_ref(y_win) − log π(y_lose)/π_ref(y_lose) ] )読み方は「参照モデル(SFT)と比べて、勝った応答の確率を上げ、負けた応答の確率を下げる」で、報酬モデルも PPO も要らない。通常の教師あり学習と同じ安定性で選好が学べるため、オープンモデルの後段学習は DPO とその変種(IPO、KTO、ORPO)が主流になった。フロンティア各社は PPO 系と DPO 系を課題ごとに使い分けていると見られている。
動かす
下のデモは 2 つの見方を用意した。「段階と応答」は同じ入力に対する応答が base → SFT → RLHF 後でどう変わるかの典型パターンを追う。「Chinchilla配分」は計算予算を動かしたとき、最適なパラメータ数とデータ量の配分がどう変わるかを、GPT-3 と Chinchilla の実際の選択と比べながら確かめられる。
base モデルは「続きを書く」ことしかしない。質問文の続きとして自然なテキストを生成しており、答える規範をどこからも学んでいない
応答例は各段階の典型的な挙動を要約した教材用のもの。知識は事前学習で入り、 SFT が形を、選好学習が質と安全性を与える。配分側は C = 6·N·D と D = 20N の Chinchilla 最適則で、実際のモデルがどこまで意図的に外しているかも並べた。
設計の観点
- 知識と形の分離: 知識は事前学習、形と好みは後段。後段のデータ量は事前学習の 1 万分の 1 以下なのに挙動を支配する。少量データが効くのは、既にあるものの引き出し方を変えているだけだから
- なぜ SFT で止めないか: 模倣には「どちらがより良いか」の情報が無い。比較データは人間にとって作りやすい(良い応答を書くより 2 択を選ぶ方が速くて安定する)という運用上の利点も大きい
- KL ペナルティの意味: 報酬モデルは好みの近似にすぎない。近似を最適化しすぎると本物から乖離する、という Goodhart の法則への実装上の答え
- RLHF と DPO の使い分け: DPO は安定・安価だがオフラインの選好に縛られる。PPO 系は探索(自分の出力への評価)ができ、推論モデルの RL へ地続きになる
- 評価の難しさ: 後段学習の良し悪しは損失では測れない。人間評価、LLM-as-a-judge、ベンチマークの組み合わせで測る。ここが各社の秘伝のタレになっている
メリット・デメリットと実例
| 手法 | 必要データ | 安定性 | 実例 |
|---|---|---|---|
| SFT のみ | 指示応答ペア | 高 | 初期の Alpaca、小規模なオープン微調整 |
| RLHF(PPO) | 選好ペア + 報酬モデル | 低(調整が重い) | InstructGPT、ChatGPT、GPT-4 |
| DPO 系 | 選好ペアのみ | 高 | Zephyr、Llama 3 の一部、多くのオープンモデル |
| RLAIF / Constitutional AI | AI が生成する選好 | 中 | Claude(系譜の章で扱う) |
裏どり:
- InstructGPT(2022): SFT + 報酬モデル + PPO の 3 点セットを確立した論文。1.3B の InstructGPT が 175B の素の GPT-3 より人間評価で好まれた、という結果が後段学習の重要性を示した
- Chinchilla(2022): 予算等分・20 トークン/パラメータの最適則。以後のモデルのデータ量が桁で増えた転換点
- DPO(2023): RLHF の閉形式化。スタンフォードの論文で、オープンモデルの後段学習を一変させた
- Llama 3(2024): SFT + 拒否サンプリング + DPO の反復という公開レシピ。フロンティア級の後段学習の実例として技術レポートが読める
この章で実装しなかった理由
この教科書は from-scratch 実装を軸にしてきたが、この章は解説に留めた。DPO の損失関数単体なら数十行で書けるが、意味のある動作を見せるには学習済みの確率を出すモデルが要る。未学習の mini-GPT では「選好で確率が動く」ことを示しても乱数が動くだけで、恒等式の検証にならない。学習パイプラインを自分で書くなら、小さなコーパスでの事前学習(nanoGPT 相当)を先に作ってからが本番になる。そこは今後の拡張候補として残してある。
参考資料
- Ouyang et al., Training language models to follow instructions(2022) — InstructGPT。RLHF 3 点セットの原典
- Hoffmann et al., Training Compute-Optimal Large Language Models(2022) — Chinchilla
- Rafailov et al., Direct Preference Optimization(2023) — DPO
- Kaplan et al., Scaling Laws for Neural Language Models(2020) — 最初のスケーリング則
- Llama 3 Herd of Models(2024) — 公開されている後段学習レシピ