← 機械学習テキスト 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:ファインチューニング | 強化学習:Actor-Criticと深層強化学習(PPO)・方策勾配法

要点(BLUF)


1. なぜアラインメントが必要か

事前学習(ファインチューニング の前段)が最適化しているのは、ただ一つ「次トークンの尤度」です。膨大なテキストの分布を再現するよう訓練されたモデルは、もっともらしい続きを生むのが得意になります。しかしこれは「ユーザーの指示に従い、有用で、害がなく、正直に答える」こととは一致しません

具体的なズレの例:

目標を一言で言えば helpful / harmless / honest(3H) にすることです。問題は、この3Hを損失関数として直接書けない点にあります。「良い応答とは何か」を数式で定義できないなら、人間の判断そのものを学習信号にするしかありません。これがアラインメントの中心的な発想です。

要するに:事前学習は「言語の分布を真似る」最適化であって、「望ましく振る舞う」最適化ではない。後者は人間の選好をデータ化して教え込む必要がある。


2. RLHF の3段パイプライン

RLHF(Reinforcement Learning from Human Feedback)は、人間のフィードバックを報酬に変換し、それを強化学習で最大化する枠組みです。強化学習の基礎は 方策勾配法Actor-Criticと深層強化学習 で導入済みなので、ここでは言語モデルにどう写像されるかに集中します。

