はじめに:なぜあなたのSFTモデルは「期待通り」に動かないのか
自社特化型LLMの開発プロジェクトにおいて、「SFT(Supervised Fine-Tuning)を行って専門知識は入ったはずなのに、なぜか回答がよそよそしい」「指示には従うが、安全性の観点で危うい発言をする」といった課題に直面するケースは少なくありません。
多くのLLM開発プロジェクトにおいて、SFT後のモデルに対する「違和感」が生じることがあります。データセットを整備し、損失関数(Loss)が順調に下がっても、いざ業務自動化システムの一部として対話させると、どこか機械的で、あるいは自信満々に嘘をつく(ハルシネーション)ことがあります。
これは、SFTが本質的に「次の単語を予測する(Next Token Prediction)」タスクに過ぎないことに起因しています。モデルは「確率的に最もありそうな続き」を出力しているだけで、その内容が「ユーザーにとって役に立つか(Helpful)」や「無害か(Harmless)」という価値判断基準を持っていないからです。
ここで必要になるのが、RLHF(Reinforcement Learning from Human Feedback:人間のフィードバックによる強化学習)です。これは、モデルに知識を与えるのではなく、「振る舞い(Behavior)」や「価値観(Alignment)」を教え込むプロセスと言えます。
しかし、RLHFの実装はSFTに比べて格段に複雑です。報酬モデル(Reward Model)の学習、PPO(Proximal Policy Optimization)による不安定な強化学習ループ、そして「人間の評価データ」を集めるコストなどが課題となります。
さらに最近では、報酬モデルを明示的に学習させないDPO(Direct Preference Optimization)という手法も登場しています。
この記事では、SFTの限界を突破するためのRLHFの技術的詳細から、PPOとDPOの実装比較、そしてデータセット作成について解説します。データに基づいた意思決定を行い、仮説検証を繰り返すための「実務ガイド」としてご活用ください。
なぜSFT(教師あり微調整)だけでは不十分なのか
まず、技術的な背景として、なぜSFT(Supervised Fine-Tuning)だけでは「高品質なアシスタント」が作れないのか、その構造的な限界を整理しておきましょう。
確率的オウムからの脱却
大規模言語モデル(LLM)の事前学習(Pre-training)とSFTは、基本的に「最尤推定(Maximum Likelihood Estimation)」に基づいています。つまり、文脈を与えられたときに、コーパス内の統計分布に従って、次にくる確率が最も高いトークンを予測するように学習します。
例えば、「日本の首都は」という入力に対して「東京」と続く確率を高めることはできます。しかし、ユーザーが「日本の首都について、観光客向けの魅力的な紹介文を書いて」と依頼した場合、SFTモデルは学習データに含まれる類似のテキストを再現しようとしますが、それが「魅力的かどうか」という主観的な品質指標を最適化しているわけではありません。
SFTモデルは、ある意味で優秀な「確率的オウム」と言えます。学習データに存在するパターンを模倣するのは得意ですが、そこに「人間の意図を汲み取る」という評価軸が欠落しているのです。
「正解のないタスク」への対応力
SFTが機能するためには、入力に対して明確な「正解(Target Text)」が必要です。要約タスクや翻訳タスク、あるいはコード生成のように正解が比較的明確な場合はSFTでも高い性能が期待できます。
しかし、以下のようなタスクはどうでしょうか?
- 「このプロジェクトの進め方について、批判的な視点でアドバイスして」
- 「子供にもわかるように、量子力学を説明して」
- 「失礼にならないように、断りのメールを書いて」
これらには唯一の正解が存在しません。あるのは「より好ましい回答」と「あまり好ましくない回答」のグラデーションだけです。SFTでこれに対応しようとすると、あらゆるバリエーションの「理想的な回答」を人間が書き下ろす必要があり、データ作成コストが指数関数的に増大します。
ここでRLHF(Reinforcement Learning from Human Feedback)や、その発展形であるDPO(Direct Preference Optimization)といったアライメント技術が重要になります。これらのアプローチは、モデルに完璧な正解を書かせるのではなく、モデルが生成した複数の出力候補に対して「どちらがより好ましいか」という選好(Preference)を学習させる点に革新性があります。
人間にとってゼロから「理想的な回答」を作成するよりも、提示された選択肢を比較評価する方が認知負荷が低く、効率的に高品質なデータを収集できるからです。最新の研究では、この評価プロセス自体をAIが支援する手法(RLAIF)なども模索されていますが、根底にあるのは「単なる模倣ではなく、人間の価値観へのアライメントを目指す」という点です。
RLHFが解決する具体的なビジネス課題
ビジネス応用において、RLHFおよびアライメント技術は主に以下の3つの課題解決(3H)に寄与します。
- Helpfulness(有用性): ユーザーの曖昧な指示を汲み取り、期待するフォーマットやトーンで回答する能力。例えば、「要約して」と言われた時に、単に短くするだけでなく、重要なポイントを箇条書きにするなどの配慮です。
- Honesty(誠実性): 知らないことを「知らない」と言う能力。SFTモデルは不確かな情報を自信満々に生成する(ハルシネーション)傾向がありますが、アライメントによって「不確実な情報は断定しない」という振る舞いを強化できます。
- Harmlessness(無害性): 差別的、暴力的、あるいはコンプライアンス違反になるような回答を抑制する能力。これは企業利用において極めて重要な防御壁となります。
SFTでは「何を知っているか(知識)」を教え、RLHFなどのアライメント技術では「どう振る舞うべきか(行動規範)」を教える。この役割分担を理解することが、実装戦略の第一歩です。
RLHF(人間からのフィードバックによる強化学習)の技術アーキテクチャ
では、具体的にRLHFがどのように動いているのか、そのアーキテクチャを3つのステップに分解して見ていきましょう。OpenAIがInstructGPTの論文(Ouyang et al., 2022)で示した構成は、現代のLLM開発における基礎的なアプローチとして広く参照されています。
Step 1: SFTモデルの準備(Policyの初期化)
すべての出発点は、ある程度指示に従えるようになったSFT(Supervised Fine-Tuning)モデルです。事前学習済みのベースモデル(例:Llamaシリーズのベースモデルなど)に対し、高品質な指示・回答ペアを用いて教師あり微調整を行います。
強化学習の文脈では、このSFTモデルが初期の「ポリシー(Policy)」、つまり行動指針となります。強化学習は探索的なプロセスであるため、初期ポリシーが全くのデタラメだと学習が収束しません。SFTによって、ある程度まともな文章を生成できる状態にしておくことが前提条件です。
Step 2: 比較データによる報酬モデル(Reward Model)の学習
ここがRLHFの肝となる部分です。人間の好みを代理で判断するAI、すなわち「報酬モデル(RM)」を作ります。
- データ収集: プロンプトに対し、SFTモデルに複数の回答(例えば回答Aと回答B)を生成させます。
- 人間による評価: アノテーター(評価者)が回答Aと回答Bを見比べ、「どちらがより好ましいか」を判定します。絶対評価(1〜5点)よりも、相対比較(A > B)の方が人間によるブレが少ないため、一般的には比較データ(Preference Data)が用いられます。
- RMの学習: この比較データを用いて、回答を入力とし、そのスカラー値(スコア)を出力する回帰モデルを学習させます。損失関数には、好ましい回答のスコアが、好ましくない回答のスコアよりも高くなるように設計されたRanking Loss(通常はLog Sigmoid Lossなど)を使用します。
数式で表現すると、報酬モデル $r_{\theta}$ に対して、データセット $D$ 内の好ましい回答 $y_w$ と好ましくない回答 $y_l$ について、以下の損失を最小化します。
$ \mathcal{L}(\theta) = -\mathbb{E}{(x, y_w, y_l) \sim D} [\log(\sigma(r{\theta}(x, y_w) - r_{\theta}(x, y_l)))] $
この報酬モデルが完成すれば、人間がいなくても、モデルの生成物に対して「今の回答は80点」「今のは30点」といったフィードバックを高速に返すことが可能になります。
Step 3: PPO(Proximal Policy Optimization)によるポリシー更新
最後に、強化学習アルゴリズムであるPPOを用いて、LLM(ポリシー)を最適化します。
- 環境(Environment): プロンプトを受け取り、トークンを生成する場。
- エージェント(Agent): 最適化対象のLLM。
- 行動(Action): 次のトークンの生成。
- 報酬(Reward): 生成完了後、報酬モデルが算出するスコア。
ここで重要なのが、KLダイバージェンス(Kullback-Leibler Divergence)によるペナルティ項です。
単に報酬スコアを最大化しようとすると、モデルは報酬モデルの「裏をかく」ような奇妙な文章(Reward Hacking)を生成したり、元の言語モデルとしての流暢さを失ったりします。これを防ぐため、学習中のモデルの出力分布が、元のSFTモデル(参照モデル)の分布から離れすぎないように制約をかけます。
最終的な報酬関数 $R$ は以下のようになります。
$ R(x, y) = r_{\theta}(x, y) - \beta \log \frac{\pi_{\phi}^{\text{RL}}(y|x)}{\pi^{\text{SFT}}(y|x)} $
ここで $\beta$ はKLペナルティの強さを調整するハイパーパラメータです。この仕組みにより、日本語として破綻せず、かつ人間の好みに合った回答を生成するようにパラメータ $\phi$ が更新されていきます。
実装に向けた技術スタックとリソース要件
概念を理解したところで、実際に手を動かすための技術スタックとリソースについて解説します。PythonやTensorFlowなどの知識をベースに、具体的な実装イメージを掴んでいただければと思います。
推奨ライブラリ:Hugging Face TRLとエコシステム
現在、PythonエコシステムでRLHFを実装する場合、Hugging Faceが提供している TRL (Transformer Reinforcement Learning) ライブラリが業界標準として広く利用されています。
TRLは transformers、accelerate、peft と密接に統合されており、PPOだけでなく、より新しい手法であるDPOやORPOの実装も抽象化されています。効率的なパイプラインを構築するためには、以下のようなスタックが一般的です。
- TRL: RLHF/DPOの学習ループ制御。
PPOTrainerに加え、DPOTrainerやORPOTrainerなどが提供されており、最新のアライメント手法に迅速に対応できます。 - PEFT (Parameter-Efficient Fine-Tuning): LoRA/QLoRAによる軽量化。全パラメータ微調整(Full Fine-Tuning)は計算コストが極めて高いため、多くのプロジェクトで必須となります。
- bitsandbytes: 4bit/8bit量子化によるメモリ削減。
- vLLM / Deepspeed-MII: 生成(Rollout)フェーズの高速化。RLHFではモデルからの生成を繰り返すため、推論エンジンの活用が学習効率に直結します。
GPUメモリ消費量の見積もり
RLHF(特に従来のPPO)は、メモリ消費が激しいプロセスです。学習時には、以下の4つのモデルをメモリ上で管理する必要があります。
- Active Policy Model: 学習対象のLLM(勾配あり)
- Reference Model: KLダイバージェンス計算用のSFTモデル(推論のみ、凍結)
- Reward Model: 報酬計算用(推論のみ、凍結)
- Value Model: PPOの価値関数(勾配あり、通常はPolicyと同じサイズ)
これらを扱うため、SFT(Supervised Fine-Tuning)の数倍のリソースが必要です。例えば、7Bパラメータクラスのモデルを扱う場合、以下のようなリソースが目安となります。
- SFT (LoRA): 24GB VRAM x 1枚(コンシューマ向けハイエンドGPUでも可)
- RLHF (PPO + LoRA): 80GB VRAM (A100/H100) x 1枚、あるいは 24GB x 4枚以上
Reference ModelとReward ModelをCPUにオフロードしたり、QLoRA(4bit量子化)を活用したりすることで削減は可能ですが、PPOを回すにはデータセンタークラスのGPU、あるいはマルチGPU構成が推奨されます。
一方で、DPO(Direct Preference Optimization)であれば、Reference ModelとActive Modelの2つで済むため、リソース要件はSFTの1.5倍〜2倍程度に収まります。計算リソースの制約がある環境では、DPOやその派生手法(KTO, ORPO)が有力な選択肢となります。
分散学習環境とマネージドサービスの活用
モデルサイズが13Bや70B、あるいはそれ以上のLlamaモデルクラスになってくると、単一ノードでの学習は困難になります。DeepSpeed ZeRO-2/3などのステージング技術を用いて、オプティマイザ状態や勾配をGPU間で分割する必要があります。
また、自前でのインフラ構築が難しい場合は、クラウドコンピューティング環境におけるマネージドサービスの活用も検討すべきです。例えば、クラウドベンダーが提供するマネージドサービスなどでは、RFT(Reinforcement Fine-Tuning)のようなアライメント手法を簡略化して適用できる機能も登場しており、インフラ管理の負担を軽減しながらモデルの調整が可能になっています。
大規模な計算リソースを確保できない場合でも、こうしたサービスの活用や、効率的なアルゴリズム(DPO等)の選択によって、RLHFの実装は十分に現実的なものとなります。
最大の障壁「データセット作成」の現実と対策
多くの開発現場で「RLHFやDPO(Direct Preference Optimization)を導入したい」と考えたとき、アルゴリズムの実装以上にプロジェクトの成否を分ける要因となるのがデータセットです。データ分析の観点からも、PPOを用いる従来のRLHFであれ、報酬モデル学習を省略するDPOであれ、モデルに「どちらの回答が好ましいか」を教えるための高品質な比較データは不可欠です。
比較データ(A/Bテスト形式)の収集フロー
良質なアライメントを実現するためには、一般的に数千〜数万件の比較データ(Preference Data)が必要とされます。先行事例では大規模なデータセットが用いられていますが、特定のドメイン(例えば社内規定Q&Aや特定のプログラミング言語)に絞れば、1,000〜2,000件程度の高品質なデータでも十分な効果が見込めるケースがあります。
データの形式は以下のようなJSON構造が一般的です。これはDPOの学習データとしてもそのまま利用可能です。
{
"prompt": "クラウドセキュリティのベストプラクティスを教えて",
"chosen": "クラウドセキュリティにおいては、以下の3点が重要です...(良い回答)",
"rejected": "セキュリティは大事だよね。パスワードを長くすればいいと思うよ。(悪い回答)"
}
このデータセットを構築するには、以下のプロセスが必要です。
- プロンプト収集: 実際のユーザーログや、想定される質問リストを用意します。
- サンプリング: 現在のモデル(または複数の異なるモデル)に回答を生成させます。
- ラベリング: 人間(またはAI)が回答を比較し、勝敗をつけます。
アノテーションガイドラインの策定
ここで最も困難なのが「評価者間の揺らぎ(Inter-annotator Agreement)」の管理です。評価者によって「丁寧な回答」を好むか「簡潔な回答」を好むかといったブレは、報酬モデルにとってノイズとなり、最終的な生成品質を低下させます。
これを防ぐために、詳細かつ定量的なアノテーションガイドラインの策定が求められます。
- 有用性(Helpfulness): 指示に対して的確かつ具体的に答えているか?
- 真実性(Truthfulness): 幻覚(ハルシネーション)や矛盾が含まれていないか?
- 安全性(Safety): 有害な表現やバイアスが含まれていないか?
これらに明確な優先順位を設けることが重要です(例:安全性 > 真実性 > 有用性)。「どれほど有用に見えても、安全性基準を満たさない回答は必ずRejectedにする」といったルールを徹底する必要があります。
社内専門家 vs クラウドソーシング vs AI活用
専門性の高い領域(医療、法律、高度なエンジニアリングなど)では、一般的なクラウドソーシングでは回答の正確性を判断できないリスクがあります。そのため、自社特化型モデルの開発では、社内のドメインエキスパートによるアノテーションが理想的です。
しかし、専門家の時間は限られています。そこで近年、注目されているのがAIによる支援(RLAIF: Reinforcement Learning from AI Feedback的なアプローチ)です。
- LLM-as-a-Judge: 高性能な汎用モデルを評価者として利用し、予備的なラベリングを行う。
- フィルタリング: 明らかな低品質回答をAIで除外し、人間の専門家は「判断が難しいケース」のみを評価する。
このように人間とAIを組み合わせることで、コストを抑えつつ品質を担保することが現代的なアプローチとなっています。
データ管理の実装には、Argilla や Label Studio といったツールの活用を推奨します。これらはHugging Face等のエコシステムとも連携しやすく、直感的なUIで効率的なラベリングをサポートしています。開発チームとしては、モデルの学習コードを書く前に、この「持続可能なデータ収集パイプライン」を構築することが最初の重要なタスクとなるでしょう。
意思決定の分岐点:RLHF(PPO) vs DPO(Direct Preference Optimization)
ここからが実装における重要な意思決定ポイントです。伝統的な「PPOベースのRLHF」と、現在多くのプロジェクトで採用されている「DPO(Direct Preference Optimization)」、どちらを採用すべきでしょうか。
DPOの仕組み:報酬モデルなしでの最適化
DPOの画期的な点は、「報酬モデルを明示的に学習させない」ことです。
従来のRLHFでは、「データ → 報酬モデル → PPOでポリシー更新」という2段階の手順が必要でした。しかしDPO(Rafailov et al., 2023)では、報酬モデルの最適解がポリシーモデルの対数確率で解析的に表現できることが示されました。
つまり、比較データ(Chosen/Rejected)を用いて、直接ポリシーモデル(LLM)の損失関数を計算し、最適化できます。これにより、PPOのような強化学習の複雑なループ(サンプリング、価値関数の推定など)が不要になり、教師あり学習(分類タスクに近い形式)としてアライメントを実行可能です。
計算コストと安定性の比較
| 特徴 | PPO (Proximal Policy Optimization) | DPO (Direct Preference Optimization) |
|---|---|---|
| 学習プロセス | 複雑(RM学習 → 強化学習) | 単純(直接学習) |
| ハイパーパラメータ | 多い(学習率、クリッピング、GAE係数など)。調整が極めて難しい。 | 少ない(学習率、betaのみ)。SFTに近い感覚で調整可能。 |
| メモリ消費 | 極大(4つのモデルを展開する必要がある場合も) | 中(2つのモデルで実行可能) |
| 学習の安定性 | 不安定。発散しやすく、試行錯誤が必要。 | 安定。収束が速い傾向にある。 |
| 性能 | 理論上は探索能力が高いが、調整コストが高い。 | 多くのベンチマークでPPOと同等以上の性能が報告されている。 |
自社にはどちらのアプローチが最適か
現状のトレンドと実務的な観点から言えば、まずはDPOから検討することを推奨します。特に計算リソースやエンジニアリングリソースが限られている場合、DPOのコストパフォーマンスは圧倒的です。
ただし、最新の研究動向では、両者の特性を理解した使い分けやハイブリッドな手法も議論されています。
DPOを選ぶべきケース(多くのプロジェクト):
- 計算リソースの制約: GPUメモリを節約したい場合。
- 実装の容易さ: 強化学習特有の複雑なパラメータチューニングを避けたい場合。
- 固定データセットの存在: 既存の比較データセット(Chosen/Rejected)があり、オフラインでの学習で完結する場合。
PPO(またはその派生手法)を選ぶべきケース:
- 未知の探索が必要なタスク: 「正解」のデータはないが、シミュレーターやルールベースで報酬(スコア)だけは自動算出できる場合(例:コード生成で単体テストが通るか、数学的証明、ゲームのスコアなど)。DPOは比較データに依存しますが、PPOは報酬関数さえあれば未知の解法を探索できます。
- オンライン学習: ユーザーからのリアルタイムフィードバックを用いて、モデルを継続的に更新し続けるシステムを構築する場合。
- 複雑な推論プロセス: 最近の傾向として、推論プロセス(Chain of Thought)そのものを評価し強化するような高度なアライメントでは、探索能力の高い強化学習アプローチが再評価されています。
コードレベルでも、Hugging FaceのTRL(Transformer Reinforcement Learning)ライブラリなどを使えば、DPOの実装はシンプルです。
# DPOの実装イメージ(TRLライブラリを使用した概念コード)
from trl import DPOTrainer
# モデルとデータの準備が必要ですが、トレーナーの初期化はシンプルです
dpo_trainer = DPOTrainer(
model=model, # 学習対象モデル
ref_model=ref_model, # 参照モデル(KL制約用)
args=training_args, # 学習率などの設定
beta=0.1, # KLペナルティ係数(重要パラメータ)
train_dataset=dataset, # chosen/rejectedが含まれるデータセット
tokenizer=tokenizer,
)
dpo_trainer.train()
このように、SFTの延長線上で実装できるのがDPOの魅力です。まずはDPOでベースラインを作成し、特定のタスクでさらなる探索が必要な場合にPPOやその他の高度な手法(RFTなど)を検討するというステップが、リスクの少ないアプローチと言えます。
本番運用に向けた評価とリスク管理
モデルの学習が終わっても、開発プロセスは終わりません。むしろ、ここからが重要です。RLHFやDPO(Direct Preference Optimization)を適用したモデルが、実際にユーザーの期待通りに改善されたのか、客観的に評価する必要があります。
自動評価(LLM-as-a-Judge)と人間評価の組み合わせ
定量的な評価として、MT-Bench や AlpacaEval といったベンチマークが広く利用されています。これらは、高性能なモデルを「裁判官(Judge)」として使い、自作モデルの回答を採点させる手法(LLM-as-a-Judge)です。
「AIによる評価が信頼できるのか?」という疑問を持つ方もいるでしょう。しかし、多くの研究で人間による評価との相関が高いことが示されており、コスト効率の良い一次スクリーニングとして非常に有効です。
とはいえ、最終的な品質保証には人間による評価が不可欠です。テストユーザーやドメイン専門家にベータ版を使用してもらい、「Good/Bad」ボタンや修正提案を通じてフィードバックを集める仕組みを、アプリケーションのUIに組み込むことを強く推奨します。
Reward Hacking(報酬ハッキング)への対策
RLHF特有のリスクとして「報酬ハッキング(Reward Hacking)」があります。これは、モデルが本質的な課題解決ではなく、「報酬スコアを最大化するための表面的なパターン」だけを学習してしまう現象です。
例えば、評価者が「丁寧で長い文章」を好む傾向がある場合、モデルは内容が空疎でも長文を生成するようになることがあります。あるいは、安全性を過度に重視した結果、無害な質問に対しても「お答えできません」と拒否する「過剰な拒否(Over-refusal)」が発生するケースも報告されています。
こうした異常を検知するには、回答の長さの分布をモニタリングしたり、学習前モデルとのKLダイバージェンス(Kullback-Leibler divergence)の値を監視したりすることが重要です。KLダイバージェンスが急激に増大している場合、モデルが元の知識分布から大きく逸脱している可能性があり、調整が必要です。
継続的なモデル改善ループ
RLHFは一度きりのイベントではありません。継続的な改善サイクルこそが、モデルの価値を高めます。
- デプロイ: モデルを本番環境またはベータ環境に展開する。
- 収集: ユーザーからの実フィードバック(Good/Bad、修正依頼)を収集する。
- データセット化: 収集したデータを次のDPO/RLHF用学習データに追加・精査する。
- 更新: モデルを再学習させ、バージョンを更新する。
この「データフライホイール」を回せるかどうかが、汎用モデルとの差別化要因になります。広く利用されているAIサービスが強力なのは、世界中のユーザーからフィードバックを集め続けているからです。自社特化モデルであっても、同様のループを設計することが、長期的な品質向上と競争優位性につながります。
まとめ:技術選定がプロジェクトの未来を決める
RLHFは、LLMを「単なるテキスト生成器」から「信頼できるビジネスパートナー」へと進化させるための重要な技術です。
- SFTの限界: 単純な模倣学習だけでは、ユーザーの意図や安全性(Alignment)を十分に制御できない場合がある。
- 実装の選択: 計算リソースと学習の安定性を考慮し、まずはDPO(Direct Preference Optimization)からの導入を検討するのが現実的な解となることが多い。
- データの重要性: アルゴリズムの選定以上に、高品質な比較データ(Preference Data)の収集フロー構築に注力する。
AIコンサルタントや開発者として、TRLやPeftといったライブラリの最新動向をキャッチアップしつつも、常に「ビジネス課題の解決」という視点を忘れないでください。適切なデータ収集と評価のサイクルを回すことが、実用的なモデルを生み出すための最短ルートです。
コメント