ファインチューニングパターン
注: この記事は英語版からの翻訳です。コードブロック、ASCIIダイアグラム、およびMermaidダイアグラムは原文のまま保持しています。
TL;DR
ファインチューニングは、事前学習済みLLMをキュレーションされたデータセットで学習することで、特定のタスク、ドメイン、または動作に適応させます。主な判断には、フルファインチューニング、パラメータ効率的手法(LoRA、QLoRA、アダプタ)、プロンプトベースのアプローチの選択があり、データの入手可能性、計算予算、タスク要件に基づいて決定します。成功の鍵は、高品質な学習データ、適切なハイパーパラメータ選択、厳密な評価、モデルマージやバージョン管理を含む本番デプロイ戦略にあります。
ファインチューニング vs RAG vs プロンプティング
判断フレームワーク
┌─────────────────────────────────────────────────────────────────┐
│ FINE-TUNING DECISION TREE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ START HERE │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌─────────────────────────────────────┐ │ │
│ │ │ Can prompting solve the problem? │ │ │
│ │ │ (few-shot, chain-of-thought, etc.) │ │ │
│ │ └──────────────┬──────────────────────┘ │ │
│ │ │ │ │
│ │ YES ◄────┴────► NO │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ ┌────────┐ ┌─────────────────────────────┐ │ │
│ │ │ USE │ │ Is the knowledge static or │ │ │
│ │ │PROMPTING│ │ needs frequent updates? │ │ │
│ │ └────────┘ └─────────────┬───────────────┘ │ │
│ │ │ │ │
│ │ FREQUENT ◄───┴───► STATIC │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ ┌─────────┐ ┌────────────────────────┐ │ │
│ │ │ USE RAG │ │ Do you have >1000 │ │ │
│ │ └─────────┘ │ high-quality examples? │ │ │
│ │ └───────────┬────────────┘ │ │
│ │ │ │ │
│ │ NO ◄───────┴───────► YES │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ ┌───────────┐ ┌──────────┐ │ │
│ │ │ PROMPTING │ │FINE-TUNE │ │ │
│ │ │ or RAG │ └──────────┘ │ │
│ │ └───────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘アプローチ比較
┌─────────────────────────────────────────────────────────────────┐
│ APPROACH COMPARISON MATRIX │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 特性 │ プロンプティング │ RAG │ ファインチューニング │
│ ──────────────────┼────────────┼────────────┼─────────────────│
│ セットアップ時間 │ 分 │ 時間〜日 │ 日〜週 │
│ 必要データ │ 0-10 │ ドキュメント │ 1000+サンプル │
│ 計算コスト │ 低 │ 中 │ 高 │
│ 推論コスト │ 高い* │ 中 │ 低い │
│ 知識の更新 │ 即座 │ 高速 │ 再学習が必要 │
│ 振る舞いの変更 │ 限定的 │ 限定的 │ 深い変更が可能 │
│ レイテンシ │ ベース │ +検索時間 │ ベース │
│ ハルシネーション │ 高い │ 低い │ タスク依存 │
│ │
│ *長いプロンプト = より多くのトークン = 高コスト │
│ │
└─────────────────────────────────────────────────────────────────┘ファインチューニングの基礎
フルファインチューニング vs パラメータ効率的手法
┌─────────────────────────────────────────────────────────────────┐
│ FINE-TUNING METHOD COMPARISON │
├─────────────────────────────────────────────────────────────────┤
│ │
│ FULL FINE-TUNING │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ALL PARAMETERS UPDATED │ │
│ │ メリット: 最大限の適応、最高のパフォーマンス可能性 │ │
│ │ デメリット: 高コスト、壊滅的忘却のリスク │ │
│ │ メモリ: モデルサイズの4倍(モデル+勾配+オプティマイザ) │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ PARAMETER-EFFICIENT (LoRA) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ONLY ADAPTER PARAMETERS UPDATED │ │
│ │ メリット: 安価、高速、忘却なし、複数アダプタ対応 │ │
│ │ デメリット: パフォーマンスの上限がやや低い │ │
│ │ メモリ: フルファインチューニングの約10-20% │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘この記事の完全な内容(学習データ要件、データバリデーション、計算要件の見積もり、LoRA/QLoRA実装、学習パイプライン、評価、モデルマージ、本番デプロイ、DPO/RLHFパターン等)については、英語版の原文をご参照ください。コードブロックを含む全パターンは英語版と同一の内容です。
ユースケースマッピング
| ユースケース | 推奨アプローチ | 理由 |
|---|---|---|
| カスタマーサポートBot | ハイブリッド | トーン/フォーマットにファインチューニング、知識にRAG |
| コード補完 | ファインチューニング | 特定フォーマット、静的パターン、豊富な学習データ |
| ドキュメントQA | RAG | 動的ドキュメント、事実の正確性が重要 |
| 感情分析 | ファインチューニング | 分類タスク、ラベル付きデータあり |
| 創作文 | プロンプティング | スタイルはプロンプトで指示可能、主観的出力 |
トレードオフ
| 判断項目 | トレードオフ |
|---|---|
| フル vs LoRA | パフォーマンス vs コスト・速度 |
| データ量 | 多い = 品質向上、少ない = 過学習リスク |
| 学習率 | 高い = 速い収束、低い = 安定した学習 |
| エポック数 | 多い = より深い学習、少ない = 過学習防止 |
| ベースモデルサイズ | 大きい = 高品質、小さい = 高速・低コスト |