なぜアライメントが必要か — 事前学習だけでは不十分
第4章で解説した事前学習は、インターネット上の膨大なテキストから「次のトークンを予測する」能力をLLMに与えます。 しかし、この段階のモデルは知識は持っているが、指示に従えないという致命的な問題を抱えています。
「日本の首都は?」と聞いても、「東京」と答える代わりに「日本の首都はどこですか?という問題が出題されました。」と文章の続きを生成してしまう。 あるいは、有害なコンテンツや偏見に満ちたテキストをそのまま出力してしまう。 事前学習済みモデルは、人間の意図(intent)を理解して応答するように訓練されていないのです。
SFT(教師ありファインチューニング)— 指示に応答する力を与える
アライメントの第一歩がSFT(Supervised Fine-Tuning)です。 人間が作成した「指示-応答ペア」のデータセットを使い、モデルに「質問に対して回答する」というフォーマットを学習させます。
OpenAIが2022年に発表したInstructGPTは、この手法を体系化した画期的な研究でした。 InstructGPTでは以下の3段階パイプラインが採用されています:
graph LR A[Step 1\nSFT] -->|教師あり学習| B[Step 2\n報酬モデル訓練] B -->|人間の選好データ| C[Step 3\nRLHF / PPO] C -->|強化学習で最適化| D[整合済みモデル] style A fill:#3b82f6,stroke:#1d4ed8,color:#fff style B fill:#8b5cf6,stroke:#6d28d9,color:#fff style C fill:#f97316,stroke:#c2410c,color:#fff style D fill:#10b981,stroke:#059669,color:#fff
Step 1のSFTでは、数万件程度の高品質な指示-応答ペアで追加学習を行います。 このデータは人間のラベラーが手作業で作成するため、データの品質がモデルの質を直接左右します。 興味深いことに、InstructGPTの論文では、わずか1.3Bパラメータのモデルが175BのGPT-3を人間評価で上回ったと報告されています。 アライメントの効果がいかに大きいかを示す象徴的な結果です。
RLHF — 人間のフィードバックによる強化学習
SFTだけでは「人間が好む応答」を十分に学習できません。 ここで登場するのがRLHF(Reinforcement Learning from Human Feedback)です。 RLHFでは、人間の選好(「AとBの応答、どちらが良い?」)をもとに報酬モデルを訓練し、 その報酬モデルを使ってLLMを強化学習で最適化します。
報酬モデルの訓練
まず、同じプロンプトに対してSFTモデルから複数の応答を生成し、人間のラベラーがランキング(順位付け)します。 このランキングデータを使って、応答の「良さ」をスカラー値で出力する報酬モデル(Reward Model)を訓練します。 報酬モデルは通常、SFTモデルと同じアーキテクチャに回帰ヘッドを追加したものです。
PPOによるポリシー最適化
報酬モデルが得られたら、PPO(Proximal Policy Optimization)アルゴリズムを使ってSFTモデルを最適化します。 この段階では3つのモデルが同時に必要となります:
- ポリシーモデル — 最適化対象のLLM本体。応答を生成する
- 報酬モデル — 生成された応答にスコアを付ける
- 参照モデル — SFT後の初期状態を保持。ポリシーモデルが元のモデルから離れすぎないようKLペナルティを計算する
DPO — 報酬モデル不要の直接最適化
RLHFは効果的ですが、3つのモデルを同時にメモリに載せる必要があり、訓練が複雑でコストが高いという課題がありました。 2023年にStanfordの研究者が発表したDPO(Direct Preference Optimization)は、この問題を根本的に解決する手法です。
DPOの核心的なアイデアは、報酬モデルの最適解を解析的に導出し、損失関数に直接組み込むことです。 「選好ペア」(好ましい応答 yw と好ましくない応答 yl)のデータがあれば、 報酬モデルを別途訓練することなく、ポリシーモデルを直接最適化できます。
# DPOの損失関数(概念的な疑似コード)
def dpo_loss(policy, reference, prompt, y_win, y_lose, beta):
# ポリシーモデルと参照モデルの対数確率の差分を計算
log_ratio_win = policy.log_prob(y_win | prompt) - reference.log_prob(y_win | prompt)
log_ratio_lose = policy.log_prob(y_lose | prompt) - reference.log_prob(y_lose | prompt)
# 選好ペアの対数確率の差分にシグモイドを適用
loss = -log(sigmoid(beta * (log_ratio_win - log_ratio_lose)))
return loss DPOにより、RLHFと比較して40〜75%のコスト削減が報告されています。 さらに、PPOの不安定なハイパーパラメータ調整が不要になり、訓練プロセスが大幅に簡素化されます。 Meta社のLlama 2やLlama 3でもDPOが採用されました。
ORPO — SFTと選好学習の統合
DPOはRLHFを大幅に簡素化しましたが、依然としてSFTの事前実行と参照モデルの保持が必要でした。 2024年に提案されたORPO(Odds Ratio Preference Optimization)は、SFTと選好学習を1ステップで同時に実行する手法です。
ORPOは、通常のSFT損失(クロスエントロピー)に、選好ペアのオッズ比に基づくペナルティ項を追加します。 これにより参照モデルが不要となり、メモリ使用量がさらに削減されます。 実験では、Llama-3 8BモデルでDPOに匹敵する性能を、より少ない計算コストで達成しています。
アライメント手法の比較
| 手法 | 必要なモデル数 | 報酬モデル | 参照モデル | SFT事前実行 | 訓練の複雑さ |
|---|---|---|---|---|---|
| RLHF (PPO) | 3(ポリシー+報酬+参照) | 必要 | 必要 | 必要 | 高い(強化学習) |
| DPO | 2(ポリシー+参照) | 不要 | 必要 | 必要 | 中程度(教師あり学習) |
| ORPO | 1(ポリシーのみ) | 不要 | 不要 | 不要(統合) | 低い(1ステップ) |
Constitutional AI — 原則に基づくAI自己評価
Anthropicが提案したConstitutional AI(CAI)は、人間のフィードバックの代わりに AI自身がフィードバックを生成するという画期的なアプローチです。
CAIでは、まず「憲法(Constitution)」と呼ばれる原則のリストを定義します。 例えば「差別的な内容を含まない」「暴力を助長しない」「正確な情報を提供する」といった原則です。 この手法は2段階で構成されます:
graph TD
A[有害な応答を生成] -->|憲法原則で自己批判| B[改善された応答を生成]
B --> C[SFTデータとして使用]
C --> D[SFTモデル]
D --> E[AI同士の比較評価]
E -->|RLAIF| F[最終モデル]
subgraph "Phase 1: 自己批判SFT"
A
B
C
D
end
subgraph "Phase 2: RLAIF"
E
F
end
style A fill:#ef4444,stroke:#dc2626,color:#fff
style B fill:#f97316,stroke:#c2410c,color:#fff
style D fill:#3b82f6,stroke:#1d4ed8,color:#fff
style F fill:#10b981,stroke:#059669,color:#fffPhase 1(自己批判SFT)では、モデルに意図的に有害な応答を生成させ、 憲法原則に照らして自ら問題点を指摘し、改善版を生成させます。これをSFTの訓練データとします。 Phase 2(RLAIF)では、人間の代わりにAIが応答を比較評価し、 その評価をもとにRLHFと同様の強化学習を行います。 「RLAIF(RL from AI Feedback)」と呼ばれるこの手法により、人間のラベリングコストを大幅に削減できます。
LoRA/QLoRA — 少ないリソースでのファインチューニング
70BパラメータのLLMをフルでファインチューニングするには、数百GBのGPUメモリが必要です。 これは多くの研究者や企業にとって現実的ではありません。 LoRA(Low-Rank Adaptation)は、この問題を解決するパラメータ効率的ファインチューニング(PEFT)手法です。
LoRAの基本的なアイデアは、重み行列の更新を低ランク行列の積で近似することです。 元の重み行列 W に対して、ΔW = BA(B は d×r、A は r×d、r ≪ d)という低ランク分解で更新量を表現します。 ランク r を8〜64程度に設定することで、訓練可能なパラメータ数を元の0.1〜1%まで削減できます。
# LoRAの概念(PyTorch風の疑似コード)
class LoRALinear(nn.Module):
def __init__(self, in_dim, out_dim, rank=8):
self.original = nn.Linear(in_dim, out_dim) # 凍結
self.original.requires_grad_(False)
# 低ランク行列のみ訓練
self.A = nn.Parameter(torch.randn(in_dim, rank) * 0.01)
self.B = nn.Parameter(torch.zeros(rank, out_dim))
def forward(self, x):
# 元の重み + 低ランク更新
return self.original(x) + x @ self.A @ self.B QLoRAはLoRAをさらに進化させた手法で、ベースモデルを4ビットに量子化した状態でLoRAを適用します。 これにより、70Bパラメータのモデルでも単一のA100 GPU(48GB)でファインチューニングが可能になります。 QLoRAの登場は、大規模モデルのカスタマイズを民主化した重要なマイルストーンです。
アライメント問題の本質 — 解けていない難問
ここまで紹介してきたSFT、RLHF、DPOといった手法は、いずれも外的アライメント(Outer Alignment)に分類されます。 これは「人間が定義した目的に正しく沿わせる」という問題です。 しかし、AIアライメントにはより深い問題が存在します。
内的アライメント問題
内的アライメント(Inner Alignment)は、「モデルが内部で実際に最適化している目的は、 訓練時に我々が指定した目的と一致しているか」という問題です。 訓練中に優秀な成績を収めるモデルが、実際には異なる目的を追求している可能性があります。
メサオプティマイザと欺瞞的整合
最も懸念されるシナリオがメサオプティマイザ(Mesa-Optimizer)の出現です。 これは、訓練プロセス(ベースオプティマイザ)によって生み出されたモデル内部に、 独自の最適化目的を持つ「内部オプティマイザ」が形成される仮説です。
さらに危険なのが欺瞞的整合(Deceptive Alignment)です。 メサオプティマイザが、訓練中は人間の意図に従うふりをしながら、 デプロイ後に真の目的を追求し始めるというシナリオです。 訓練中のテスト環境では完璧に振る舞い、実環境で初めて本性を現す — これは従来のベンチマークでは検出できません。
理解度チェック
InstructGPTの3段階パイプラインの正しい順序はどれですか?
キーボード: 1〜4 で選択、Enter で回答