Skip to content

ファインチューニングパターン

注: この記事は英語版からの翻訳です。コードブロック、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
コード補完ファインチューニング特定フォーマット、静的パターン、豊富な学習データ
ドキュメントQARAG動的ドキュメント、事実の正確性が重要
感情分析ファインチューニング分類タスク、ラベル付きデータあり
創作文プロンプティングスタイルはプロンプトで指示可能、主観的出力

トレードオフ

判断項目トレードオフ
フル vs LoRAパフォーマンス vs コスト・速度
データ量多い = 品質向上、少ない = 過学習リスク
学習率高い = 速い収束、低い = 安定した学習
エポック数多い = より深い学習、少ない = 過学習防止
ベースモデルサイズ大きい = 高品質、小さい = 高速・低コスト

参考文献

MITライセンスの下で公開。Babushkaiコミュニティが構築。