LoRAアダプタによる継続学習(ローラアダプタニヨルケイゾクガクシュウ)
Low-Rank Adaptation(LoRA)のアダプタをタスクごとに分離して管理し、推論時に動的に切替・合成することで破壊的忘却をほぼ完全に回避する継続学習手法。ベースモデルの重みを凍結しタスク別のパラメータ効率的な差分のみを学習するため、計算コストとメモリ使用量が極めて低い。
LoRAアダプタによる継続学習とは
LoRA(Low-Rank Adaptation)は Hu et al.(2022)が提案したパラメータ効率的ファインチューニング(PEFT)手法で、元の重み行列に低ランクの分解行列(A, B)を追加し、この小さな行列のみを学習する。LoRA を継続学習に応用する場合、タスクごとに別々の LoRA アダプタを用意し、ベースモデルの重みは完全に凍結することで、破壊的忘却を原理的に回避する。
2024-2025年にかけて、Hugging Face の PEFT ライブラリが LoRA アダプタの動的ロード・切替を標準サポートし、LoRA ベースの継続学習は実用レベルに到達している。
LoRAの基本原理
LoRA は、事前学習済みの重み行列 W₀ ∈ R^{d×k} に対して、低ランク行列の積 BA を追加する。
W = W₀ + BA
B ∈ R^{d×r}, A ∈ R^{r×k} (r << min(d,k))
- W₀ は凍結(勾配計算なし)
- B, A のみを学習
- ランク r は通常 4-64(d=4096 に対して 0.1-1.6%)
- パラメータ数: r×(d+k) vs 元の d×k(数十〜数百分の1)
継続学習での活用パターン
パターン1: タスク別アダプタ(最もシンプル)
各タスクに専用の LoRA アダプタを用意し、推論時にタスクに応じて切替える。
| タスク | アダプタ | サイズ(7Bモデル, r=16) | 用途 |
|---|---|---|---|
| 日本語特化 | lora_ja | 約 20MB | 日本語応答 |
| コード生成 | lora_code | 約 20MB | プログラミング |
| 医療 | lora_medical | 約 20MB | 医療QA |
| 法律 | lora_legal | 約 20MB | 法律相談 |
| 数学 | lora_math | 約 20MB | 数学推論 |
忘却率: 理論上 0%(ベースモデル不変、アダプタ独立)
パターン2: LoRA Composition(合成)
複数のLoRAアダプタを加重平均して同時に適用する。
W = W₀ + α₁·B₁A₁ + α₂·B₂A₂ + ... + αₙ·BₙAₙ
- α_i は各アダプタの重み(合計1に正規化)
- 例: 日本語(0.5) + 医療(0.3) + 丁寧語(0.2) = 日本語医療丁寧QA
- 組み合わせの自由度が高いが、干渉が起きる場合もある
パターン3: LoRA as MoE(Mixture of LoRA Experts)
入力に応じて最適なLoRAアダプタを自動選択するルーター機構を追加。
- ルーターネットワーク: 入力の embedding から各アダプタのゲート値を計算
- Top-k 選択: ゲート値上位 k 個のアダプタのみ活性化
- 勾配の逆伝播: ルーターも一緒に学習
- MoLoRA(Mixture of LoRA)として論文化
パターン4: Progressive LoRA
新タスクの学習時に、前のタスクのLoRAアダプタの上に新しいLoRA層を追加し、階層的に能力を積み上げる。
ツール・ライブラリ
| ツール | 開発元 | LoRAサポート | 継続学習機能 | 動的切替 |
|---|---|---|---|---|
| PEFT | Hugging Face | LoRA/QLoRA/DoRA | アダプタ管理 | ○ |
| LLaMA-Factory | hiyouga | LoRA + 30手法 | マルチアダプタ | ○ |
| Axolotl | OpenAccess | LoRA/QLoRA | 設定ベース | △ |
| Unsloth | Unsloth AI | LoRA(2x高速) | メモリ最適化 | △ |
| vLLM | UC Berkeley | LoRA推論 | 動的ロード | ◎ |
| TensorRT-LLM | NVIDIA | LoRA推論 | 動的ロード | ◎ |
vLLMでの動的LoRA切替
vLLM はサービング時に複数のLoRAアダプタを同時にロードし、リクエストごとに異なるアダプタを適用する機能を標準サポート。GPU メモリ上にベースモデル1つ + 複数のLoRAアダプタ(各数十MB)を保持し、リクエストのメタデータに応じて切替える。
パフォーマンス比較
| 手法 | 訓練コスト(vs全体FT) | 推論オーバーヘッド | 忘却率 | ストレージ/タスク |
|---|---|---|---|---|
| 全体ファインチューニング | 100% | 0% | 25-40% | モデル全体 |
| EWC | 110-120% | 0% | 8-18% | Fisher行列 |
| Experience Replay | 130-150% | 0% | 3-12% | バッファデータ |
| LoRA(タスク別) | 2-5% | 1-3% | ≈0% | 10-50MB/タスク |
| LoRA Composition | 2-5% | 3-8% | ≈0% | 10-50MB/タスク |
| LoRA as MoE | 5-10% | 5-10% | ≈0% | 10-50MB/タスク + ルーター |
ベストプラクティス
- ランク r の選択: 汎用タスクは r=16-32、専門ドメインは r=64-128。ランクが高いほど表現力は増すがメモリ使用量も増加
- 適用層の選択: Attention の Q,V 行列への適用が標準。K 行列やFFNへの適用で性能が向上する場合もあるがコストも増加
- QLoRA の活用: ベースモデルを 4bit 量子化してメモリを節約しつつ LoRA を学習。24GB GPU で 70B モデルの LoRA 学習が可能
- DoRA(Weight-Decomposed LoRA)の検討: 重みの方向と大きさを分離して適応する改良版。LoRA より 1-3% 精度向上の報告
- アダプタの命名規則:
{model}_{task}_{version}_{rank}形式(例:llama3-8b_medical_v2_r32)で管理
よくある質問(FAQ)
Q1: LoRAアダプタは何個まで管理できますか? A: ストレージ上は事実上無制限(1アダプタ 10-50MB)。GPU メモリ上の同時ロード数は vLLM で 100+ アダプタが可能(7Bモデル + 100アダプタ × 20MB = 基本 14GB + アダプタ 2GB 程度)。実用上はルーティングの複雑さと品質管理がボトルネック。
Q2: LoRA Composition で異なるドメインのアダプタを混ぜると性能が劣化しませんか? A: 関連性の高いアダプタ(日本語+医療)は高い相乗効果を示すが、無関係なアダプタ(コード生成+感情分析)の合成は性能劣化の原因になりうる。合成前にバリデーションセットで評価し、合成後の性能が各単体の95%以上を維持することを確認するのが推奨。
Q3: LoRAとフルファインチューニングの品質差は? A: 標準的なタスクでは LoRA(r=32)はフルFTの 95-98% の性能を達成。高度な推論やドメイン特化では差が開く場合があるが、QLoRA + 高ランク(r=128)でほぼ埋められる。コスト差(2-5% vs 100%)を考慮すると、ほとんどの実用場面で LoRA が優位。
まとめ
- LoRA アダプタ切替は破壊的忘却をほぼ完全に回避できる最も実用的な継続学習手法
- タスク別アダプタ・Composition・MoE の3パターンが主要な活用形態
- 訓練コストは全体FTの2-5%、ストレージは10-50MB/タスクと極めて効率的
- vLLM/TensorRT-LLMで推論時の動的切替が実用化済み
- QLoRA + DoRA の組み合わせが 2025 年時点のベストプラクティス