強化学習の語彙LLM での対応
方策 πθ\pi_\theta言語モデルそのもの(プロンプトを状態、トークン列を行動とみなす)
状態プロンプト xx(+それまでに生成したトークン列)
行動次のトークン(系列全体では応答 yy
報酬応答 yy の「人間にとっての望ましさ」
flowchart LR
    A["事前学習済みLLM"] --> B["(1) SFT<br/>(教師ありで指示追従を仕込む)"]
    B --> C["(2) 報酬モデル r_φ<br/>(選好ペアをBradley-Terryで学習)"]
    B --> D["(3) PPOで方策を更新<br/>(r_φ を最大化 + KLペナルティ)"]
    C --> D
    D --> E["アラインメント済みLLM"]

(1) SFT(教師ありファインチューニング)

少量の高品質な「指示 → 模範応答」ペアで教師あり学習し、まず指示追従の型を仕込みます。これは ファインチューニング の指示チューニングそのものです。RLHFの初期方策 πSFT\pi_{\text{SFT}} となり、後段ではこれが**基準(reference)**にもなります。

(2) 報酬モデル:選好を Bradley-Terry でスカラー化

ここが「人間の判断を数式に変える」ステップです。手順はこうです。

  1. SFTモデルに同じプロンプト xx を与え、応答を複数サンプリングする。
  2. 人間が応答ペア (y1,y2)(y_1, y_2) を見比べ、どちらが良いかだけを答える(絶対点ではなく相対比較)。勝った方を ywy_w、負けた方を yly_l と書く。
  3. この選好データから、応答にスカラー報酬を返す関数 rϕ(x,y)r_\phi(x, y) を学習する。

「比較しか得られないデータから、絶対的なスコア rϕr_\phi をどう作るか」を埋めるのが Bradley-Terry モデルです(元は対戦結果からプレイヤーの強さを推定する古典的選好モデル)。「y1y_1y2y_2 に勝つ確率」を、報酬の差にロジスティック関数を噛ませた形で表します:

P(y1y2x)=exprϕ(x,y1)exprϕ(x,y1)+exprϕ(x,y2)=σ ⁣(rϕ(x,y1)rϕ(x,y2))P(y_1 \succ y_2 \mid x) = \frac{\exp r_\phi(x, y_1)}{\exp r_\phi(x, y_1) + \exp r_\phi(x, y_2)} = \sigma\!\big(r_\phi(x, y_1) - r_\phi(x, y_2)\big)

要するに:勝率は報酬の差だけで決まる(差が大きいほど勝率が1に近づく)。報酬の絶対値には意味がなく、定数を足しても勝率は変わらない(後でDPOがこの性質を突きます)。

学習は、観測された選好に対する**負の対数尤度(=二値分類の交差エントロピー)**を最小化するだけです:

LRM(ϕ)=E(x,yw,yl)[logσ(rϕ(x,yw)rϕ(x,yl))]\mathcal{L}_{\text{RM}}(\phi) = -\,\mathbb{E}_{(x, y_w, y_l)}\Big[\log \sigma\big(r_\phi(x, y_w) - r_\phi(x, y_l)\big)\Big]

実装上、rϕr_\phi はSFTモデルの最終層に「スカラーを出すヘッド」を付けたものを使うのが普通です。

(3) PPO:報酬を最大化、ただしKLで縛る

報酬モデル rϕr_\phi を「環境からの報酬」とみなし、言語モデル=方策 πθ\pi_\theta報酬が高い応答を出すよう更新します。ただし、報酬モデルを最大化するだけだと方策は rϕr_\phi(誤って高得点を返す変な出力)に殺到します。これが reward hacking です。

これを防ぐため、基準方策 πref\pi_{\text{ref}}(=SFTモデル)から離れすぎないようKLダイバージェンスのペナルティを足します。RLHFが最大化する目的は次の形です:

maxπθ ExD,yπθ(x)[rϕ(x,y)]βKL ⁣(πθ(x)πref(x))\max_{\pi_\theta}\ \mathbb{E}_{x \sim \mathcal{D},\, y \sim \pi_\theta(\cdot \mid x)}\Big[\, r_\phi(x, y) \,\Big] - \beta\, \mathrm{KL}\!\big(\pi_\theta(\cdot\mid x)\,\|\,\pi_{\text{ref}}(\cdot\mid x)\big)

要するに:「報酬を上げろ、ただし元の自分から大きく変わるな」という綱引き。KL項は安全綱で、報酬モデルという不完全な物差しを盲信させないための歯止め。

この目的を実際に最適化するのが PPO(Actor-Criticと深層強化学習 で導入)です。実装では、KL項はクエリ時にトークンごとの報酬へ織り込む(各トークンで β(logπθlogπref)-\beta(\log\pi_\theta - \log\pi_{\text{ref}}) を加える)形が標準で、価値関数を学習するクリティックも必要になります。SFTモデル・報酬モデル・方策・クリティックと4つのモデルを同時に扱うため、RLHFは重く不安定になりがちです。この重さが、次のDPOを生む動機になります。


3. DPO:報酬モデルとRLを省く

DPO(Direct Preference Optimization)は、報酬モデルの学習もPPOのループもまるごと消し、選好データから直接方策を最適化します。発想の核心は「RLHFの最適方策が報酬の閉形式で書けるなら、報酬を介さず方策を直接動かせる」という点です。論文タイトルが秀逸で、Your Language Model is Secretly a Reward Model(言語モデルは密かに報酬モデルである)

導出の流れ(3ステップ)

ステップ1:RLHF目的の最適方策には閉形式がある。 上のKLペナルティ付き目的は、πθ\pi_\theta について解析的に解けます(これは強化学習の最大エントロピー的な構造から来る、廃れない結果です)。最適方策は基準方策を報酬で指数的に重み付けした形、すなわちボルツマン分布になります:

π(yx)=1Z(x)πref(yx)exp ⁣(1βr(x,y))\pi^*(y \mid x) = \frac{1}{Z(x)}\, \pi_{\text{ref}}(y \mid x)\, \exp\!\Big(\tfrac{1}{\beta} r(x, y)\Big)

ここで Z(x)=yπref(yx)exp(r(x,y)/β)Z(x) = \sum_{y} \pi_{\text{ref}}(y\mid x)\exp(r(x,y)/\beta) は確率を1に正規化する分配関数。直観は「元の自分の出しやすさ πref\pi_{\text{ref}} を土台に、報酬が高い応答ほど確率を持ち上げる」。β\beta が小さいほど報酬の差が効き、β\beta が大きいほど πref\pi_{\text{ref}} に近づきます。

ステップ2:式を逆に解いて、報酬を方策で表す。 上の式を rr について解き直すと、報酬が方策の対数比で書けます:

r(x,y)=βlogπ(yx)πref(yx)+βlogZ(x)r(x, y) = \beta \log \frac{\pi^*(y \mid x)}{\pi_{\text{ref}}(y \mid x)} + \beta \log Z(x)

要するに:報酬はもはや独立した存在ではなく、「最適方策が基準方策よりどれだけそのトークン列を好むか(対数比)」に β\beta を掛けたもの。方策の中に報酬が埋め込まれていることが見える。これが「言語モデルは密かに報酬モデル」の意味。

ステップ3:Bradley-Terry に代入すると Z(x)Z(x) が消える。 この rr をそのまま Bradley-Terry の選好確率に代入します。ywy_wyly_l同じプロンプト xxに対する応答なので、両者の報酬差を取ると厄介な βlogZ(x)\beta\log Z(x) が打ち消し合います(前述の通り、Bradley-Terryは報酬の差にしか依存しないため、扱いにくい分配関数が綺麗に消える)。残るのは方策の対数比だけ:

P(ywylx)=σ ⁣(βlogπ(ywx)πref(ywx)βlogπ(ylx)πref(ylx))P(y_w \succ y_l \mid x) = \sigma\!\left(\beta \log \frac{\pi^*(y_w\mid x)}{\pi_{\text{ref}}(y_w\mid x)} - \beta \log \frac{\pi^*(y_l\mid x)}{\pi_{\text{ref}}(y_l\mid x)}\right)

DPO 損失

あとは π\pi^* を学習対象 πθ\pi_\theta に置き換え、報酬モデルのときと同じく負の対数尤度を最小化するだけです:

LDPO(θ)=E(x,yw,yl) ⁣[logσ ⁣(βlogπθ(ywx)πref(ywx)βlogπθ(ylx)πref(ylx))]\mathcal{L}_{\text{DPO}}(\theta) = -\,\mathbb{E}_{(x, y_w, y_l)}\!\left[\log \sigma\!\left(\beta \log \frac{\pi_\theta(y_w\mid x)}{\pi_{\text{ref}}(y_w\mid x)} - \beta \log \frac{\pi_\theta(y_l\mid x)}{\pi_{\text{ref}}(y_l\mid x)}\right)\right]

これはただの二値分類損失です。報酬モデルもクリティックも環境からのサンプリングも要らず、選好データ (x,yw,yl)(x, y_w, y_l) と基準モデル πref\pi_{\text{ref}} さえあれば、勾配降下で直接 πθ\pi_\theta を更新できます。勾配の形は直観的で、「ywy_w の確率を上げ、yly_l の確率を下げる」方向に働き、しかも現在のモデルが報酬を取り違えている(yly_lywy_w より好んでいる)ペアほど強く効くよう自動で重み付けされます。

要するに:DPOは「報酬モデルを訓練 → RLで最大化」という2段を、「最適方策の閉形式」という数学の橋でつなぎ、選好データを直接食わせる1段の分類問題に畳み込んだ。RLHFと同じ目的を、RLなしで解いている。

RLHF vs DPO

flowchart TB
    subgraph RLHF["RLHF (報酬モデル経由)"]
        R1["選好データ"] --> R2["報酬モデル r_φ を学習<br/>(Bradley-Terry)"]
        R2 --> R3["PPOで方策を更新<br/>(報酬最大化 + KLペナルティ)"]
        R3 --> R4["アラインメント済み方策"]
    end
    subgraph DPO["DPO (報酬モデルを介さない)"]
        D1["選好データ"] --> D2["分類損失で方策を直接更新<br/>(報酬モデルもRLも不要)"]
        D2 --> D3["アラインメント済み方策"]
    end
観点RLHF(報酬モデル+PPO)DPO
報酬モデル明示的に学習する不要(方策に暗黙的に埋め込む)
最適化強化学習(PPO・サンプリング・クリティック)教師あり分類(勾配降下のみ)
同時に持つモデル4つ(SFT/RM/方策/クリティック)2つ(方策/基準)
安定性・実装重く不安定になりやすい軽く安定とされる(要最新確認
解いている目的KL制約付き報酬最大化同じ目的(数学的に等価)

DPOは実装が容易で安定なため広く使われますが、「常にRLHF(PPO)より優れるか」はタスクやデータ量・基準方策の選び方に依存し、決着はついていません。新しい派生(後述)も次々出ています。ここは要最新確認の領域です。


⚠️ よくある誤解・落とし穴(要最新確認を含む)


対応するシミュレーション

simulations/dpo_bradley_terry.py:RLHF/DPO の土台である Bradley-Terry モデル P(ij)=σ(rirj)P(i\succ j)=\sigma(r_i-r_j) で、隠れた報酬を持つ応答たちの「どちらが好きか」の比較データを生成し、その比較だけから各応答の報酬を最尤推定(=「勝者−敗者」を特徴にしたロジスティック回帰)で復元します。本当の報酬とほぼ一直線にのり順位が当たること(相関0.99)を可視化します。DPO はこの報酬モデルを陽に作らず最適方策の閉形式から選好へ直接フィットします。

選好から報酬を復元(Bradley-Terry)

関連ノート