ML Atlas

01 · Podstawy · 4 min czytania · aktualizacja

Czym jest rozkład SVD macierzy i do czego służy w uczeniu maszynowym?

W skrócie

SVD rozkłada dowolną macierz na obrót, skalowanie i obrót. Obcięcie najmniejszych wartości osobliwych daje najlepsze możliwe przybliżenie niskiego rzędu.

Co to jest

Rozkład według wartości osobliwych (singular value decomposition, SVD) to zapis dowolnej macierzy X o wymiarach m×n jako iloczynu X = U·Σ·Vᵀ, gdzie U i V mają prostopadłe kolumny o długości 1, a Σ jest macierzą diagonalną z nieujemnymi liczbami σ₁ ≥ σ₂ ≥ … ≥ 0, zwanymi wartościami osobliwymi. W odróżnieniu od rozkładu własnego istnieje dla każdej macierzy, także prostokątnej.

Intuicja: każde przekształcenie liniowe, nawet najbardziej pokręcone, to trzy proste kroki — obrót (Vᵀ), rozciągnięcie wzdłuż osi o współczynniki σᵢ (Σ) i drugi obrót (U). Okrąg zamienia się w elipsę, a wartości osobliwe to długości jej półosi. W macierzy danych SVD znajduje „ukryte wzorce”: kolumny V to wzorce cech, kolumny U mówią, ile każdego wzorca ma każdy wiersz, a σ — jak ważny jest wzorzec.

Mechanizm — dlaczego tak działa

SVD jest blisko spokrewniony z wektorami własnymi. Macierze XᵀX i XXᵀ są symetryczne i nieujemnie określone, więc mają prostopadłe wektory własne i nieujemne wartości własne. Kolumny V to wektory własne XᵀX, kolumny U — wektory własne XXᵀ, a wartości osobliwe to pierwiastki ich wspólnych wartości własnych: σᵢ = √λᵢ. Liczba niezerowych wartości osobliwych to rząd macierzy — liczba naprawdę niezależnych kierunków w danych.

Rozkład można zapisać jako sumę macierzy rzędu jeden: X = σ₁·u₁·v₁ᵀ + σ₂·u₂·v₂ᵀ + … Każdy składnik to jeden wzorzec przemnożony przez jego wagę. Twierdzenie Eckarta–Younga (1936) mówi, że obcięcie tej sumy po k składnikach daje najlepsze przybliżenie X macierzą rzędu k — żadna inna macierz rzędu k nie ma mniejszego błędu w normie Frobeniusa. Kwadrat błędu jest równy sumie kwadratów pominiętych wartości osobliwych, więc od razu widać, ile tracimy.

Dla danych scentrowanych (od każdej kolumny odjęta średnia) SVD to PCA: kolumny V to składowe główne, a σᵢ²/(m − 1) to wariancja wzdłuż i-tej składowej. Biblioteki liczą PCA właśnie przez SVD, bo unika się jawnego tworzenia XᵀX, które podnosi do kwadratu błędy zaokrągleń.

Zastosowania wynikają z niskiego rzędu prawdziwych danych. Kompresja: zamiast m·n liczb przechowuje się k·(m + n + 1). Odszumianie: małe wartości osobliwe niosą głównie szum, więc ich obcięcie go usuwa. Systemy rekomendacyjne: macierz użytkownicy × filmy przybliża się iloczynem dwóch wąskich macierzy, z ukrytymi „gustami”. Ukryta analiza semantyczna (LSA) robi to samo z macierzą dokumenty × słowa. Pseudoodwrotność X⁺ = V·Σ⁺·Uᵀ rozwiązuje regresję najmniejszych kwadratów nawet dla macierzy osobliwych, a stosunek σ₁/σₙ (współczynnik uwarunkowania) mówi, jak niestabilne jest takie rozwiązanie. LoRA w dostrajaniu modeli językowych zakłada, że zmiana wag ma niski rząd — to idea z SVD, choć sam rozkład nie jest tam liczony.

