AI・機械学習
上級

LLM低ランク分解(エルエルエムテイランクブンカイ)

LLMの重み行列を低ランクの行列積に分解してパラメータ数を削減する手法。LoRA(Low-Rank Adaptation)の理論的基盤であり、SVD分解やTensor Decompositionを用いてモデルの冗長性を除去する。

0 回閲覧
0 いいね

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-2562-8x推論圧縮95-98%自前実装
LoRAr=8-6499%凍結ファインチューニング95-100%PEFT, Unsloth
QLoRAr=16-64INT4+LoRAFT + 圧縮93-98%PEFT, bitsandbytes
DoRAr=8-64方向+大きさ分離高精度FT97-100%PEFT
GaLorer=128-512勾配メモリ50%削減事前訓練98-100%GaLore公式
LoRA+r=8-64学習率分離効率的FT96-100%カスタム
rsLoRAr=8-256rank安定スケーリング大rank FT97-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)を低ランク空間で管理する:

  1. 勾配 G ∈ R^(m×n) を計算
  2. SVDで射影行列 P ∈ R^(m×r) を取得(T=200ステップごとに更新)
  3. 低ランク勾配 G_low = P^T × G ∈ R^(r×n) でAdamを更新
  4. 重み更新: 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直接圧縮は推論時のモデルサイズ削減に有効だが、プルーニングや量子化との組み合わせが実用的