ファインチューニングとは
事前学習済みモデルを追加学習し、特定タスクやドメインへ適応させる手法
ひとことで言うと
すでに学習済みのAIモデルに、追加のデータを覚えさせて特定の用途に特化させること。
概要
ファインチューニングは、大規模コーパスで事前学習済みのモデルを、より小規模でタスク・ドメイン固有のデータセットを使って追加学習する手法。 ゼロからモデルを訓練する場合と比べ、事前学習で獲得した言語理解や一般知識をベースに重みをわずかに調整するだけで済むため、必要な計算資源・データ量・学習時間を抑えられる。 全パラメータを更新するフルファインチューニングに加え、LoRAやアダプタのように一部パラメータのみを追加・更新するパラメータ効率的手法(PEFT)が普及しており、個人や小規模チームでも限られたGPU資源で独自モデルを構築できるようになった。 カスタマーサポートの文体統一、特定ドメイン(医療・法律など)への特化、指示追従性の向上といった用途で広く使われる。
背景
歴史
2018年: ULMFiTとBERTがNLPにおける事前学習→ファインチューニングの流れを普及。 2021-2022年: LoRAやアダプタなどパラメータ効率的手法がコストを削減。 2023年以降: 指示チューニングとRLHFがLLMのアライメント手法として標準化。
アーキテクチャ
事前学習時と同一のベースアーキテクチャを使用。 学習目的・データセット・場合によっては一部パラメータ(LoRAアダプタ等)のみが変わる。
ワークフロー
ベースモデル選定 → ラベル付き/指示データセット準備 → 学習(フルまたはパラメータ効率的) → 評価 → 特化モデルのデプロイ。
コード例
LoRAファインチューニング設定(概念例)
from peft import LoraConfig, get_peft_model
config = LoraConfig(r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"])
model = get_peft_model(base_model, config)利点
- 狭いドメイン固有タスクでの性能を向上させる
- パラメータ効率的手法により限られた計算資源でも利用しやすい
欠点
- 汎用能力を失う破滅的忘却のリスクがある
- タスク固有の厳選された学習データが必要
比較
- 転移学習 — ファインチューニングは転移学習を実現する代表的な具体的手法
- RAG — ファインチューニングは知識を重みに焼き込む。RAGは推論時に検索する
- LoRA — LoRAは学習対象パラメータを絞りフルファインチューニングよりGPUメモリを抑えられる代替手法として広く使われる
- SLM — SLMは知識蒸留やファインチューニングにより特定タスクの性能を高めることが多い
- プロンプトエンジニアリング — プロンプトエンジニアリングは入力側の工夫にとどまるのに対し、ファインチューニングはモデルの重みを直接調整する
- アライメント — アライメントは、指示チューニング等のファインチューニングを通じて実現されることが多い
- RLHF — RLHFは、教師ありファインチューニングの後段で追加的に適用されることが多い
- Llama — Llamaは重みが公開されているため、独自データでのファインチューニングに広く利用される
- データポイズニング — データポイズニングは、事前学習だけでなくファインチューニング用のデータセットに対しても行われうる
関連用語
よくある質問
RAGではなくファインチューニングを選ぶべき場面は?
モデルの挙動やスタイルを一貫して変えたい場合はファインチューニング。 最新または大規模な外部知識が必要な場合はRAGが適する。
参考文献
- DocumentationOpenAI Fine-tuning Guide
- GitHubHugging Face PEFT