Fiches › Carte › Partie 04 · Matrice = action › chaîne 03

Spectral, SVD, conditionnement

Une matrice symétrique se diagonalise dans une base orthonormée : le changement de base ne coûte qu'une transposée. Une matrice rectangulaire n'a pas de valeurs propres, et se factorise quand même. Une seule idée porte les deux : toute matrice est un étirement entre deux rotations, et le rapport du plus grand au plus petit étirement dit si le problème est bien posé. Fil rouge : la covariance C = 1114 (facteurs 4,30 et 0,697, κ = 6,17) et le jeu colinéaire D4, X = 122436, de rang 1 : σ = (8,37 ; 0), κ infini — que +λI ramène à 71.

Ce que cette chaîne suppose acquis
  • Valeur propre, vecteur propre. Av = λv avec v ≠ 0 : une direction que A ne tourne pas, et son facteur (p04-02, pas 2). Contrôles gratuits : Σλ = trace, Πλ = det.
  • Diagonaliser, c'est trois actions. A = P D P−1 se lit de droite à gauche : changer de base, étirer, revenir (p04-02, pas 4). Toute la chaîne remplace ce P−1 par une transposée.
  • Symétrique ⇒ orthogonal. Si A = A⊤, les valeurs propres sont réelles et les directions propres orthogonales (p04-02, pas 8). C'est l'énoncé que le pas 2 met en forme.
  • Rang, image, noyau. Le rang est la dimension de l'image ; une colonne redondante l'abaisse et le noyau devient non trivial (p04-01, pas 4 et pas 5).
  • Matrice orthogonale. Q dont les colonnes sont orthonormées : Q⊤Q = I, donc Q−1 = Q⊤. Elle conserve les longueurs et les angles : c'est une rotation (ou une rotation suivie d'un miroir).
Hypothèses posées
H1Matrices réelles. Aucune valeur complexe n'apparaît : le théorème spectral garantit que le cas symétrique reste réel, et les valeurs singulières sont réelles positives par construction. H2Pour la SVD, X est n × p quelconque : ni carrée, ni de rang plein, ni inversible. C'est tout l'intérêt — la décomposition existe toujours. H3Convention : les σ sont rangées décroissantes, σ1 ≥ σ2 ≥ … ≥ 0, et κ = σmax/σmin prend la plus petite valeur singulière, nulle comprise — d'où κ = ∞ pour une matrice de rang déficient.

La chaîne

Le décor : deux gênes

p04-02 écrit A = P D P−1. Deux choses coincent.

Un. P−1 est une vraie inversion : elle coûte, et si deux directions propres sont presque parallèles elle amplifie tout ce qui traîne.

Deux. Si A n'est pas carrée, Av = λv n'a même pas de sens : v vit dans Rp et Av dans Rn. Comparer les deux est une faute de dimension, pas une difficulté technique.

« Une valeur propre compare x et Ax, donc elle exige que les deux vivent dans le même espace, donc une matrice rectangulaire n'en a aucune, donc il faut une décomposition qui autorise deux espaces différents. »

Application — trois matrices, trois situations
matriceformeAv = λv ?directions propres
C = [[1, 1], [1, 4]]2 × 2 symétriqueouiorthogonales
A = [[2, 1], [0, 3]]2 × 2 non symétriqueoui(1 ; 0) et (1 ; 1) — pas orthogonales
X = [[1, 2], [2, 4], [3, 6]]3 × 2nonla question n'existe pas

A est le fil rouge de p04-02 : facteurs 2 et 3 sur deux directions à 45° l'une de l'autre. Le pas 4 lui trouvera deux directions orthogonales — au prix de changer d'espace à l'arrivée.

Théorème spectral tronc

Si A = A⊤ (réelle), alors

A = Q Λ Q⊤  ,  Q⊤Q = I  ,  Λ = diag(λ1, …, λn) réelle

Le P−1 du prérequis est devenu un Q⊤. Lecture de droite à gauche : tourner (Q⊤), étirer chaque axe par son λ (Λ), retourner (Q). Le carré unité devient un parallélogramme et le cercle unité une ellipse alignée sur les directions propres.

On ne le démontre pas ici : on l'énonce et on le regarde.

« Symétrique, donc les directions propres sont orthogonales et les valeurs réelles, donc le changement de base est une rotation, donc A est une dilatation vue dans une base tournée — et retourner ne coûte qu'une transposée. »

Application — C = [[1, 1], [1, 4]]

Trace 5, déterminant 3, donc λ² − 5λ + 3 = 0, discriminant 13 :

λ = (5 ± √13)/2  ⇒  λ1 = 4,303  ·  λ2 = 0,697

