Singulärwertzerlegung (SVD) -- Zerlegung jeder Matrix

Die Eigenzerlegung gilt nur für quadratische Matrizen, aber die SVD hat diese Einschränkung nicht—Jede Matrix kann einer SVD unterzogen werden。

Sie ist der mathematische Motor hinter Technologien wie Empfehlungssystemen, Bildkompression und LoRA-Fine-Tuning.

SVD: Eine Matrix in drei Teile zerlegen

A
(m×n)
=
U
(m×m)
Rotation
×
Σ
(m×n)
Skalierung
×
VT
(n×n)
Rotation

Geometrische Intuition: jede lineare Transformation = Rotation + Skalierung entlang der Koordinatenachsen + erneute Rotation.

Die Diagonalelemente von Σ heißenSingulärwerte, vom größten zum kleinsten geordnet, und repräsentieren die "Energie" der Matrix in jeder orthogonalen Richtung.

Abgeschnittene SVD: Approximation mit den ersten k Singulärwerten

\[ A \approx U_k \Sigma_k V_k^T \]

Je kleiner k ist = desto höher die Kompressionsrate = desto grober die Approximation. Dies ist die Kernidee der Dimensionsreduktion und Kompression.


Alltagsbeispiel

Ein Bild komprimieren

Eine 1000×1000-Tabelle (1 Million Zahlen) verwendet nach der SVD-Zerlegung nur die ersten 10 Singulärwerte zur Rekonstruktion.

Sie müssen nur etwa 10×1000×2 = 20,000 Zahlen speichern, um eine brauchbare Approximation zu erhalten.

Das ist die Kraft der SVD-Kompression—unwichtige "Energie" verwerfen und die Kernstruktur bewahren.


Mathematische Definition

\[ A = U \Sigma V^T \]

Die Spalten von U sind linke Singulärvektoren (orthogonal), die Zeilen von V sind rechte Singulärvektoren (orthogonal), und die Diagonalelemente von Σ, σ₁ ≥ σ₂ ≥ ... ≥ σ_r > 0, sind die Singulärwerte.


Praktische Python-Übung

Beispiel

import numpy as np

A = np.array([[1,0,0,0,2],[0,0,3,0,0],[0,0,0,0,0],[0,4,0,0,0]])
U, S, VT = np.linalg.svd(A)
print("Singulärwerte:", np.round(S, 2))  # [4. 3. 2.24 0.]
print("Anzahl der von Null verschiedenen Singulärwerte = Rang =", np.sum(S > 1e-10))

# Demo zur Bildkompression: ein Bild vom Rang 1
img = np.outer(np.array([1,2,3,2,1]), np.array([2,4,6,4,2]))
U_i, S_i, VT_i = np.linalg.svd(img)
print("\nSingulärwerte der Bildmatrix:", np.round(S_i, 2))
# Perfekt rekonstruiert mit nur 1 Singulärwert (weil Rang = 1)
k = 1
approx = U_i[:,:k] @ np.diag(S_i[:k]) @ VT_i[:k,:]
print("k=1 Rekonstruktionsfehler:", np.linalg.norm(img - approx))
奇异值: [4. 3. 2.24 0.]
非零奇异值个数 = 秩 = 3
图像矩阵的奇异值: [78.26 0. 0. 0. 0.]
k=1重建误差: 7.11e-14 (几乎完美)

Anwendungsszenarien in der KI

Mathematische Grundlagen der LoRA-Feinabstimmung

LoRA-Annahme: \( \Delta W \) ist niedrigrangig – das ist äquivalent zu der Annahme, dass in der SVD von \(\Delta W \) nur die ersten r Singulärwerte signifikant sind und der Rest ignoriert werden kann. Je kleiner r ist, desto weniger trainierbare Parameter gibt es, aber desto geringer ist die Approximationsgenauigkeit. In der Praxis sind r=8 oder 16 oft der beste Kompromiss zwischen Wirksamkeit und Effizienz, basierend auf empirischen Beobachtungen der Abklingrate der Singulärwerte von Gewichtsmatrizen.

Empfehlungssysteme: Matrixfaktorisierung für kollaboratives Filtern

Führe eine abgeschnittene SVD auf der Nutzer-Item-Bewertungsmatrix R (m×n) durch: \( R \approx U_k \Sigma_k V_k^T \). Jede Zeile von U_k ist der k-dimensionale latente Vektor eines Nutzers, und jede Zeile von V_k ist der k-dimensionale latente Vektor eines Items. Die vorhergesagte Bewertung von Nutzer u für Item i = das Skalarprodukt aus dem latenten Vektor von u und dem latenten Vektor von i.

Modellkompression und Destillation

Nachdem du eine SVD auf der Gewichtsmatrix W einer vollständig verbundenen Schicht durchgeführt hast, verwende eine abgeschnittene SVD zur Approximation: \( W \approx U_k \Sigma_k V_k^T \). Die ursprüngliche m×n-Matrix hat mn Parameter, und nach der Zerlegung sind es k(m+n+1). Wenn k << min(m,n), wird die Anzahl der Parameter stark reduziert. Das ist sehr nützlich, wenn große Modelle auf Mobilgeräten eingesetzt werden.

SVD-Implementierung der PCA

Die PCA von sklearn verwendet im Kern SVD statt Eigenzerlegung – sie führt direkt eine SVD auf der zentrierten Datenmatrix durch, und die Spalten der rechten Singulärvektoren V sind die Hauptkomponentenrichtungen. SVD ist numerisch stabiler und erfordert keine explizite Berechnung der Kovarianzmatrix.


Weitere Erweiterungen