Matrisfaktorisering och lågrangsapproximation
Kunna förklara rang, SVD och varför en stor matris ofta kan approximeras som produkten av två små.
Förkunskaper
Intuition
Rang = antalet oberoende riktningar en matris «egentligen» innehåller. En 1000 × 1000-matris med rang 5 är bara fem mönster i olika blandningar — den kan skrivas som produkten av en 1000 × 5 och en 5 × 1000-matris: 10 000 tal i stället för en miljon.
SVD (singulärvärdesuppdelning) hittar de mönstren, sorterade efter betydelse: . Behåll de k största singulärvärdena → bästa rang-k-approximationen (Eckart–Young).
Varför bry sig? Betygsmatriser (användare × filmer), ordsamförekomster och viktuppdateringar vid finjustering är ofta nästan lågrangiga. LoRA utnyttjar exakt det: ΔW ≈ BA med litet k.
Kod
import numpy as np
rng = np.random.default_rng(0)
# en «hemligt» lågrangig matris + brus
B, A = rng.normal(size=(200, 4)), rng.normal(size=(4, 300))
M = B @ A + rng.normal(0, 0.5, (200, 300))
U, s, Vt = np.linalg.svd(M, full_matrices=False)
print(np.round(s[:8], 1)) # fyra stora, sedan små: [.. .. .. .. ~10 ~10 ...]
def approx(k):
return (U[:, :k] * s[:k]) @ Vt[:k]
for k in (1, 2, 4, 8, 50):
fel = np.linalg.norm(M - approx(k)) / np.linalg.norm(M)
print(k, round(fel, 3)) # faller brant till k=4, sedan bara brus kvar
print(200 * 300, 200 * 4 + 4 * 300) # 60000 vs 2000 tal
Formellt
För : med ortogonala och . Rang = antal . Eckart–Young–Mirsky: minimerar över alla med rang , med fel . Parametrar: mot . Andelen «energi» ger ett val av . Randomiserad SVD ger i .
Behärskning innebär
- Förklarar rang och SVD
- Approximerar en matris med låg rang och mäter felet
- Kopplar lågrang till LoRA och rekommendationssystem
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Wikipedia — Singular value decomposition (CC BY-SA 4.0) — CC BY-SA 4.0
- arXiv — LoRA: Low-Rank Adaptation of Large Language Models — arXiv (öppen åtkomst; licens per artikel)