LoRA(Low-Rank Adaptation)(ローラ)
大規模言語モデルのファインチューニングにおいて、元のモデルパラメータを凍結したまま低ランク行列を注入して追加学習する手法。Microsoftが2021年に提案し、VRAM使用量と学習時間を大幅に削減しながら高い精度を維持する。
LoRA(Low-Rank Adaptation)とは、事前学習済みモデルの重み行列を直接更新するのではなく、低ランクの分解行列(A行列とB行列)を追加して学習する手法である。Edward Hu氏らがMicrosoft Research在籍時に2021年の論文「LoRA: Low-Rank Adaptation of Large Language Models」で提案した。
概要
従来のFull Fine-tuningではモデルの全パラメータ(例: Llama 3.1 8Bで約80億個)を更新するため、大量のVRAMと計算資源が必要だった。LoRAは重み行列W(d×d)に対し、低ランク行列の積 B×A(d×r + r×d、r << d)を加算することで、更新パラメータ数を数百分の1に削減する。
数学的には: W' = W + ΔW = W + B×A(Bはd×r、Aはr×d、rはランク)
ランクrは通常8〜128に設定される。r=16の場合、Llama 3.1 8Bモデルの更新パラメータは約4,000万個(全体の0.5%)に過ぎない。
主な特徴・仕組み
- パラメータ効率: 全パラメータの0.1〜1%のみを学習。7Bモデルで更新パラメータは数千万個
- VRAM削減: Full FTの1/3〜1/4のVRAMで済む。7Bモデルが16GB VRAMで学習可能
- 学習速度: Full FTの2〜3倍高速。勾配計算の対象が少ないため
- 精度維持: Full FTの95〜99%の精度を維持。多くのベンチマークで同等性能
- アダプタ交換: ベースモデルを共有し、タスク別のLoRAアダプタを切り替え可能
- マージ可能: 学習後にアダプタをベースモデルにマージして推論オーバーヘッドゼロ化
- 適用層選択: Attention層(Q, K, V, O)に適用するのが標準。MLP層への適用も効果的
- スケーリング係数α: α/rでアダプタの影響度を制御。α=16〜32が一般的
LoRAの主要パラメータ設定ガイド
| パラメータ | 推奨値 | 説明 |
|---|---|---|
| rank (r) | 8-64 | 低ランク行列の次元。大きいほど表現力増、VRAM増 |
| alpha (α) | r×1〜r×2 | スケーリング係数。α=2rが安定的 |
| target_modules | q_proj, v_proj, k_proj, o_proj | 適用対象の線形層 |
| dropout | 0.05-0.1 | LoRA層のドロップアウト率 |
| learning_rate | 1e-4〜5e-4 | Full FTより10倍程度高く設定可能 |
| epochs | 1-3 | 過学習防止のため少なめに |
発展手法:LoRAの派生技術
LoRAの成功を受け、多数の改良手法が提案されている:
- QLoRA(2023): 4bit量子化 + LoRA。VRAM使用量をさらに50%削減
- DoRA(2024): 重みの方向と大きさを分離して学習。LoRAより1-3%精度向上
- LoRA+(2024): A行列とB行列に異なる学習率を設定。収束速度2倍
- rsLoRA(2024): ランクに応じたスケーリング補正。高ランクでの安定性向上
- GaLore(2024): 勾配の低ランク射影。事前学習にも適用可能
- Turbo LoRA(2025): バッチ処理最適化で学習スループット3倍
実装例:Unslothでの7Bモデル LoRA学習
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Meta-Llama-3.1-8B",
max_seq_length=2048,
load_in_4bit=True, # QLoRA
)
model = FastLanguageModel.get_peft_model(
model, r=16, lora_alpha=32,
target_modules=["q_proj","k_proj","v_proj","o_proj"],
lora_dropout=0.05,
)
上記の設定でRTX 4090(24GB)1枚で約1.5時間の学習が可能(データセット5,000件の場合)。
よくある質問(FAQ)
Q1: LoRAのランク(r)はどう選べばよい? A: 一般的なタスクではr=16〜32で十分。複雑なドメイン適応にはr=64〜128を試す。r=8未満は精度低下が目立つ。VRAMに余裕があればr=32から始め、精度とリソースのバランスを見るのが実践的。
Q2: LoRAアダプタのファイルサイズはどのくらい? A: 7Bモデルのr=16 LoRAアダプタは約30〜50MB。ベースモデル(約14GB fp16)と比較して1/300以下。複数のタスク別アダプタを保持しても容量負担は極めて小さい。
Q3: LoRAをマージするメリットは? A: マージ後は通常のモデルと同じ推論速度になり、アダプタ読み込みのオーバーヘッドがゼロ。ただしマージすると他のアダプタとの切り替えができなくなる。本番デプロイ時にマージ、開発時は分離が一般的。
まとめ
- LoRAはFull FTの0.1〜1%のパラメータで95〜99%の精度を実現する革命的手法
- VRAM 16GBで7Bモデルの学習が可能。個人GPU環境でのLLMカスタマイズを民主化
- r=16〜32、α=2r、Attention全層適用が安定した出発点
- QLoRA、DoRA、LoRA+など後続改良が活発。2026年もPEFTの主流手法であり続けている