ファインチューニング
事前学習済みモデルを特定のタスクやドメインに適応させる追加学習
AI機械学習
ファインチューニングとは
ファインチューニング (Fine-tuning) は、大量のデータで事前学習 (Pre-training) された基盤モデルに対して、特定のタスクやドメインのデータで追加学習を行い、モデルの振る舞いを調整する手法である。
モデルの重みそのものを更新するため、プロンプトエンジニアリングや RAG では対応しきれない、文体の統一、専門用語の正確な使用、特定フォーマットの出力に効果がある。
RAG vs ファインチューニング vs プロンプトエンジニアリング
| 観点 | プロンプトエンジニアリング | RAG | ファインチューニング |
|---|---|---|---|
| モデルの変更 | なし | なし | 重みを更新 |
| 知識の追加 | プロンプト内のみ | 外部 DB から検索 | 学習データに組み込み |
| コスト | 低い | 中 (検索インフラ) | 高い (GPU 学習) |
| 更新の容易さ | 即時 | ドキュメント追加で即時 | 再学習が必要 |
| 得意なこと | 出力形式の指定 | 最新情報の参照 | 文体・トーンの統一 |
実務では、プロンプトエンジニアリング → RAG → ファインチューニングの順に試し、必要な精度が得られた段階で止めるのが効率的。
ファインチューニングの手法
| 手法 | 説明 | コスト |
|---|---|---|
| Full Fine-tuning | 全パラメータを更新 | 非常に高い |
| LoRA (Low-Rank Adaptation) | 低ランク行列で差分だけ学習 | 低い |
| QLoRA | 量子化 + LoRA | さらに低い |
| Instruction Tuning | 指示-応答ペアで学習 | 中程度 |
LoRA は元のモデルの重みを凍結し、小さなアダプター層だけを学習するため、GPU メモリと学習時間を大幅に削減できる。
AWS での実装
| サービス | 用途 |
|---|---|
| Bedrock Custom Model | Bedrock 上のモデルをファインチューニング |
| SageMaker Training | カスタムの学習ジョブを実行 |
| SageMaker JumpStart | 事前学習済みモデルをワンクリックでファインチューニング |
Bedrock のカスタムモデルは、S3 に学習データ (JSONL 形式) を置くだけでファインチューニングを開始できる。
学習データの準備
ファインチューニングの成否は学習データの品質に大きく依存する。
- 量: 数百〜数千件の高品質なデータが目安。多ければ良いわけではない
- 品質: ノイズや矛盾のないデータ。人手でキュレーションする
- 形式: 指示 (instruction) と応答 (response) のペア
- 多様性: 偏ったデータで学習すると、特定パターンに過学習する
注意点
- 過学習: 学習データに過度に適合し、汎用性が失われる。検証データで精度を監視する
- 壊滅的忘却: ファインチューニングで元の能力が劣化する。LoRA で影響を最小化する
- コスト: GPU インスタンスの時間課金。SageMaker のスポットインスタンスで 70〜90% 削減可能
関連書籍も参考になる。