ファインチューニング(fine-tuning)とは、事前学習済みのLLMを特定のタスクやドメインに合わせて追加学習する手法です。ゼロから学習するのではなく、すでに言語能力を持つモデルを出発点にするため、少ないデータと計算コストで目的の振る舞いに近づけることができます。
なぜファインチューニングが必要か
Section titled “なぜファインチューニングが必要か”汎用LLMは幅広い知識を持ちますが、次のような場面では追加学習が有効です。
- 特定のフォーマットで一貫して出力させたい(例: JSON、医療レポート形式)
- ドメイン固有の語彙や知識を正確に扱いたい(例: 法律文書、製造業マニュアル)
- モデルの応答スタイルや口調を統一したい
- プロンプトエンジニアリングだけでは対応しきれない細かい振る舞いを調整したい
ただし、ファインチューニングにはコストと複雑さが伴います。まずどの手法が自分の用途に適しているかを理解することが重要です。
Full Fine-tuning(全パラメータ更新)
Section titled “Full Fine-tuning(全パラメータ更新)”Full fine-tuning とは、モデルの全ての重みパラメータを学習データで更新する方法です。
モデルが持つ数十億のパラメータすべてが、バックプロパゲーションによって更新されます。学習データへの適合度が最も高く、理論上は最高品質の結果が得られます。
- GPUメモリ: 70億パラメータのモデルをfull fine-tuningするには、数十GBのGPUメモリが必要
- カタストロフィック・フォーゲッティング(catastrophic forgetting): 新しいデータで学習することで、モデルが以前に持っていた汎用能力を失うリスクがある
- コスト: 大規模モデルの場合、数千〜数万ドルの計算コストがかかることがある
Full fine-tuningが有効なのは、品質最優先の本番システムで、かつ十分な計算リソースと大量の高品質データが確保できる場合です。
Parameter-Efficient Fine-Tuning(PEFT)
Section titled “Parameter-Efficient Fine-Tuning(PEFT)”PEFT(Parameter-Efficient Fine-Tuning、パラメータ効率的ファインチューニング)とは、モデルの大半のパラメータを凍結(freeze)し、ごく一部の小さなパラメータだけを学習する手法群の総称です。Hugging Face PEFT は LoRA、QLoRA、Adapter などの PEFT 手法を扱うライブラリです。[3]
なぜPEFTが登場したかというと、モデルが大規模化する一方でfull fine-tuningのコストが現実的でなくなってきたためです。PEFTはfull fine-tuningに匹敵する品質を、はるかに少ない計算資源で達成できることが多くの研究で示されています。
代表的なPEFT手法には、LoRA、QLoRA、Adapterがあります。
LoRA(Low-Rank Adaptation)
Section titled “LoRA(Low-Rank Adaptation)”LoRA(Low-Rank Adaptation)とは、ベースモデルの重みを凍結したまま、小さなアダプター行列を注意機構(attention layers)に追加して学習する手法です。[1]
車全体を塗り替える(full fine-tuning)のではなく、専用のステッカーやデカールを貼る(LoRA)イメージです。車本体(ベースモデル)は変わらず、追加パーツだけで見た目や機能を変えます。
graph LR
I["入力"] --> B["ベースモデル(凍結)"]
I --> LA["LoRAアダプター行列 A (低ランク)"]
LA --> LB["LoRAアダプター行列 B (低ランク)"]
B --> ADD["足し合わせ"]
LB --> ADD
ADD --> O["出力"]LoRAは行列 $W$ の更新 $\Delta W$ を、低ランク行列の積 $A \times B$ で近似します。元の重み行列が $d \times d$ の場合、$\Delta W$ は $d \times r$ と $r \times d$($r \ll d$)の2つの小さな行列に分解されます。学習するのはこの2つの小さな行列だけです。[1]
- 学習するパラメータ数は全体の0.1〜1%程度
- ベースモデルを変えずに複数のLoRAアダプターを切り替えられる
- 推論時にアダプターをベースモデルに統合(マージ)してオーバーヘッドをゼロにできる
- Hugging Face PEFTライブラリで簡単に利用可能
QLoRA(Quantized LoRA)
Section titled “QLoRA(Quantized LoRA)”QLoRA とは、LoRAと量子化(quantization)を組み合わせた手法です。ベースモデルの重みを4ビット精度に圧縮(量子化)することで、大規模モデルのファインチューニングに必要なメモリを大きく下げる手法として提案されました。[2]
通常、モデルの重みはfloat16(16ビット)やfloat32(32ビット)で保存されます。QLoRAでは、ベースモデルの重みをNF4(4-bit Normal Float)形式に量子化して保存します。LoRAのアダプター行列自体はfloat16で学習します。[2]
- 70億パラメータ級のモデルを、24GB級のGPUで扱える可能性がある
- LoRAと同等の品質を保ちつつ、メモリ使用量を大幅に削減
- 量子化による若干の精度低下はあるが、多くのユースケースで許容範囲内
- 個人開発者やスタートアップが手持ちのGPUでモデルをカスタマイズ
- クラウドコストを抑えながら実験を繰り返す場合
Adapter層
Section titled “Adapter層”Adapterレイヤー(Adapter layers)とは、Transformerブロックの間に小さな全結合ネットワークを挿入し、そのネットワークだけを学習する手法です。
各Transformerブロックの後に、「ダウンプロジェクション → 非線形変換 → アッププロジェクション」という小さなモジュールを追加します。ベースモデルのパラメータは凍結されたまま、追加したAdapterモジュールだけが学習されます。
- 推論時に常にAdapterレイヤーが実行されるため、わずかなレイテンシーが増加する
- LoRAより古い手法だが、マルチタスク学習において依然として使われる
- タスクごとに異なるAdapterを差し替えることで、1つのベースモデルを複数のタスクに対応させられる
| 手法 | 学習パラメータ率 | GPUメモリ | フルFT比の品質 | 典型的なユースケース |
|---|---|---|---|---|
| Full fine-tuning | 100% | 非常に高い(数十GB〜) | 基準(最高) | 本番品質、十分なリソースがある場合 |
| LoRA | 0.1〜1% | 中(LoRA部分のみ) | 95〜99% | 素早い実験、複数アダプターの管理 |
| QLoRA | 0.1〜1%(4bit量子化) | 低(コンシューマーGPU可) | 90〜97% | GPU制約がある環境、個人開発 |
| Adapter | 1〜5% | 中低 | 90〜97% | マルチタスク学習、タスク切り替え |
手法の選び方
Section titled “手法の選び方”graph TD
A["ファインチューニングを始める"] --> B{"GPUリソースは?"}
B -->|"コンシューマーGPUのみ"| C["QLoRA"]
B -->|"クラウドGPU / 中規模"| D{"品質 vs コスト"}
D -->|"素早い実験"| E["LoRA"]
D -->|"本番品質最優先"| F{"データ量とコスト"}
F -->|"十分なデータとコスト"| G["Full fine-tuning"]
F -->|"コスト制約あり"| E判断の目安:
- 素早く試したい → LoRA(設定が簡単で品質も高い)
- GPUが限られている → QLoRA(コンシューマーGPUで動作)
- 本番品質が最優先 → Full fine-tuning(データとリソースが確保できる場合)
- 複数タスクに同一モデルを使いたい → Adapter(タスク別に差し替え可能)
- Hugging Face PEFT: LoRA、QLoRA、Adapterを統一的なAPIで利用できるライブラリ
- trl(Transformer Reinforcement Learning): SFT(Supervised Fine-Tuning)やRLHFをサポート[4]
- Unsloth: LoRA/QLoRAの学習を2〜5倍高速化するライブラリ(メモリ効率も改善)
- LlamaFactory: GUI操作でLoRA学習を設定・実行できるツール
よくある質問
Section titled “よくある質問”Q: ファインチューニングにはGPUが必須ですか?
A: Full fine-tuningと通常のLoRAはGPUが必要です。QLoRAは、4bit量子化によって70億パラメータ級のモデルを24GB級のGPUで扱える可能性があります。[2] CPUのみでは学習時間が非現実的になります。
Q: 学習サンプルは何件必要ですか?
A: 振る舞いの微調整なら100〜500件でも効果が出ることがあります。ドメイン適応には1,000〜10,000件が目安です。ただし質が量より重要で、ノイズの多い10,000件より、整理された1,000件の方が良い結果になることが多いです。
Q: 過学習(オーバーフィッティング)するとどうなりますか?
A: モデルが訓練データを「暗記」してしまい、新しい入力に汎化できなくなります。具体的には、訓練データと全く同じ表現しか処理できなくなる、あるいは訓練データに含まれないパターンで品質が急激に落ちる症状が出ます。バリデーションロスを監視し、検証データの損失が上昇し始めたら学習を止めることが重要です。
- LoRA: Low-Rank Adaptation of Large Language Models — LoRAの原論文(Hu et al., 2021)
- QLoRA: Efficient Finetuning of Quantized LLMs — QLoRAの原論文(Dettmers et al., 2023)
- Hugging Face PEFT Documentation — PEFTライブラリ公式ドキュメント
- Hugging Face trl Documentation — SFT・RLHFトレーニングライブラリ