転移学習ロードマップ
3ステージでマスターする『学習済みモデルの賢い使い方』
📅 2025-04-28
🔍 なぜ転移学習か?
フルスクラッチ | 転移学習 | |
---|---|---|
学習データ | 数十万〜数千万 | 100〜数千で OK 👍 |
学習時間 | 数時間〜数週間 | 数分〜数時間 ⏱️ |
GPU コスト | $$$ | $ 💰 |
精度 | データが多ければ最強 | 小データでも高精度 📈 |
エッセンス:大規模データで得た"基礎知識"を 再利用 し、少データのタスクへ "引き継ぐ"
🗺️ ロードマップ全体像
Stage 0
特徴量抽出
(Feature Extract)
(Feature Extract)
Stage 1
フルファインチューン
(Full Fine-tune)
(Full Fine-tune)
Stage 2
軽量微調整
(LoRA / QLoRA)
(LoRA / QLoRA)
Stage 3
Few-shot
Prompting
Prompting
• Stage 0: 重みを凍結し「特徴量抽出器」として使う
• Stage 1: 全層を再学習=フルファインチューニング
• Stage 2: アダプタ層のみ学習=軽量ファインチューニング
• Stage 3: 重みを一切触らず、プロンプトや数個の例で性能を引き出す
0️⃣ Stage 0 — 特徴量抽出(全凍結)
使いどころ 🎯
- データがごく少量(<1k)
- モデルを"下流モデル"の前処理に使いたい
実装例(画像分類 × PyTorch) 💻
from torchvision import models
backbone = models.efficientnet_b0(weights="IMAGENET1K_V1")
backbone.classifier[1].requires_grad_(False) # 全層凍結
# 特徴量 1280-d → 自前分類器
import torch.nn as nn
model = nn.Sequential(
backbone,
nn.Linear(1000, 128),
nn.ReLU(),
nn.Linear(128, 5) # クラス数
)
• メリット:学習パラメータが最後の層のみ → 過学習しにくい
• デメリット:データが増えても"基礎特徴"を更新できない
1️⃣ Stage 1 — フルファインチューニング
使いどころ 🎯
- データ 5k〜数万
- ハード要件:GPU RAM ≧ 24 GB(Vision) / 48 GB(LLM)
実装例(NLP × Hugging Face) 💻
from transformers import AutoModelForSequenceClassification, Trainer
model = AutoModelForSequenceClassification.from_pretrained(
"microsoft/deberta-v3-base",
num_labels=3
)
trainer = Trainer(
model=model,
train_dataset=train_ds,
eval_dataset=val_ds
)
trainer.train()
• テクニック:学習率を 1e-5〜2e-5、Layer-wise LR Decay を使うと安定
• 注意:Catastrophic Forgetting(元知識の喪失)を避けるため小 LR & Early Stop
2️⃣ Stage 2 — 軽量ファインチューニング
メソッド | 仕組み | メモリ削減 |
---|---|---|
LoRA | 重みに ΔW = ABᵀ を追加(低ランク行列のみ学習) | ↓ 10–30× |
QLoRA | 4bit 量子化 + LoRA | ↓ 20–40× |
IA³, Adapter | 各層に 1D ゲインを学習 | ↓ 15× |
実装例(QLoRA × 8 GB GPU) 💻
from peft import LoraConfig, get_peft_model
base = "meta-llama3-8b"
model = AutoModelForCausalLM.from_pretrained(
base,
load_in_4bit=True
)
lora_cfg = LoraConfig(
task_type="CAUSAL_LM",
r=8,
lora_alpha=32,
target_modules=["q_proj","v_proj"]
)
model = get_peft_model(model, lora_cfg)
model.train() # 数時間で完了
3️⃣ Stage 3 — Few-shot / Prompt Tuning
パターン 🔄
-
Few-shot Prompt
Q: テキスト → ポジ/ネガ? A: ネガ ...
-
Instruction Tuning(例: Alpaca, Flan)
・ 既存データを"指示+応答"形式へ再構成
-
Prefix / Soft Prompt
・ Embedding に学習可能な"仮想トークン"を追加(パラメータ 1–5 %)
データ量 | ベストプラクティス |
---|---|
10 件未満 | Zero/Few-shot Prompt |
10–1000 | Prefix Tuning / Soft Prompt |
1k 以上 | LoRA → フルファイン ←データが多ければ |
📊 ケーススタディ
業界 | タスク | Stage | 成果 |
---|---|---|---|
医療 | CT 画像の腫瘍分類 | Stage 0 (EffNet) | 精度 89→94 % / データ 800 枚 |
チャットサポート | FAQ ボット | Stage 2 (QLoRA) | 精度 74→92 %、RAM 12 GB |
金融 | 決算要約 | Stage 3 (Instr. Tuned Llama) | 要約品質 +1.2 ROUGE |
❓ よくある Q&A
Q1. どのプレトレモデルを選ぶ?
Vision: 自然画像→ImageNet ViT/ConvNeXt。特殊なら MedSAM・PlantDoc 等を探す
NLP : モノリンガル→Llama-3, 多言語→XLM-R or mT5
NLP : モノリンガル→Llama-3, 多言語→XLM-R or mT5
Q2. データが極端に偏っている
Stage 0 or 2 で Class Weight/ Focal Loss。必要なら Data Augment (MixUp, CutMix)
Q3. ライセンス問題は?
商用利用なら Apache-2 or MIT を選択。Llama-3 は Community License で制限あり。
✅ チェックリスト
- プレトレモデルとタスクのドメイン整合を確認
- GPU/VRAM とメソッド選択 (LoRA ≒ 8 GB, QLoRA ≒ 6 GB)
- 評価指標(F1, ROUGE, mAP …)を事前定義
- 早期停止 & 学習曲線で過学習監視
- 推論時量子化 (INT8) の有無でサービングコスト最小化
📝 まとめ
-
1転移学習は Stage 0 → 3 の階段。データ量・リソース・精度で選択。
-
2軽量化手法(LoRA/QLoRA)により ノート PC でも LLM 微調整が現実的。
-
3成功の鍵は ドメイン近接性 と 適切な正則化。
-
4実装は Hugging Face + PEFT が最速。まずは Stage 0 → 逐次アップグレードがおすすめ。
行動アイテム
- 自分のデータサイズを数えて Stage を決定
- ベースモデルをライセンス込みで選定
- PEFT or Trainer でファインチューニングを試してみましょう!