ファインチューニング

事前学習済みモデルを特定のタスクやドメインに適応させる追加学習

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% 削減可能

関連書籍も参考になる。

関連用語