LLM低ランク分解(エルエルエムテイランクブンカイ)
LLMの重み行列を低ランクの行列積に分解してパラメータ数を削減する手法。LoRA(Low-Rank Adaptation)の理論的基盤であり、SVD分解やTensor Decompositionを用いてモデルの冗長性を除去する。
LLM低ランク分解とは
LLM低ランク分解(Low-Rank Factorization)は、巨大な重み行列 W ∈ R^(m×n) を低ランクの行列積 W ≈ AB(A ∈ R^(m×r), B ∈ R^(r×n), r << min(m,n))で近似し、パラメータ数をm×nからr×(m+n)に削減する数学的手法である。この原理はLoRA(Low-Rank Adaptation)の理論的基盤であり、2025-2026年のLLMファインチューニングとモデル圧縮の両方で中核技術となっている。
概要
低ランク分解がLLMで有効な理由は、Aghajanyanら(2020)の発見に遡る。大規模言語モデルの重み行列は「固有次元」(intrinsic dimensionality)が実際のパラメータ数よりはるかに小さく、数百〜数千次元の部分空間でタスク適応の大部分を表現できる。この洞察がLoRAの着想の起源となった。
主要な低ランク分解手法:
- SVD(特異値分解): 行列をU×Σ×V^Tに分解し、上位r個の特異値のみを保持
- LoRA: W_new = W_0 + BA(B ∈ R^(m×r), A ∈ R^(r×n))。W_0は凍結、BA部分のみ学習
- GaLore: 勾配を低ランク空間に射影し、オプティマイザのメモリを削減
- Tensor Decomposition: Tucker分解やTensor Train分解で多次元テンソルを低ランク近似
主要手法の比較
| 手法 | ランク | パラメータ削減 | 用途 | 精度 | ツール |
|---|---|---|---|---|---|
| SVD圧縮 | r=64-256 | 2-8x | 推論圧縮 | 95-98% | 自前実装 |
| LoRA | r=8-64 | 99%凍結 | ファインチューニング | 95-100% | PEFT, Unsloth |
| QLoRA | r=16-64 | INT4+LoRA | FT + 圧縮 | 93-98% | PEFT, bitsandbytes |
| DoRA | r=8-64 | 方向+大きさ分離 | 高精度FT | 97-100% | PEFT |
| GaLore | r=128-512 | 勾配メモリ50%削減 | 事前訓練 | 98-100% | GaLore公式 |
| LoRA+ | r=8-64 | 学習率分離 | 効率的FT | 96-100% | カスタム |
| rsLoRA | r=8-256 | rank安定スケーリング | 大rank FT | 97-100% | PEFT |
| Tensor Train | 自動 | 5-20x | 重み圧縮 | 90-96% | 研究段階 |
LoRAの数学的詳細
基本定式化
事前訓練済み重み W_0 ∈ R^(d×k) に対し、更新量 ΔW = BA を加える:
- B ∈ R^(d×r)(ゼロ初期化またはGaussian)
- A ∈ R^(r×k)(Gaussian初期化)
- r(ランク)は通常8, 16, 32, 64のいずれか
- スケーリング: ΔW = (α/r) × BA(αはハイパーパラメータ、通常α=2r)
パラメータ効率
Llama 3.1 70Bの場合:
- フルファインチューニング: 70Bパラメータ全て更新(約140GB FP16)
- LoRA rank=16: 約1.7億パラメータのみ更新(全体の0.24%)、メモリ約340MB追加
- LoRA rank=64: 約6.8億パラメータ更新(全体の0.97%)、メモリ約1.4GB追加
LoRAの適用対象
Transformerの各層で効果が異なる:
- Q/K/V投影: 最も効果的(必須)。アテンションパターンの適応に直結
- O投影: Q/K/Vの次に効果的。出力の再構成に寄与
- FFN Up/Down投影: 知識の追加に有効。ドメイン適応時に重要
- Embedding/LM Head: 通常は凍結。語彙拡張時のみ対象
GaLore(Gradient Low-Rank Projection)
原理
GaLore(2024年、Zhao et al.)は勾配行列G自体を低ランク空間に射影し、オプティマイザの状態(Adamのm, v)を低ランク空間で管理する:
- 勾配 G ∈ R^(m×n) を計算
- SVDで射影行列 P ∈ R^(m×r) を取得(T=200ステップごとに更新)
- 低ランク勾配 G_low = P^T × G ∈ R^(r×n) でAdamを更新
- 重み更新: W -= η × P × Adam(G_low)
性能
- Llama 7B事前訓練: フルランクAdamW比メモリ50%削減(BF16 + GaLore r=128で約30GB→約15GB)
- 精度: Perplexity劣化0.2以内(C4検証セット)
- 8ビットGaLore: さらに30%メモリ削減。RTX 4090 24GBで7B事前訓練が可能に
SVDによるモデル圧縮
直接SVD圧縮
訓練済みモデルの重み行列WをW = UΣV^Tに分解し、上位r個の特異値を保持:
- Llama 2 7BのFFN層(4096×11008): r=2048でパラメータ50%削減、Perplexity劣化1-2%
- アテンション層はランクが高く削減困難、FFN層が主な削減対象
- 層ごとに最適ランクが異なるため、Sensitivity Analysisで決定
ASVD(Activation-aware SVD)
- 入力活性化の分布を考慮してSVD分解を調整
- 単純SVD比で同圧縮率でPerplexity 0.5-1.0改善
- AWQ(Activation-Aware Quantization)の低ランク版ともいえるアプローチ
実務での活用パターン
パターン1: LoRAファインチューニング(最も一般的)
ベースモデル(70B FP16)→ QLoRA INT4 + rank=32 → タスク適応
- コスト: RTX 4090単体で約12時間
- VRAM: 約22GB(INT4ベース + LoRA重み + オプティマイザ状態)
- 出力: 約65MBのアダプタファイル(ベースモデルとは別に管理)
パターン2: 多タスクLoRAマージ
LoRA_chat + LoRA_code + LoRA_math → TIES-Merging → 統合アダプタ
- 複数のドメイン特化LoRAを非破壊的にマージ
- SVD再分解でマージ後のランクを調整(rank collapse防止)
パターン3: GaLoreによる低コスト事前訓練
ランダム初期化 → GaLore r=256 + 8bit → 7Bモデル事前訓練
- コスト: RTX 4090 × 4枚で約2週間(フルランク比50%メモリ削減)
- 研究機関や小規模チーム向けの事前訓練民主化
よくある質問(FAQ)
Q1: LoRAのランク(r)はいくつに設定すべきか? A: タスクの複雑さに依存する。チャット適応やスタイル変更ならr=8-16で十分。ドメイン知識の追加(医療、法律)にはr=32-64が推奨。r=128以上はフルファインチューニングに近づくがメモリ効率が低下する。Unslothのauto-rank機能で最適値を自動探索する方法もある。
Q2: LoRAとフルファインチューニングの精度差はどの程度か? A: 多くのベンチマーク(MT-Bench、AlpacaEval)でLoRA rank=64はフルファインチューニングの95-98%の性能を達成する。ただし新しい知識の大量注入(百科事典的な知識追加)ではフルファインチューニングが優位。
Q3: 低ランク分解はTransformer以外のアーキテクチャにも適用できるか? A: 可能。State Space Model(Mamba)やRWKVの線形層にもLoRAは適用可能。ただしこれらのアーキテクチャは元々パラメータ効率が良いため、LoRAによる追加的な効率化の幅は小さい。Mixture-of-Experts(MoE)モデルでは各エキスパートに個別LoRAを適用する手法が研究されている。
まとめ
- 低ランク分解はLLMの重み行列の冗長性を活用し、パラメータ数を大幅削減する数学的手法
- LoRA(rank=16-64)が2026年のファインチューニング標準で、フルFTの95-98%精度を0.2-1%のパラメータで達成
- GaLoreは勾配の低ランク射影で事前訓練のメモリを50%削減、RTX 4090で7B訓練を実現
- SVD直接圧縮は推論時のモデルサイズ削減に有効だが、プルーニングや量子化との組み合わせが実用的