AI・機械学習
上級
低ランク分解(LLM圧縮)(テイランクブンカイエルエルエムアッシュク)
LLMの重み行列を2つの低ランク行列の積で近似することでパラメータ数とメモリを削減するモデル圧縮手法。
0 回閲覧
0 いいね
2026/6/8 更新
関連タグ
低ランク分解
モデル圧縮
SVD
LoRA
LLM効率化
低ランク分解(LLM圧縮)
低ランク分解(Low-Rank Factorization)は、LLMの大きな重み行列W(次元 m×n)を2つの小さな行列A(m×r)とB(r×n)の積で近似する技術です。r << min(m,n) となるランクrを選ぶことで、パラメータ数を mn → r(m+n) に削減できます。
数学的基礎:特異値分解(SVD)
低ランク近似の理論的根拠は特異値分解(SVD)にあります。
import torch
def low_rank_approx(W: torch.Tensor, rank: int):
"""重み行列Wを低ランク近似(A×B)に分解する。"""
U, S, Vh = torch.linalg.svd(W, full_matrices=False)
# 上位 rank 個の特異値・特異ベクトルのみ使用
A = U[:, :rank] * S[:rank].sqrt()
B = (S[:rank].sqrt().unsqueeze(1)) * Vh[:rank, :]
return A, B
# 圧縮前後のパラメータ比較
W = torch.randn(4096, 4096)
rank = 256
A, B = low_rank_approx(W, rank)
print(f"元: {W.numel():,} → 近似: {A.numel() + B.numel():,}")
# 元: 16,777,216 → 近似: 2,097,152 (12.5%)
LoRA vs モデル圧縮用途の低ランク分解
LoRA(Low-Rank Adaptation)は訓練時の更新差分ΔWを低ランク化してVRAMを節約する手法ですが、モデル圧縮目的の低ランク分解は既存の重みW自体を近似します。LoRAは推論時に元のW+AB形式で同パラメータ数・同推論コストですが、圧縮用途の分解は推論コスト自体が削減されます。
SliceGPT(2024)
Microsoft Researchが提案。Transformerの各行列にPCA変換を適用し、重要でない次元を削除する手法。
- 仕組み: 各層の入力活性化の共分散行列を計算 → 固有ベクトルで射影行列Qを作成 → 全重み行列をQで変換しランクを削減
- 効果: Llama-2-70BとPhiで20〜25%のパラメータ削減、精度劣化は最小
- 特徴: 量子化なしの純粋な行列サイズ削減のため、INT8/INT4と組み合わせ可能
LLM-Pruner(2023)
構造的プルーニング後に低ランク補正(LoRA的ファインチューニング)を組み合わせる手法。
- 各ニューロン群の重要度を勾配とヘッセ行列で評価
- 重要度の低い行/列を物理的に削除
- 削除後の精度劣化をLoRAで回復
精度・圧縮率のトレードオフ
- ランク比率25%: 圧縮率50%、精度劣化小(推奨)
- ランク比率12.5%: 圧縮率75%、精度劣化中(エッジ推論)
- ランク比率6.25%: 圧縮率87.5%、精度劣化大(極限圧縮)
まとめ
- SVDで重み行列をA×Bに分解しパラメータ削減
- LoRAはΔWを低ランク化(訓練効率化)、圧縮はW自体を低ランク化(推論コスト削減)
- SliceGPTはPCA射影で次元削減、LLM-Prunerは構造削除+LoRA補正
- 量子化・プルーニングと組み合わせてさらなる圧縮率向上が可能
- ランク比率で精度と圧縮率のトレードオフを直感的に制御できる