AI・機械学習
上級
LoRA(低ランクアダプテーション)(ローラ テイランクアダプテーション)
LLMのファインチューニングを少数の追加パラメータで実現するPEFT手法。元の重み行列を凍結し、低ランク行列ΔW=BA(B∈R^{d×r}, A∈R^{r×k}, r≪d)を追加することでGPUメモリを大幅に削減する。
0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
PEFT
ファインチューニング
LoRA
LLM
低ランク近似
LoRA(低ランクアダプテーション)
概要
LoRA(Low-Rank Adaptation of Large Language Models)は、LLMのファインチューニングを学習パラメータ数の大幅削減で実現するPEFT(Parameter-Efficient Fine-Tuning)手法だ。Hu et al.(2021, ICLR 2022)がMicrosoftで発表し、現在オープンソースLLM・画像生成モデルのファインチューニングの事実上の標準となっている。
核心アイデア:低ランク行列の追加
LLMの重み行列 W₀ ∈ R^{d×k} を**凍結(Frozen)**し、学習可能な低ランク行列ペアを追加する:
W = W₀ + ΔW = W₀ + BA
B ∈ R^{d×r} (初期値: ゼロ行列)
A ∈ R^{r×k} (初期値: ランダム)
r ≪ min(d, k) (ランクrは非常に小さい値、例: 4〜64)
推論時は W₀ + BA を事前計算してマージするため、推論速度の低下はゼロ。
パラメータ削減の規模
GPT-3(175B パラメータ)への適用例:
| 設定 | 学習パラメータ数 | GPUメモリ(概算) |
|---|---|---|
| フルFT | 175B | 2,800 GB |
| LoRA r=4 | 4.7M | 約24 GB |
| LoRA r=16 | 18.9M | 約32 GB |
学習パラメータが175B→18.9M(約0.01%)に圧縮される。
実装例(Hugging Face PEFT)
from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM
# ベースモデルのロード
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
# LoRA設定
config = LoraConfig(
r=16, # ランク
lora_alpha=32, # スケーリング係数
target_modules=["q_proj", "v_proj"], # 適用する層
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM
)
# LoRAモデル作成
model = get_peft_model(model, config)
model.print_trainable_parameters()
# trainable params: 3,407,872 || all params: 8,033,669,120 || trainable%: 0.04
ハイパーパラメータ
- r(ランク): 小さいほどパラメータ削減(4〜64が一般的、r=16が実用バランス)
- alpha(スケーリング):
alpha/rがLoRAの重みのスケール。通常alpha=2r - target_modules: LoRAを適用するAttention層(q_proj/v_proj/k_proj/o_projなど)
- dropout: 過学習防止(0.05〜0.1)
LoRAの変種
| 手法 | 特徴 |
|---|---|
| QLoRA | 4bit量子化ベースモデル + LoRA → 70Bモデルを1枚のGPUで学習 |
| AdaLoRA | ランクrを層ごとに自動調整 |
| DoRA | 重みを方向・大きさに分解してLoRA適用 |
| IA³ | スケーリングベクトルのみ学習(LoRAより軽量) |
Stable Diffusionとの普及
LoRAは画像生成AIでも爆発的に普及した:
- キャラクターLoRA: 特定のキャラクター・人物の外見をSD-XLに学習
- スタイルLoRA: 画風・色調を数百枚の画像から学習
- CivitAI: LoRAファイル(.safetensors)の配布・共有プラットフォームが成立