ファインチューニングとRLHF — 「続きを書く機械」を対話AIへ
事前学習を終えた言語モデルは、まだ「インターネットの続きを書く機械」にすぎません。それを人の意図に沿うアシスタントへ仕立てる調整の技術 — SFT・報酬モデル・RLHF・LoRA — を、動くパイプラインで追いかけます。
1. 4つの段階 — モデルの「性格」ができるまで
事前学習の目的関数は次トークン予測だけ。だから「フランスの首都は?」と入力すると、「という問題は試験によく出る。」と続きを書いてしまうかもしれません。知識は大量に持っているのに、「質問には答えるものだ」という意図を知らないのです。
そこで事前学習のあとに、SFT(教師ありファインチューニング)→ 報酬モデル学習 → RLHF(人間のフィードバックによる強化学習)という3段の調整(アラインメント)を重ねます。まず全体像をツアーしましょう。各段階でモデルの「性格メーター」がどう動くかに注目してください。
2. 人の好みを数にする — 報酬モデル
RLHF の肝は、「人の好み」という曖昧なものを微分可能な関数 rφ(x, y) に変換することです。学習のたびに人間へ聞きに行くわけにはいかないので、まず人間の判断を数万件集めて採点係(報酬モデル)を学習し、以後はこの採点係に人間の代理をさせます。
ここで重要な設計判断があります。人間に「この回答は100点満点で何点?」と聞く(絶対評価)のではなく、「AとBどちらが良い?」と比較だけを聞くのです。下のデモでは、比較データが貯まるにつれて、でたらめだった報酬カーブが「隠れた本当の好み」に吸い付いていきます。
3. RLHF — 報酬を追いつつ、離れすぎない
採点係ができたら、いよいよポリシー(=言語モデル本体)を強化学習(実務では PPO が定番)で更新します。「生成 → 採点 → 勾配で更新」のループです。ただし報酬モデルは人間の好みの不完全な近似にすぎません。素朴に報酬だけを最大化すると、モデルは採点係の穴を突く出力 — 過剰な断言、無意味な世辞、絵文字の乱打 — に収束してしまいます。
そこで目的関数に「基準モデル πref(SFT直後のモデル)から離れすぎたら罰金」という項を足します。これが KL 制約です。
なお、この目的関数の最適解は解析的に書けることが知られており、それを逆手に取ると報酬モデルも強化学習も省略して、比較データから直接ポリシーを学習できます。これが DPO(Direct Preference Optimization)で、実装が単純で学習が安定するため、RLHF の代替として広く使われています。
4. 全部は学習し直さない — LoRA
数十億〜数千億パラメータのモデルをフルにファインチューニングするのは高くつきます。勾配とオプティマイザ状態まで含めると、必要な GPU メモリは重み本体の数倍。そこで登場するのが LoRA(Low-Rank Adaptation)です。
鍵となる観察は、「ファインチューニングによる重みの変化 ΔW は実質的に低ランク」ということ。ならば ΔW を丸ごと持たず、細長い2枚の行列の積 B×A で表せばいい。元の W は凍結し、この小さな2枚だけを学習します。Attention の Q/K/V 射影など主要な行列に差し込むのが定番です。
- QLoRA:凍結する W を4bitに量子化してさらにメモリを削減。単一GPUで数百億パラメータの調整も。
- Adapter:層の間に小さなボトルネック層を挿入して、そこだけ学習する。
- Prompt / Prefix Tuning:重みは一切触らず、入力に付ける学習可能な埋め込みベクトルだけを最適化する。
5. まとめ — 調整という仕上げ工程
- 事前学習は知識を作るが、意図への従順さは作らない。仕上げは SFT → 報酬モデル → RLHF のリレー。
- 報酬モデルは「比較」データから学ぶ。絶対評価より比較の方が人間にとって簡単で一貫するから。
- RLHF の目的関数は「報酬 − β·KL」。βが小さすぎると報酬ハッキングで崩壊、大きすぎると何も変わらない。
- LoRA は差分 ΔW を低ランク分解 BA で持ち、1%未満のパラメータでファインチューニングを実現する。