7.

ファインチューニングとは?LoRA・QLoRA・SFT・RLHF/DPO

編集

本稿は ファインチューニング(Fine-tuning) に関する記事です。

この記事の要点
  • ファインチューニング = 事前学習済みモデルを少量のデータで用途特化する追加学習
  • 分類: SFT(教師あり)/ RLHF・DPO(嗜好学習)/ ドメイン適応
  • 軽量化手法: LoRA / QLoRA / PEFT — 一部パラメータだけ更新、個人 GPU でも可能
  • ハードル: 良質な教師データが命。1000〜数万件レベルでも効くケースが多い
  • 主要ツール: Hugging Face TRL / PEFT、Axolotl、Unsloth、OpenAI / Anthropic の Fine-tuning API
  • 選定の鉄則: まず Prompt Engineering と RAG で十分か検討してからファインチューニングへ

ファインチューニングとは?

ファインチューニング (Fine-tuning) は、事前学習済みのモデル(基盤モデル)を小規模なタスク特化データで追加学習し、特定の用途・文体・タスクに最適化する手法です。「微調整」と訳されることもあります。

巨大モデルをゼロから学習するのは数千〜数万 GPU × 数ヶ月かかりますが、ファインチューニングは個人 GPU でも数時間〜数日で完了するため、業務へのカスタマイズ手段として広く使われます。

主な種類

種類目的データ形式
SFT (Supervised Fine-Tuning)指示と理想の応答を教える(入力, 出力)ペア
Instruction Tuning指示への従順さを獲得(指示, 入力, 出力) 3 つ組
ドメイン適応 (Continual Pretraining)専門分野のテキストで知識を吸収大量の生テキスト
RLHF人間の好みで応答品質を整える(プロンプト, 応答A, 応答B, 選好)
DPO (Direct Preference Optimization)RLHF の簡略版・現代主流(プロンプト, chosen, rejected)
分類器ファインチューニングBERT 等で分類タスク(テキスト, ラベル)

軽量ファインチューニング(PEFT)

フルファインチューニングは数十 GB の VRAM を必要とするため、一部のパラメータだけ更新する PEFT (Parameter-Efficient Fine-Tuning) が広く使われます。

手法概要特徴
LoRA (Low-Rank Adaptation)低ランク行列のみ学習VRAM 1/10、学習速度速い、複数 LoRA を切替可能
QLoRA4-bit 量子化 + LoRA7B モデルが 8GB GPU で学習可能に
Adapter Tuning各層に小さなアダプタ層を追加LoRA の前身
Prefix / Prompt Tuning埋め込み Prefix を学習非常に軽量だが品質はやや劣る
IA³少数のスケーリング係数のみ学習超軽量
DoRALoRA の改良。方向とノルムを分離LoRA より高精度

典型ワークフロー

ステップ内容
1. 課題定義「何ができるようになって欲しいか」を明確に
2. ベースラインPrompt + RAG で達成可能か試す(多くはここで十分)
3. データ収集1k〜10k 件程度を目安に良質な (入力, 出力) ペアを集める
4. データクリーニング重複削除・形式統一・PII マスキング
5. ベースモデル選定Llama / Mistral / Qwen / Gemma など。サイズ・ライセンス考慮
6. 学習設定LoRA ランク・学習率・エポック数
7. 学習実行GPU + Hugging Face TRL / Unsloth / Axolotl
8. 評価保持データで自動評価 + 人手評価
9. デプロイマージしたモデルを推論サーバへ。LoRA のまま切替も可
10. 監視・再学習本番ログをサンプリングして次回データに

主要ツール

ツール役割
Hugging Face TRLSFT / DPO / RLHF の高レベル API
Hugging Face PEFTLoRA / QLoRA / IA³ 等の実装
Hugging Face Transformers + Accelerate学習の土台と分散補助
Unsloth軽量・高速ファインチューニング(個人 GPU 向け)
Axolotl設定ファイルベースの実装フレームワーク
LLaMA-FactoryGUI 付き OSS ファインチューニング
OpenAI Fine-tuning APIGPT 系を SaaS でファインチューニング
Anthropic / Google限定的に API 経由のファインチューニング
AWS Bedrock / Vertex AIマネージドファインチューニング

QLoRA 最小サンプル

from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
from trl import SFTTrainer
from datasets import load_dataset

# 4-bit 量子化設定
bnb_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4")

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B",
    quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B")

# LoRA 設定
lora_config = LoraConfig(r=16, lora_alpha=32, lora_dropout=0.05,
    target_modules=["q_proj", "v_proj"], task_type="CAUSAL_LM")
model = get_peft_model(model, lora_config)

# データセット (ダミー例)
dataset = load_dataset("tatsu-lab/alpaca", split="train[:1000]")

# 学習
trainer = SFTTrainer(model=model, tokenizer=tokenizer,
    train_dataset=dataset, dataset_text_field="text", max_seq_length=512)
trainer.train()
trainer.model.save_pretrained("./my-lora")

ファインチューニング vs RAG vs プロンプト

課題 推奨手段
最新情報・社内文書の参照RAG
出力形式・口調の固定プロンプト または ファインチューニング
特定の専門領域の深い知識ドメイン適応 + RAG
応答の安全性 / 偏りの抑制RLHF / DPO
特殊な構造化出力(JSON 厳密)ファインチューニング または Structured Output
レイテンシ削減(小モデル化)蒸留 + ファインチューニング
軽い試行錯誤・短納期プロンプト最優先

業務開発の鉄則は「プロンプト → RAG → ファインチューニング」の順に試すこと。多くは前 2 段で十分です。

運用上のヒント

Tips
  • 少量高品質 が原則: 1 万件のゴミより 1000 件の良データ
  • データ作成はLLM で下書き → 人間が校正のループが効率的
  • LoRA は用途別に複数学習して切替可能(複数ペルソナ・複数言語)
  • 評価セットは学習前に固定(途中で変えない)
  • ベース LLM のライセンスを必ず確認(Llama Community License、Apache 2.0 等)
  • 本番ではマージ済みフルモデルLoRA のまま運用するかをデプロイ要件で決める
  • 過学習防止に早期停止検証データの監視

注意点

よくある落とし穴
  • カタストロフィックフォゲッティング: 元々持っていた一般能力が消える。データ多様性を確保
  • データ漏洩: 個人情報・機密が学習データに紛れる → 出力で漏れるリスク
  • ベースモデル選定ミス: 小さすぎるとタスクに耐えない、大きすぎると VRAM 不足
  • 評価軽視: 学習時 loss だけ見て本番品質を担保できない
  • 商用ライセンス違反: 学習データやベースモデルの利用条件を逸脱
  • 新モデル登場で陳腐化: 半年〜1 年でベースが世代交代する
  • 過剰投資: プロンプトと RAG で済む課題に高コストなファインチューニングを当てる

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. LLM (大規模言語モデル)
  2. Transformer
  3. Attention (注意機構)
  4. Embedding (埋め込み)
  5. Prompt Engineering
  6. RAG (検索拡張生成)
  7. ファインチューニング
  8. AIエージェント
  9. マルチモーダルAI
  10. トークンとコンテキストウィンドウ
  11. Diffusion Model (拡散モデル)

最近更新/作成されたページ