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.TruncatedSVDnie centruje danych, więc działa na rzadkich macierzach TF-IDF (to klasyczne LSA);PCAcentruje i liczy SVD w środku.sklearn.utils.extmath.randomized_svdiPCA(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.pinvinumpy.linalg.lstsquż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