大規模言語モデルのファインチューニングを低コストで実現するパラメータ効率的手法。元のモデル重みを凍結し、低ランク行列の積(A×B)を各層に追加して学習する。学習パラメータ数を全体の0.1〜1%に抑えつつ、フルファインチューニングに匹敵する性能を達成。Microsoft Researchが2021年に発表。
LoRA(Low-Rank Adaptation)は、大規模言語モデル(LLM)のファインチューニングを低コストで実現するパラメータ効率的手法である。Microsoft ResearchのEdward Hu et al.が2021年に発表した。元のモデルの重みを凍結したまま、各Transformer層のAttention/FFN行列に低ランク行列ペア(A×B)を追加して学習する。学習パラメータ数を全体の0.1〜1%に抑えつつ、フルファインチューニングに匹敵する性能を達成する。
事前学習済みモデルの重み行列 W₀ ∈ ℝ^{d×k} に対し、更新量 ΔW を低ランク行列の積で近似する:
W = W₀ + ΔW = W₀ + B × A
ここで A ∈ ℝ^{r×k}、B ∈ ℝ^{d×r}。r はランク(通常 4〜64)で、d や k に比べて非常に小さい。
| パラメータ | 説明 | 典型値 |
|---|---|---|
| d | 入力次元 | 4,096(Llama 3 8B) |
| k | 出力次元 | 4,096 |
| r | LoRAランク | 8〜64 |
| α | スケーリング係数 | 16〜32 |
| フルパラメータ数 | d × k | 16,777,216 |
| LoRAパラメータ数 | (d + k) × r | 65,536(r=8の場合) |
| 圧縮率 | 約256倍 |
LoRAは通常、Transformer層の以下の重み行列に適用する:
全てに適用するか、Q/V のみに適用するかはタスクとVRAM制約で選択する。
| 項目 | フルファインチューニング | LoRA(r=16) |
|---|---|---|
| 学習パラメータ数(Llama 3 8B) | 80億 | 約3,000万(0.4%) |
| 必要VRAM(8Bモデル) | 約80GB(A100×2) | 約16GB(A100×1) |
| 学習時間(10K samples) | 約8時間 | 約2時間 |
| アダプタファイルサイズ | 16GB(全重み) | 約50MB |
| マージ後の推論速度 | 同等 | 同等(マージ後) |
| 性能(一般タスク) | 100%(基準) | 約95〜100% |
| ランク r | パラメータ数 | 推奨用途 |
|---|---|---|
| 4 | 最小 | 単純なスタイル適応、軽量タスク |
| 8 | 少 | 汎用的なファインチューニング |
| 16 | 中 | ドメイン特化、中規模データセット |
| 32 | 多 | 複雑なタスク、大規模データセット |
| 64 | 最大 | フルファインチューニングに近い品質が必要な場合 |
一般的に r=8〜16 がコストと性能のバランスが良い。r を大きくすると性能は向上するが、VRAMと学習時間も増加する。
| 手法 | 年 | 特徴 |
|---|---|---|
| LoRA | 2021 | オリジナル。A×B低ランク行列 |
| QLoRA | 2023 | 4bit量子化 + LoRA。VRAM大幅削減 |
| LoRA+ | 2024 | A/Bに異なる学習率を適用 |
| DoRA | 2024 | 重みを方向と大きさに分解 |
| rsLoRA | 2024 | ランクに応じたスケーリング改善 |
| GaLore | 2024 | 勾配を低ランク射影して省メモリ化 |
| ツール | 開発元 | 特徴 |
|---|---|---|
| Hugging Face PEFT | Hugging Face | LoRA/QLoRA/AdaLoRA等の統合ライブラリ |
| Unsloth | Unsloth AI | 2〜5倍高速化、メモリ70%削減 |
| Axolotl | OpenAccess AI | YAML設定ベースの簡易ファインチューニング |
| LLaMA-Factory | hiyouga | GUI付きの多手法対応ツール |
| torchtune | Meta | PyTorch公式のLLMファインチューニングツール |
データセットが10万件以下、VRAMが限られている(A100 1枚以下)場合はLoRAが推奨。100万件以上の大規模データセットで最高性能を求める場合はフルファインチューニングが有利だが、コスト差は10倍以上になる。
可能。異なるタスク向けのLoRAアダプタを動的にロード・切替できる(LoRA Serving)。ベースモデルをメモリに1つ保持し、リクエストに応じてアダプタを差し替えることで、1つのGPUで複数の特化モデルを運用できる。
原理は同じ低ランク適応だが、適用対象が異なる。Stable DiffusionではU-NetのCross-Attention層に適用し、特定の画風・キャラクターを学習する。LLMではTransformer全層のAttention/FFNに適用する。