Contrôles : 4,303 + 0,697 = 5 = trace ✓  ·  4,303 × 0,697 = 3 = det ✓.

λdirection qanglevérification Cq
4,303(0,290 ; 0,957)73,2°(1,247 ; 4,118) = 4,303 q1
0,697(−0,957 ; 0,290)163,2°(−0,667 ; 0,202) = 0,697 q2

q1 · q2 = 0 et les deux sont de norme 1 : Q = [q1 q2] est orthogonale, de déterminant +1 — une rotation de 73,2°. Et Q Λ Q⊤ redonne C au dernier chiffre près.

Signe libre. (0,957 ; −0,290) est aussi un vecteur propre de 0,697. Le choix (−0,957 ; 0,290) est celui qui fait de Q une rotation plutôt qu'un miroir ; rien d'autre ne le distingue.
Figure 1 — tourner, étirer, retourner

La grille fine et le carré pointillé sont le départ ; le cercle pointillé est le cercle unité. Clique décomposer : la scène passe par les trois temps de Q Λ Q⊤. De 0 à 1 c'est Q⊤, une rotation pure — le cercle reste un cercle, seule la grille tourne. De 1 à 2 c'est Λ, un étirement le long des axes : le cercle devient une ellipse de demi-axes 4,30 et 0,697. De 2 à 3 c'est Q, qui remet l'ellipse sur les deux droites tiretées — les directions propres. Le curseur parcourt les trois temps en continu ; à τ = 3 les demi-axes valent exactement les valeurs propres, et c'est la signature du cas symétrique.

Formes quadratiques : le signe des λ donne la forme

Écris x dans la base propre : ai = ⟨qi, x⟩. Alors

x⊤A x = Σi λi ai²     avec   Σ ai² = ‖x‖²

Une somme de carrés pondérés par les λ. Tous λi > 0 ⇔ x⊤Ax > 0 pour tout x ≠ 0 : définie positive, un bol. Un λ nul : une vallée plate, la forme ne voit pas cette direction. Un λ négatif : une selle. C'est la géométrie de la loss quadratique de p03-02.

« x se décompose dans la base propre, donc A n'agit sur chaque coordonnée que par son λ, donc la forme quadratique est une somme de carrés pondérés par les λ, donc le signe des λ donne la forme : bol, vallée ou selle. »

Application — un bol et une vallée

Le bol. C a λ = 4,303 et 0,697, tous deux > 0 : définie positive.

xx⊤Cx directλ1a1² + λ2a2²
(1 ; 0)14,303·0,0840 + 0,697·0,9160 = 1
(0 ; 1)44,303·0,9160 + 0,697·0,0840 = 4
(1 ; 1)7= 7

La vallée. X⊤X = [[14, 28], [28, 56]] : trace 70, det 0, donc λ = 70 et 0. Et x⊤(X⊤X)x = ‖Xx‖² ≥ 0 : semi-définie positive. Sur x = (2 ; −1)/√5, Xx = (0 ; 0 ; 0) et la forme vaut 0 — la loss est plate le long de cette droite, il y a une infinité de minimums.

C'est exactement ce que λI répare : le 0 devient λ, la vallée se referme, les directions ne bougent pas (p02-02, pas 5 et p04-02, pas 7).

SVD : rectangulaire = rotation, étirement, rotation tronc

Toute matrice X de taille n × p — sans aucune hypothèse — s'écrit

X = U Σ V⊤  ,  X vi = σi ui

V est orthogonale p × p dans l'espace des entrées, U orthogonale n × n dans l'espace des sorties, Σ diagonale ≥ 0. Les deux espaces sont enfin distincts, et c'est ce qui débloque le cas rectangulaire.

Géométrie : la sphère unité de Rp devient une ellipse dans Rn, de demi-axes les σi portés par les ui. Rang = nombre de σi > 0.

« Une matrice rectangulaire envoie une sphère sur une ellipse, donc il existe des axes d'entrée orthogonaux envoyés sur des axes de sortie orthogonaux, donc X est une rotation, un étirement, une rotation. »

Application — A = [[2, 1], [0, 3]], carrée mais pas symétrique

A⊤A = [[4, 2], [2, 10]] : trace 14, det 36, donc λ = 7 ± √13 = 10,606 et 3,394, et

σ1 = √10,606 = 3,257  ·  σ2 = √3,394 = 1,842