Ograniczenia. Pełny SVD macierzy m×n kosztuje rzędu m·n·min(m, n) operacji, więc dla dużych danych stosuje się wersje obcięte i losowe, liczące tylko k pierwszych składników. SVD znajduje kierunki największej wariancji, a nie te najważniejsze dla przewidywania — mało zmienny kierunek może nieść kluczowy sygnał. Składowe są liniowe; zakrzywionych struktur nie uchwycą.

Na przykładzie

Digits: 1797 obrazów cyfr 8×8, czyli macierz 1797×64 po scentrowaniu. Jej rząd wynosi 61, nie 64 — trzy piksele (na skrajach obrazka) mają zawsze wartość zero i nie wnoszą żadnego kierunku. Pierwsza wartość osobliwa (567,0) skupia 14,9% całkowitej wariancji, 10 pierwszych — 73,8%, 21 składowych przekracza 90%, 29 — 95%, a 41 — 99%. Pozostałe dwadzieścia kilka kierunków to głównie drobny szum pikseli.

Przybliżenie rzędu 10 ma względny błąd 0,51 w normie Frobeniusa (czyli zachowuje 74% sumy kwadratów) i wymaga zapisania 18 620 liczb zamiast 115 008 — ponad sześć razy mniej. Kwadrat błędu tego przybliżenia jest równy sumie kwadratów pominiętych 54 wartości osobliwych, co do ostatniej cyfry, jak przewiduje twierdzenie Eckarta–Younga. Ta kompresja niewiele kosztuje przy klasyfikacji: regresja logistyczna w 5-krotnej walidacji krzyżowej osiąga 92,0% trafności na wszystkich 64 pikselach, 91,3% na 21 składowych i 89,2% na 10 składowych.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • numpy.linalg.svd(X, full_matrices=False) — tzw. ekonomiczny SVD; scipy.sparse.linalg.svds(X, k=20) dla macierzy rzadkich i kilku składowych.
  • sklearn.decomposition.TruncatedSVD nie centruje danych, więc działa na rzadkich macierzach TF-IDF (to klasyczne LSA); PCA centruje i liczy SVD w środku.
  • sklearn.utils.extmath.randomized_svd i PCA(svd_solver='randomized') — szybkie przybliżenie k pierwszych składowych dużej macierzy.
  • Wybór k: wykres skumulowanego udziału σᵢ² (np. próg 90–95%) albo walidacja krzyżowa na zadaniu docelowym.
  • numpy.linalg.pinv i numpy.linalg.lstsq używają SVD — stabilnie rozwiązują regresję także przy współliniowych cechach.

Najczęstsze pytania

Czym różni się SVD od rozkładu własnego?
Rozkład własny istnieje tylko dla niektórych macierzy kwadratowych i może dawać zespolone liczby oraz nieprostopadłe wektory. SVD istnieje dla każdej macierzy, ma nieujemne wartości osobliwe i zawsze prostopadłe wektory. Dla macierzy symetrycznej nieujemnie określonej oba rozkłady się pokrywają.
Jaki jest związek SVD z PCA?
PCA to SVD scentrowanej macierzy danych. Prawe wektory osobliwe to składowe główne, a kwadraty wartości osobliwych podzielone przez m − 1 to wariancje wzdłuż tych składowych. Dlatego `PCA` w scikit-learn liczy właśnie SVD.
Ile wartości osobliwych zachować?
Tyle, by skumulowany udział σᵢ² przekroczył wybrany próg (często 90–95%), albo tyle, ile daje najlepszy wynik w walidacji krzyżowej zadania docelowego. Gwałtowny spadek na wykresie wartości osobliwych („łokieć”) sugeruje naturalną granicę między sygnałem a szumem.

Źródła

  • Eckart, C., Young, G. (1936). "The approximation of one matrix by another of lower rank". Psychometrika, 1(3), 211–218.
  • Strang, G. (2016). Introduction to Linear Algebra, 5th ed. Wellesley-Cambridge Press, rozdz. 7 (The Singular Value Decomposition).
  • Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning. MIT Press, rozdz. 2.8 (Singular Value Decomposition).
  • Trefethen, L. N., Bau, D. (1997). Numerical Linear Algebra. SIAM, wykłady 4–5.
  • scikit-learn: Decomposing signals in components, https://scikit-learn.org/stable/modules/decomposition.html

Zobacz też