FichesCarte › 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 : QQ = 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  ,  QQ = 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

xA x = Σi λi ai²     avec   Σ ai² = ‖x‖²

Une somme de carrés pondérés par les λ. Tous λi > 0 ⇔ xAx > 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.

xxCx 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. XX = [[14, 28], [28, 56]] : trace 70, det 0, donc λ = 70 et 0. Et x(XX)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

AA = [[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 v1v2 et u1u2 : 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 XX : les σ sont les racines

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

XX = V ΣUU Σ V = V Σ² V   ·   X X = U Σ² U

C'est le pas 2 appliqué à XX, 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.

XX = [[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 λ(XX) ; 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 · 0singulier

X2X2 = [[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 XX + 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 xAx = 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 XX tronc

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

κ(XX) = σ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 ‖Xwy‖² + λw‖² revient à un moindre carré ordinaire sur la matrice empilée :

Xλ = Xλ I  ,  XλXλ = XX + λ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 : κ(XX) = 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 κ(XX + λ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 = Σik σi uivi  ,  ‖XXkF = √(Σ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 ; xAx = Σλ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. XX = 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 XX : κ 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 XX. 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 XX 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 xAx > 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 XX.
    λ(XX) = σ², mêmes directions V. Sur D4 : λ = 70 et 0, donc σ = 8,37 et 0.
  5. Que mesure κ, et pourquoi ne pas former XX ?
    L'amplification des erreurs et le nombre de pas de descente. κ(XX) = κ(X)² : deux fois plus de chiffres perdus. QR ou SVD de X.
  6. Que vaut κ de la ridge de D4 à λ = 1 ?
    71 : XX + I a pour valeurs propres 71 et 1. Par la matrice empilée, √71 = 8,43.