Contrôle : σ1σ2 = 6 = |det A| ✓ (l'aire est multipliée par le produit des étirements).

axe d'entrée vaxe de sortie uσ
1(0,290 ; 0,957)(0,472 ; 0,882)3,257
2(−0,957 ; 0,290)(−0,882 ; 0,472)1,842

Le fait à retenir. Les valeurs propres de A valent 2 et 3 ; ses valeurs singulières valent 3,257 et 1,842. Rien à voir. Et les directions propres (1 ; 0) et (1 ; 1) font 45° entre elles, alors que v1 ⊥ v2 et u1 ⊥ u2 : l'orthogonalité est rachetée en acceptant que l'entrée et la sortie aient chacune leur base.

Figure 2 — la même animation, mais l'entrée et la sortie diffèrent

Même montage qu'en figure 1, mais les trois temps sont V⊤, Σ, U. Les droites tiretées bleues sont les axes d'entrée v1, v2 ; les flèches suivent leurs images. À τ = 3 l'ellipse est portée par u1, u2, qui ne sont pas les axes d'entrée : c'est toute la différence avec le cas symétrique. Compare les readouts « valeurs propres » et « valeurs singulières » — sur le cisaillement les deux valeurs propres valent 1 alors que σ = (1,618 ; 0,618). Sur B = [[1, 2], [2, 4]], σ2 = 0 : à partir de τ = 1 l'ellipse s'aplatit et la grille s'effondre sur une droite — rang 1, κ = ∞.

Lien avec X⊤X : les σ sont les racines

Remplace X par U Σ V⊤ et simplifie par U⊤U = I :

X⊤X = V Σ⊤U⊤U Σ V⊤ = V Σ² V⊤   ·   X X⊤ = U Σ² U⊤

C'est le pas 2 appliqué à X⊤X, qui est symétrique : ses valeurs propres sont les σi², ses directions propres sont les colonnes de V. Diagonaliser la covariance et décomposer X sont le même calcul — c'est la PCA (p04-04).

« XᵀX vaut VΣ²Vᵀ, donc ses valeurs propres sont les carrés des valeurs singulières, donc diagonaliser la covariance et décomposer X sont le même calcul. »

Application — D4, rang 1

X = [[1, 2], [2, 4], [3, 6]] : la deuxième colonne est le double de la première.

X⊤X = [[14, 28], [28, 56]]  ·  trace 70, det 0  ⇒  λ = 70 et 0  ⇒  σ = √70 = 8,367 et 0

v1 = (1 ; 2)/√5 = (0,447 ; 0,894) ; v2 = (2 ; −1)/√5, et X v2 = (0 ; 0 ; 0) — la direction de σ = 0 est le noyau. Une seule σ non nulle : rang 1 ✓.

Le cas où les deux décompositions coïncident. C est symétrique et définie positive : ses valeurs singulières sont ses valeurs propres, 4,303 et 0,697, et V = U = Q. C'est le seul cas. Si un λ était négatif, σ vaudrait |λ| et le signe partirait dans U.

Ce qu'on ne fait pas. On vient d'écrire le lien entre σ et λ(X⊤X) ; ce n'est pas la façon de les calculer. Le pas 7 dit pourquoi.

Conditionnement tronc

κ = σmax / σmin  ≥  1

C'est l'allongement de l'ellipse du pas 4, et il se lit de deux façons.

Résoudre. Ax = b divise par les σ ; la composante sur vmin est divisée par σmin. Une erreur relative δ sur b devient au pire κδ sur x.

Itérer. Sur un bol de conditionnement κ, un pas sûr contracte la direction plate de 1 − 1/κ seulement : le nombre de pas est proportionnel à κ (p03-02, pas 6).

κ = ∞ ⇔ singulier. κ ≈ 108 en float32 ⇔ plus aucun chiffre fiable.

« La solution divise par les σ, donc la direction de σ_min amplifie les erreurs de 1/σ_min, donc le rapport σ_max/σ_min est le facteur d'amplification, donc c'est lui qui dit si le problème est bien posé. »

Application — trois jeux, trois conditionnements
matriceσκlecture
C = [[1, 1], [1, 4]]4,303 · 0,6976,17bien posé
X2 = [[1, 0], [0, 1], [1, 1], [2, 1]]2,803 · 1,0702,62très bien conditionné
X = D4, rang 18,367 · 0∞singulier

X2⊤X2 = [[6, 3], [3, 3]] : trace 9, det 9, λ = (9 ± √45)/2 = 7,854 et 1,146, dont les racines sont 2,803 et 1,070. Contrôle : σ1σ2 = 3 = √9 ✓.

Le chiffre à retenir. Le ridge de D4 à λ = 1 donne X⊤X + I = [[15, 28], [28, 57]], de valeurs propres 71 et 1, donc κ = 71. w03-01 chiffre la descente qui en découle de bout en bout : facteur de contraction plat 0,98, 114 pas pour diviser l'écart par dix, contre une résolution 2 × 2 immédiate. On y renvoie plutôt que de la refaire.

Figure 3 — κ allonge l'ellipse et multiplie les pas

En haut, la ligne de niveau x⊤Ax = 1 pour A = diag(1, κ) : une ellipse de demi-axes 1 et 1/√κ, donc √κ fois plus longue que large. Monte le curseur : à κ = 1 c'est un cercle, à κ = 71 (le ridge de D4) une ellipse 8,4 fois plus longue, à κ = 1 000 un trait. En bas, le nombre de pas de descente à η = 1/κ pour diviser la loss par 100 : la courbe est une droite, n ≈ κ·ln(100)/2. Le readout donne aussi la valeur exacte, ln(0,01)/(2·ln(1 − 1/κ)). Doubler κ double le travail, quel que soit l'optimiseur. À κ = 71 on lit 163 pas ici, contre 114 dans w03-01 : ce déroulé prend un pas plus grand (η = 0,02 plutôt que 1/71) et vise un facteur dix sur l'écart, pas cent sur la loss. Le chiffre dépend de ces deux choix ; la proportionnalité à κ, non.

Ne pas former X⊤X tronc

Le pas 5 dit que les valeurs propres de X⊤X sont les σ². Donc

κ(X⊤X) = σmax² / σmin² = κ(X)²

Le nombre de chiffres perdus vaut environ log10 κ : former la matrice de Gram le double. On résout donc les moindres carrés par QR ou SVD de X directement : lstsq le fait, inv(X.T @ X) @ X.T @ y est le mauvais réflexe — deux fois puni, par le carré et par l'inversion explicite.

« Les valeurs singulières de XᵀX sont les carrés, donc son conditionnement est le carré, donc passer par XᵀX double la perte de précision. »

Application — le ridge de D4 à λ = 1, par deux routes

Minimiser ‖Xw − y‖² + λ‖w‖² revient à un moindre carré ordinaire sur la matrice empilée :

Xλ = X√λ I  ,  Xλ⊤Xλ = X⊤X + λI
routece qu'on factorisespectreκchiffres perdus
QR / SVDXλ, 5 × 2σ = √71 · 18,430,9
équations normales[[15, 28], [28, 57]]λ = 71 · 1711,9

Même solution exacte, κ au carré d'un côté. Ici on perd un chiffre, sans conséquence. Sur des features non standardisées à κ(X) = 104 : κ(X⊤X) = 108, et en float32 (7 chiffres décimaux) il ne reste rien alors que la route QR passe encore confortablement.

Figure 4 — le même problème, à κ ou à κ²

Les deux conditionnements du ridge de D4 en fonction de λ. La courbe bleue est κ(Xλ) = √((70 + λ)/λ), ce qu'on factorise en QR ou SVD ; la rouge est κ(X⊤X + λI) = (70 + λ)/λ, son carré, ce qu'on obtient en formant le Gram. Les deux partent de l'infini en λ = 0 — c'est là que la matrice est singulière. À λ = 1 : 8,43 contre 71. Que κ chute quand λ monte est déjà acquis (p04-02, pas 7) ; ce qui se lit ici est l'écart entre les deux courbes, qui ne dépend d'aucun réglage — seulement de la route de calcul choisie.

Rang faible : tronquer, c'est compresser

Garde les k plus grandes valeurs singulières :

Xk = Σi ≤ k σi uivi⊤  ,  ‖X − Xk‖F = √(Σi > k σi²)

Xk est la meilleure approximation de rang k en norme de Frobenius, et l'erreur est exactement la racine des σ² jetés. Images, embeddings, LoRA (ΔW = BA de rang r) : la même idée — l'information tient dans quelques directions.

« Les σ rangées décroissantes trient les directions par énergie, donc garder les k premières garde le maximum d'énergie à rang k fixé, donc la troncature est la meilleure approximation de rang k et l'erreur est la racine des σ² jetés. »

Application — quand ça marche, et quand non

D4. σ = (8,367 ; 0). k = 1 donne X1 = X exactement, erreur 0 : trois lignes colinéaires tiennent dans une direction, et le stockage passe de 6 nombres à 5 (u1, v1, σ1).

X2. σ = (2,803 ; 1,070), donc σ² = 7,854 et 1,146, de somme 9 = ‖X2‖²F. Tronquer à k = 1 garde 7,854/9 = 87 % de l'énergie et laisse une erreur relative √(1,146/9) = 0,357, soit 36 %. Beaucoup : ce jeu n'est pas de rang faible.

LoRA. Une couche d × d adaptée par ΔW = BA avec B de taille d × r et A de taille r × d : 2dr paramètres au lieu de d². À d = 4 096 et r = 8 : 65 536 contre 16 777 216, soit 0,39 %.

Où ça casse casse

κ est un rapport, donc il dépend des unités ; et « zéro » n'existe pas en flottant.

« Une valeur singulière minuscule n'est pas nulle et un déterminant minuscule n'est pas un mauvais conditionnement, donc le rang se lit sur le spectre avec un seuil, donc κ ne se lit qu'après avoir standardisé les colonnes. »

Quatre limites
  • Petites valeurs singulières non nulles. σ = 10−8 n'est pas 0, mais diviser par elle multiplie le bruit par 108. Le rang numérique se lit avec un seuil (σi > tol · σmax), jamais avec le déterminant : diag(10−8, 10−8) a un det de 10−16 et un κ de 1 — parfaitement conditionnée.
  • Échelles hétérogènes. Une feature en km et une en mm donnent un κ énorme sans que le problème soit mal posé : κ n'est pas invariant par changement d'unités. Standardiser d'abord, lire κ ensuite — sinon on diagnostique la colinéarité d'un choix d'unités.
  • SVD complète en grande dimension. Coût O(np·min(n, p)) : à n = 106 et p = 103, 1012 opérations pour des directions dont on ne garde que les premières. On tronque — SVD randomisée, ou power iteration (p04-02, pas 5) sur les k premières.
  • Rang faible n'est pas gratuit. LoRA suppose que l'adaptation vit dans quelques directions ; rien ne garantit que les σ décroissent vite — c'est une propriété des données, pas du théorème. Si elle est fausse, r petit sous-apprend, et X2 ci-dessus en est la version miniature : 36 % d'erreur à k = 1.

Résumé

À retenir
  1. Symétrique : A = Q Λ Q⊤, Q rotation — tourner, étirer, retourner ; x⊤Ax = Σλiai², donc bol si tous les λ > 0, vallée si un est nul, selle si un est négatif.
  2. Rectangulaire : X = U Σ V⊤ — rotation à l'entrée, étirement par les σ ≥ 0, rotation à la sortie ; rang = nombre de σ > 0. Existe toujours.
  3. X⊤X = V Σ²V⊤ : valeurs propres = σ², directions = V. La SVD de X est la diagonalisation de la covariance.
  4. κ = σmax/σmin : amplification des erreurs, et nombre de pas de descente proportionnel à κ ; ∞ ⇔ singulier.
  5. Ne pas former X⊤X : κ au carré, donc deux fois plus de chiffres perdus. QR, SVD, lstsq.
  6. Tronquer la SVD à k termes = meilleure approximation de rang k, d'erreur √(Σi > kσi²) : compression, embeddings, LoRA.
« Une matrice symétrique est une dilatation vue dans une base orthonormée, et toute matrice rectangulaire est un étirement entre deux rotations — c'est la SVD, dont les valeurs singulières au carré sont les valeurs propres de X⊤X. Le rapport de la plus grande à la plus petite est le conditionnement : il dit combien une erreur est amplifiée et combien de pas une descente demande. Former X⊤X l'élève au carré, c'est pourquoi on résout par QR ou SVD. »

Chaîne verbalisée — une prise, à voix haute

6 maillons · clique pour révéler après avoir dit
  1. Que dit le théorème spectral, en trois gestes ?
    Symétrique ⇒ Q Λ Q⊤ : rotation, étirement le long des axes, rotation inverse — et l'inverse du changement de base n'est qu'une transposée.
  2. Que dit x⊤Ax > 0 pour tout x ?
    Tous les λ > 0 : un bol, définie positive. Un λ nul donne une vallée plate, un λ négatif une selle.
  3. Lis X = U Σ V⊤.
    Rotation dans l'espace d'entrée (V⊤), étirement par les σ, rotation dans l'espace de sortie (U). La sphère unité devient une ellipse de demi-axes les σ.
  4. Relie les σ et les valeurs propres de X⊤X.
    λ(X⊤X) = σ², mêmes directions V. Sur D4 : λ = 70 et 0, donc σ = 8,37 et 0.
  5. Que mesure κ, et pourquoi ne pas former X⊤X ?
    L'amplification des erreurs et le nombre de pas de descente. κ(X⊤X) = κ(X)² : deux fois plus de chiffres perdus. QR ou SVD de X.
  6. Que vaut κ de la ridge de D4 à λ = 1 ?
    71 : X⊤X + I a pour valeurs propres 71 et 1. Par la matrice empilée, √71 = 8,43.