Autovalori e autovettori a intuizione
Una matrice quadrata, in mezzo al caos di rotazioni e mescolamenti che produce, conserva quasi sempre alcune direzioni privilegiate: rette che vengono solo allungate o compresse, mai ruotate. Quelle direzioni sono gli autovettori, i fattori di scala sono gli autovalori, ed è da qui che passano PCA, PageRank, la stabilità delle reti ricorrenti e l’analisi spettrale dei grafi.
Perché questo capitolo
Sezione intitolata “Perché questo capitolo”Quando si guarda un dataset ad alta dimensione e si chiede “quali sono le direzioni che contengono più informazione?”, la risposta è un calcolo di autovettori. Quando un motore di ricerca ordina pagine web per importanza, sta calcolando un autovettore. Quando una rete ricorrente esplode i gradienti dopo cinquanta passi, è perché lo spettro della sua matrice di transizione ha un autovalore più grande di uno. Quando uno spectral clustering trova comunità in un grafo, sta diagonalizzando un Laplaciano.
Sono problemi che sembrano scollegati — riduzione dimensionale, ranking, training stability, community detection — e che invece chiedono tutti la stessa domanda: qual è la direzione che la matrice rispetta? Quella domanda ha una risposta operativa identica in tutti e quattro i casi.
Per chi ha seguito i capitoli precedenti della Parte IV, il percorso è naturale. In vettori e spazi abbiamo visto i vettori come oggetti geometrici. In matrici e trasformazioni la matrice è diventata una funzione che muove vettori — li ruota, allunga, riflette, schiaccia. In prodotto scalare abbiamo capito che certi numeri (angoli, proiezioni, similarità) emergono da un’operazione bilineare. Qui chiudiamo il cerchio: data una trasformazione, esistono direzioni speciali che la trasformazione preserva, e quelle direzioni rivelano la sua struttura interna.
Tre conseguenze pratiche di questa intuizione, che orientano la lettura.
- Capire PCA senza riti. Una volta visto che la covarianza è una matrice simmetrica e che le sue direzioni invarianti sono ortogonali, PCA smette di essere una ricetta opaca e diventa “diagonalizza la covarianza, ordina per autovalore decrescente”. Tutto il resto sono conseguenze.
- Diagnosticare gradient explosion in modelli ricorrenti. La regola “‖λ_max‖ < 1 stabile, > 1 esplosivo” non è un dogma: è la conseguenza diretta di scrivere x_t = A^t x_0 nella base degli autovettori. Sapere riconoscere il sintomo e nominare la causa è metà del lavoro.
- Leggere paper di mechanistic interpretability senza spaventarsi. Quando un articolo parla di “spettro della Jacobiana” o di “modi dominanti delle attivazioni”, sta usando esattamente il vocabolario di questo capitolo. Riconoscerlo significa poterlo seguire.
L’obiettivo del capitolo non è arrivare a calcolare autovalori a mano per matrici grandi: per questo ci sono i solver. È costruire l’immagine mentale corretta, quella che permette di guardare un’equazione e vedere subito una direzione invariante e un fattore di scala.
Contesto
Sezione intitolata “Contesto”Il problema degli autovalori nasce in fisica matematica prima di avere un nome. Eulero nel Settecento studia gli “assi principali” di un solido rigido che ruota: in un corpo qualsiasi esistono tre direzioni privilegiate rispetto alle quali il tensore di inerzia è diagonale. Ruotare attorno a quegli assi è “naturale”, ruotare attorno ad altri richiede coppie di forze.
La svolta concettuale arriva con Augustin-Louis Cauchy (1789-1857, analista francese), che nel 1829 pubblica Sur l’équation à l’aide de laquelle on détermine les inégalités séculaires des mouvements des planètes (Exercices de Mathématiques, vol. 4). Il problema concreto è astronomico: data la matrice delle perturbazioni gravitazionali tra pianeti, le orbite restano stabili nel tempo o accumulano deviazioni che le destabilizzano? Cauchy mostra che la matrice associata a una forma quadratica simmetrica reale ha autovalori reali e ammette assi principali ortogonali. È il primo trattamento sistematico del concetto, e nasce da una domanda di stabilità.
Il nome arriva mezzo secolo dopo. David Hilbert (1862-1943, matematico tedesco a Gottinga) tra il 1904 e il 1910 pubblica una serie di sei memorie sugli operatori integrali (Grundzüge einer allgemeinen Theorie der linearen Integralgleichungen) in cui introduce il termine “Eigenwert” — letteralmente “valore proprio” — per gli scalari λ tali che quando A è un operatore integrale. Il prefisso “eigen-” passa intatto nell’inglese (“eigenvalue”, “eigenvector”); l’italiano traduce in “autovalore” e “autovettore”, che sono i termini standard usati in questo libro. Equivalenza: “eigenvalue” e “autovalore” sono lo stesso oggetto, semplicemente in lingue diverse.
Sul versante applicativo, due nomi vanno introdotti subito perché ricompaiono ovunque. Karl Pearson (1857-1936, statistico inglese, fondatore della statistica matematica moderna) nel 1901 pubblica On Lines and Planes of Closest Fit to Systems of Points in Space (Philosophical Magazine, Series 6, vol. 2, no. 11): formula il problema della retta che minimizza la somma dei quadrati delle distanze perpendicolari da un insieme di punti, e mostra che la soluzione è data dagli autovettori della matrice dei momenti del secondo ordine. È la nascita di Principal Component Analysis, formulata trent’anni prima del lavoro di Hotelling che le darà il nome moderno.
Lawrence Page (1973-, informatico americano) e Sergey Brin (1973-, informatico americano, co-fondatori di Google) nel 1998, nel technical report The PageRank Citation Ranking: Bringing Order to the Web (Stanford InfoLab), definiscono il loro algoritmo di ranking come autovettore principale della matrice di transizione di un random walk sul grafo del web. Il calcolo avviene via power iteration, il metodo formalizzato nel 1929 da Richard von Mises (1883-1953, matematico austriaco-americano) e Hilda Pollaczek-Geiringer (1893-1973, matematica austriaca, sua collaboratrice). PageRank rende l’idea di “autovettore principale” un’infrastruttura industriale.
Decoder rapido dei termini che useremo:
- Spettro σ(A): l’insieme degli autovalori di A, contati con molteplicità.
- Autospazio E_λ: il sottospazio dei vettori che soddisfano . Contiene il vettore nullo come elemento tecnico (gli autovettori veri sono quelli non nulli).
- Diagonalizzabile: A è diagonalizzabile se esiste una base di autovettori. Equivalentemente, se A = P D P^{-1} con D diagonale.
- Teorema spettrale: per matrici simmetriche reali, gli autovalori sono reali e gli autovettori si possono scegliere ortonormali. Provato da Cauchy nel 1829 nel caso delle forme quadratiche.
- Power iteration: algoritmo iterativo che applica A ripetutamente a un vettore di partenza e converge alla direzione dell’autovettore associato all’autovalore più grande in modulo.
- Polinomio caratteristico: l’equazione det(A − λI) = 0, le cui radici sono gli autovalori. Strumento concettuale e didattico, non strumento computazionale.
flowchart LR
C["autovalore / autovettore<br/>A v = λ v"]
C --> PCA["PCA<br/>direzione di massima varianza"]
C --> PR["PageRank<br/>autovettore principale"]
C --> SC["Clustering spettrale<br/>modi del laplaciano"]
C --> RNN["Stabilità RNN<br/>raggio spettrale"]
C --> TS["Teorema spettrale<br/>matrici simmetriche"]
H["Storia: Cauchy 1829 · Pearson 1901 · Hilbert 1904 · von Mises 1929 · Page-Brin 1998"] -.-> C
Figura 1 — concept graph: autovalore al centro, archi a “PCA / direzione di massima varianza”, “PageRank / autovettore principale”, “spectral clustering / Laplaciano”, “stabilità RNN / spettro Jacobiano”, “teorema spettrale / matrice simmetrica”; small badges with dates: Cauchy 1829, Hilbert 1904, Pearson 1901, Page-Brin 1998
L’intuizione
Sezione intitolata “L’intuizione”Prima di scrivere formule, due immagini diverse. La stessa quantità, due punti di vista che servono in momenti diversi.
Angolo 1: direzioni che la matrice non ruota
Sezione intitolata “Angolo 1: direzioni che la matrice non ruota”Prendi una matrice 2×2 qualsiasi e applicala a tutti i vettori del piano. Quasi ogni vettore viene ruotato di un certo angolo, oltre a essere allungato o accorciato. Ma se la matrice è “ragionevole”, ci sono uno o due vettori speciali che non vengono ruotati: vengono soltanto stirati o compressi lungo la stessa retta su cui giacevano. Quelli sono gli autovettori. Il fattore di stiramento è l’autovalore.
Esempio guidato. La matrice diagonale A = diag(2, 3) manda (1, 0) in (2, 0) — stessa retta, stiramento di fattore 2 — e (0, 1) in (0, 3) — stessa retta, stiramento di fattore 3. Gli assi cartesiani sono gli autovettori, 2 e 3 gli autovalori. Qualsiasi altro vettore, per esempio (1, 1), va in (2, 3): ha cambiato direzione, quindi non è un autovettore.
Visualizzato come deformazione del piano: prendi un cerchio unitario centrato nell’origine, applica la matrice a ogni punto del cerchio. Il risultato è un’ellisse. Gli assi maggiore e minore di quella ellisse, riportati indietro al cerchio originale tramite l’inversa, sono gli autovettori (per matrici simmetriche, esattamente; per matrici generiche, il discorso si raffina ma l’immagine resta utile). Le lunghezze dei semiassi sono i moduli degli autovalori.
Cosa succede se la matrice non è “ragionevole”. Tre casi limite, ciascuno istruttivo.
- Rotazione pura, A = [[0, -1], [1, 0]] (90 gradi antiorari): nessuna retta del piano viene preservata. Gli autovalori sono complessi (i e −i), non reali. Geometricamente: la matrice ruota tutto, niente direzioni invarianti reali.
- Shear puro, A = [[1, 1], [0, 1]]: una sola retta resta ferma, quella dell’asse x. C’è un autovettore (1, 0) con autovalore 1, ma manca un secondo autovettore indipendente. La matrice “inclina” il piano senza stirare lungo nessun’altra direzione invariante.
- Schiacciamento, A = [[1, 0], [0, 0]]: l’asse x è autovettore con autovalore 1, l’asse y è autovettore con autovalore 0. Tutto ciò che ha una componente in y viene appiattito a zero. Un autovalore zero è il sintomo formale del fatto che la matrice “perde dimensioni”.
Angolo 2: il modo dominante che emerge dopo molte applicazioni
Sezione intitolata “Angolo 2: il modo dominante che emerge dopo molte applicazioni”Cambio di prospettiva. Prendi una matrice A e applicala ripetutamente a un vettore di partenza casuale x_0:
Cosa succede dopo molti passi? Per matrici “ragionevoli” succede una cosa precisa: x_k tende ad allinearsi a una direzione specifica, indipendentemente da dove sei partito (purché x_0 non fosse esattamente perpendicolare a quella direzione). Quella direzione è l’autovettore associato all’autovalore più grande in modulo. La chiameremo direzione dominante o modo dominante.
Perché succede. Pensa a x_0 come scomposto nella base degli autovettori: x_0 = c_1 v_1 + c_2 v_2 + … + c_n v_n, con λ_1 il più grande in modulo. Applicare A k volte moltiplica ogni componente per il rispettivo autovalore alla k:
Se |λ_1| > |λ_i| per tutti gli altri i, allora il termine c_1 λ_1^k v_1 cresce strettamente più in fretta di tutti gli altri. Dividendo tutto per |λ_1|^k per non far esplodere i numeri, il primo termine resta dell’ordine di v_1, gli altri tendono a zero come (|λ_i| / |λ_1|)^k. Dopo abbastanza iterazioni, x_k punta praticamente in direzione di v_1.
Questa è l’intuizione operativa più importante del capitolo. L’autovalore dominante non è solo “il più grande dei valori”: è il modo che vince la competizione di applicazioni ripetute della matrice. È il motivo per cui PageRank converge a una distribuzione stabile, è il motivo per cui certe reti ricorrenti esplodono o svaniscono, ed è il motivo per cui PCA trova la direzione di massima varianza iterando.
L’algoritmo che formalizza questa intuizione si chiama power iteration o metodo delle potenze. Lo vedremo tra poco esplicitamente in pseudocodice. È anche il motivo per cui l’autovalore di norma 1 (con damping) di una matrice di transizione è la distribuzione stazionaria di una catena di Markov: le distribuzioni transitorie convergono a quella, perché il modo dominante “assorbe” tutto il resto.
Angolo 3: cambio di base che diagonalizza
Sezione intitolata “Angolo 3: cambio di base che diagonalizza”Un terzo modo di guardare gli autovettori, che lega questo capitolo a matrici e trasformazioni. Una matrice generica, scritta nella base canonica, è una tabella di numeri arbitraria. Ma se cambi base e usi gli autovettori come nuovi assi, la stessa matrice diventa diagonale: ha numeri solo sulla diagonale e zero altrove. Quei numeri sono gli autovalori.
Geometricamente: la matrice A “fa la stessa cosa” della matrice diagonale D, ma scritta in coordinate diverse. La trasformazione è la stessa, cambia solo il sistema di riferimento. Gli autovettori sono il sistema di riferimento giusto, quello in cui la trasformazione si rivela come “stira di fattori λ_i lungo n assi indipendenti”.
Conseguenza pratica enorme. Se devi calcolare A^{1000} (mille passi di un sistema dinamico, mille iterazioni di un Markov chain) e A è diagonalizzabile come A = P D P^{-1}, allora
e D^{1000} è banale: basta elevare ogni autovalore alla 1000. Senza diagonalizzazione, A^{1000} richiederebbe mille moltiplicazioni di matrici n×n. Con diagonalizzazione, è una manciata di prodotti più n elevazioni a potenza scalari.
Le tre immagini — direzione invariante, modo dominante, base che diagonalizza — sono lo stesso oggetto matematico letto a tre profondità diverse. Sono tutte e tre necessarie: la prima per riconoscere geometricamente cosa stai guardando, la seconda per capire le applicazioni dinamiche, la terza per capire la potenza computazionale della decomposizione spettrale.
La meccanica
Sezione intitolata “La meccanica”Definizione
Sezione intitolata “Definizione”Sia A una matrice n×n a coefficienti reali (o complessi). Un vettore v non nullo è un autovettore di A se esiste uno scalare λ tale che
Lo scalare λ si chiama autovalore associato a v. Il vettore nullo non si considera mai autovettore (sennò ogni λ andrebbe bene e il concetto perderebbe senso); ma l’autospazio E_λ = {v : Av = λv} include il vettore nullo per essere un sottospazio vettoriale.
L’equazione caratteristica
det(A − λ I) = 0è una conseguenza diretta. Se v è non nullo e (A − λI)v = 0, allora la matrice A − λI ha un kernel non banale, dunque non è invertibile, dunque ha determinante zero. Le radici di questo polinomio in λ — di grado n — sono gli autovalori. Il polinomio si chiama polinomio caratteristico, e ha una doppia funzione: didattica (per matrici 2×2 si calcola subito a mano) e teorica (esistenza degli autovalori in C dal teorema fondamentale dell’algebra). Per matrici grandi è un metodo computazionale pessimo, e ne diremo perché nella sezione “Dove si rompe”.
Per ogni autovalore λ, la molteplicità algebrica è la sua molteplicità come radice del polinomio caratteristico. La molteplicità geometrica è la dimensione dell’autospazio E_λ. Vale sempre . Se per qualche λ la disuguaglianza è stretta, A non è diagonalizzabile.
Esempio 2×2 a mano
Sezione intitolata “Esempio 2×2 a mano”det(A − λI) = (2 − λ)(3 − λ) − 0 · 1 = (2 − λ)(3 − λ)Autovettore per λ_1 = 2: risolvere (A − 2I)v = 0, cioè [[0, 1], [0, 1]] v = 0. La prima e la seconda riga dicono entrambe v_2 = 0. v_1 libero. Autovettore: (1, 0).
Autovettore per λ_2 = 3: (A − 3I)v = 0, cioè [[-1, 1], [0, 0]] v = 0. Vincolo: −v_1 + v_2 = 0, cioè v_1 = v_2. Autovettore: (1, 1).
Diagonalizzazione
Sezione intitolata “Diagonalizzazione”Se A ha n autovettori linearmente indipendenti, raccoglili come colonne di una matrice P, e raccogli i corrispondenti autovalori sulla diagonale di D. Vale
Equivalentemente: D = P^{-1} A P. Cambiare base con P trasforma A in una matrice diagonale.
Conseguenza per le potenze:
perché tutte le coppie P^{-1} P interne si elidono. D^k è la matrice diagonale con λ_i^k sulla diagonale.
Teorema spettrale (matrici simmetriche reali)
Sezione intitolata “Teorema spettrale (matrici simmetriche reali)”Teorema (Cauchy 1829, formulazione moderna). Sia A una matrice n×n reale e simmetrica (A^T = A). Allora:
- tutti gli autovalori di A sono reali;
- esistono n autovettori a coppie ortogonali;
- si può scegliere P ortogonale (P^T = P^{-1}), e A = P D P^T.
Questo è un teorema in senso stretto, non una somiglianza o un’analogia: è una proposizione formalmente provabile, e la sua dimostrazione standard procede per induzione sulla dimensione, usando l’esistenza di un autovalore reale (che richiede simmetria) e poi restringendo al complemento ortogonale.
Importanza pratica: le matrici “naturali” in statistica e ottimizzazione sono simmetriche. La covarianza è simmetrica per costruzione. La Hessiana di una funzione liscia è simmetrica per il teorema di Schwarz. Il Laplaciano di un grafo non orientato è simmetrico. Il teorema spettrale garantisce che hanno una decomposizione pulita con autovalori reali e autovettori ortonormali. Senza questa garanzia, PCA, spectral clustering, analisi della Hessiana sarebbero molto più fragili.
Power iteration in pseudocodice
Sezione intitolata “Power iteration in pseudocodice”def power_iteration(A, num_iterations=1000, tol=1e-10): n = A.shape[0] x = random_vector(n) x = x / norm(x) lambda_old = 0.0 for k in range(num_iterations): y = A @ x lambda_new = x @ y # Rayleigh quotient x = y / norm(y) if abs(lambda_new - lambda_old) < tol: break lambda_old = lambda_new return lambda_new, xLettura riga per riga.
- : inizializza un vettore casuale unitario. La randomicità serve solo a garantire che x abbia componente non nulla lungo l’autovettore dominante (un x scelto male — per esempio esattamente ortogonale — bloccherebbe il metodo).
y = A @ x: applica la matrice. È il cuore dell’iterazione: ogni passo amplifica le componenti lungo gli autovettori in proporzione ai rispettivi autovalori.- : stima dell’autovalore tramite il quoziente di Rayleigh , che vale x^T A x quando ‖x‖ = 1. Per matrici simmetriche, questa è la migliore stima possibile di λ data la direzione corrente.
x = y / norm(y): rinormalizza, altrimenti |x| crescerebbe (o sparirebbe) come |λ_1|^k.- Convergenza monitorata sull’autovalore.
Convergenza. Lineare con rate |λ_2 / λ_1|, dove λ_2 è il secondo autovalore in modulo. Più “stacca” il dominante, più rapido il metodo.
Numpy in pratica
Sezione intitolata “Numpy in pratica”In pratica nessuno calcola autovalori a mano oltre n = 3. Numpy (o scipy/LAPACK sotto) li dà direttamente:
import numpy as npA = np.array([[2.0, 1.0], [0.0, 3.0]])eigvals, eigvecs = np.linalg.eig(A)# eigvals: array([2., 3.])# eigvecs: matrice le cui colonne sono gli autovettoriPer matrici simmetriche, usare np.linalg.eigh (versione hermitian/symmetric): è più stabile numericamente e restituisce autovalori già reali e in ordine crescente, autovettori già ortonormali.
I solver moderni non passano dal polinomio caratteristico: usano la QR algorithm (introdotta da John Francis nel 1961 e Vera Kublanovskaya nel 1962), che itera decomposizioni QR fino a convergere a una forma quasi triangolare i cui elementi diagonali sono gli autovalori. Il dettaglio non serve qui; conta sapere che np.linalg.eig(A) non sta risolvendo in senso letterale.
Tre esempi eterogenei: un calcolo numerico a confronto, un caso di codice (PCA su dati 2D) e uno scenario reale (PageRank su un piccolo grafo).
Esempio 1: due matrici 2×2 a confronto
Sezione intitolata “Esempio 1: due matrici 2×2 a confronto”Confronto fra una matrice “ben comportata” e una “difettosa”, per fissare la differenza tra diagonalizzabile e non.
Matrice A = [[2, 0], [0, 3]] (diagonale). È già diagonale: gli autovalori sono 2 e 3, gli autovettori sono e_1 = (1, 0) e e_2 = (0, 1). La matrice stira il piano di fattore 2 lungo x e 3 lungo y. Ogni cerchio centrato nell’origine diventa un’ellisse con semiasse 2 lungo x e 3 lungo y. Applicata k volte, manda (x, y) in (2^k x, 3^k y): la y vince, e dopo poche iterazioni il vettore punta praticamente nella direzione (0, 1).
Matrice B = [[1, 1], [0, 1]] (shear). Polinomio caratteristico: (1 − λ)^2 = 0, autovalore λ = 1 con molteplicità algebrica 2. Autospazio: (B − I) v = 0 dà [[0, 1], [0, 0]] v = 0, cioè v_2 = 0. Autovettore unico (a meno di scala): (1, 0). Molteplicità geometrica 1, algebrica 2: B non è diagonalizzabile. Geometricamente, B inclina il piano: (0, 1) va in (1, 1), poi in (2, 1), poi in (3, 1)… la componente x cresce indefinitamente, la componente y resta a 1. Non c’è una seconda direzione invariante, e infatti applicare B molte volte non fa convergere i vettori a un singolo modo: li trascina lungo l’asse x con velocità che dipende dalla y di partenza.
Il messaggio operativo. Quando una matrice ha un autovalore con molteplicità algebrica maggiore di quella geometrica, manca una direzione: serve la forma di Jordan per descrivere completamente il suo comportamento, e l’analisi “autovettori ortogonali, dinamica di modi indipendenti” non vale. È un caso patologico in dimensione bassa, ma in dimensione alta capita più spesso di quanto si pensi, soprattutto in matrici quasi-simmetriche disturbate da rumore numerico.
Esempio 2: PCA su un dataset 2D
Sezione intitolata “Esempio 2: PCA su un dataset 2D”Codice numpy minimale, scritto perché la logica resti visibile. Generiamo un cluster allungato in direzione (1, 2), centrato sull’origine, e verifichiamo che PCA recuperi quella direzione come prima componente principale.
import numpy as np
rng = np.random.default_rng(seed=42)n = 1000# direzione allungata: rumore lungo (1, 2), rumore piccolo perpendicolaret = rng.normal(0, 3.0, n) # varianza 9 lungo (1, 2) normalizzatos = rng.normal(0, 0.5, n) # varianza 0.25 perpendicolaredirection = np.array([1.0, 2.0]) / np.sqrt(5.0)perp = np.array([-2.0, 1.0]) / np.sqrt(5.0)X = t[:, None] * direction + s[:, None] * perp # shape (n, 2)
# centra (qui media già ~0, ma la pratica corretta è centrare sempre)X = X - X.mean(axis=0, keepdims=True)
# matrice di covarianzaC = (X.T @ X) / (n - 1)print("covarianza:\n", C)
# decomposizione spettrale (matrice simmetrica)eigvals, eigvecs = np.linalg.eigh(C)
# eigh restituisce autovalori in ordine crescente: invertiamoorder = np.argsort(eigvals)[::-1]eigvals = eigvals[order]eigvecs = eigvecs[:, order]
print("autovalori (varianze lungo le componenti):", eigvals)print("prima componente principale:", eigvecs[:, 0])print("direzione originale (per confronto): ", direction)Output atteso: autovalori circa [9.0, 0.25] (varianza lungo la direzione allungata e perpendicolare), prima componente principale circa ±(0.447, 0.894), che è proprio a meno di un segno. Il segno è ambiguo per costruzione: se v è autovettore, anche −v lo è.
Equivalenza, da argomentare. Il problema “trova la retta passante per l’origine che massimizza la varianza dei dati proiettati su di essa” è equivalente a “trova l’autovettore della covarianza con autovalore massimo”. Argomento: la varianza dei dati proiettati su un versore u è u^T C u (forma quadratica della covarianza). Massimizzare u^T C u sotto il vincolo ‖u‖ = 1 è un problema standard di moltiplicatori di Lagrange che conduce a : u è autovettore di C, e λ — il moltiplicatore — è la varianza ottenuta. Massimizzare λ significa scegliere l’autovalore più grande. Pearson lo deriva esplicitamente nel suo paper del 1901 sotto forma di “linee di miglior fit”.
Per più componenti, l’argomento si itera nel sottospazio ortogonale alla prima, e si ottiene il secondo autovettore, e così via. Il teorema spettrale garantisce che il processo termina con n autovettori ortogonali.
Esempio 3: PageRank su un grafo a quattro nodi
Sezione intitolata “Esempio 3: PageRank su un grafo a quattro nodi”flowchart LR
A((A))
B((B))
C((C))
D((D))
A --> B
A --> C
B --> C
C --> A
D --> A
D --> C
Figura 4 — piccolo grafo orientato a quattro nodi (A, B, C, D) su cui PageRank calcola l’autovettore dominante della matrice di transizione
Quattro pagine A, B, C, D con questi link:
Matrice di transizione M (colonne = pagina di partenza, righe = pagina di arrivo, ogni colonna somma a 1, distribuendo uniformemente la probabilità tra i link uscenti):
da A da B da C da DUna colonna di soli zero è un problema: la pagina D non è mai destinazione di alcun link in questa matrice (cioè D non riceve mai un random surfer da nessuno). Se invece la pagina avesse zero link uscenti, sarebbe un “dangling node” e bisognerebbe trattarla esplicitamente. Per semplicità di esempio, ignoriamo questi accorgimenti e applichiamo una damping tipica.
Matrice “googleized”: G = 0.85 · M + 0.15 · (1/4) · J, dove J è la matrice 4×4 di soli 1. Il damping garantisce che G abbia un solo autovalore di modulo 1 (con autovettore tutto positivo) e che il secondo autovalore sia in modulo ≤ 0.85, rendendo power iteration rapida.
Calcolo: ogni componente di r_1 è la corrispondente riga di G moltiplicata per (1/4, 1/4, 1/4, 1/4). Per la componente A: 0.85 · (0 + 0 + 1 + 0.5)/4 + 0.15 · 1/4 = 0.85 · 0.375 + 0.0375 = 0.31875 + 0.0375 = 0.35625. Le altre componenti si calcolano analogamente. Dopo qualche decina di iterazioni il vettore converge a una distribuzione stabile r in cui A e C dominano (sono le pagine più “centrali” dato il pattern di link), B sta nel mezzo, D (che non riceve link) ha solo il contributo del damping.
Equivalenza, da argomentare. Il PageRank di una pagina è, per definizione operativa, la sua componente nell’autovettore principale di G normalizzato in L1. Argomento: la condizione di stabilità di un random walk è r = G r (la distribuzione dopo un passo è uguale a quella prima del passo), che è esattamente , cioè r è autovettore di autovalore 1. L’esistenza e unicità di r positivo seguono dal teorema di Perron-Frobenius per matrici non negative, che garantisce un autovalore reale positivo dominante e un autovettore associato di componenti tutte positive. Il damping serve esattamente a rendere G strettamente positiva e quindi a garantire l’applicabilità del teorema.
Power iteration è il metodo industrialmente usato perché su web di miliardi di pagine la matrice M è enorme ma sparsa: il prodotto matrice-vettore costa O(numero di link), non O(n^2). E poiché serve solo l’autovettore dominante, non c’è bisogno di metodi più sofisticati.
flowchart LR
A((A))
B((B))
C((C))
D((D))
A --> B
A --> C
B --> C
C --> A
D --> A
D --> C
Figura 4 — small directed graph with nodes A, B, C, D and arrows according to the description above; rendered as mermaid; alongside, a small bar chart showing converged PageRank values
Applicazioni pratiche
Sezione intitolata “Applicazioni pratiche”Cinque applicazioni in cui gli autovalori e gli autovettori sono il motore concettuale, non un dettaglio tecnico.
PCA per dimensionality reduction. Già visto in esempio. Operativamente: se si hanno feature in dimensione d e si vuole proiettare in dimensione k ≪ d preservando il più possibile la varianza, si calcolano i k autovettori della covarianza con autovalori più grandi e si proietta i dati su quel sottospazio. È la base di compressione dati, denoising, visualizzazione. Il teorema di Eckart-Young garantisce che questa è la migliore approssimazione di rango k in norma di Frobenius.
PageRank e centralità in reti. Già visto. Generalizzazione: l’eigenvector centrality è una misura di importanza di nodi in un grafo basata sull’autovettore principale della matrice di adiacenza. Una variante è il Katz centrality. PageRank è una versione adattata al caso di link asimmetrici e dangling nodes.
Spectral clustering. Dato un grafo con matrice di adiacenza pesata W, costruisci il Laplaciano L = D − W con D = diag(somme di righe di W). L è simmetrica semidefinita positiva, ha autovalori reali non negativi, e l’autovalore zero ha autovettore costante (sempre presente). Gli autovettori associati agli autovalori positivi più piccoli — i modi lenti del Laplaciano — codificano la struttura di clustering del grafo. Il classico normalized cut di Shi e Malik (2000) usa il primo autovettore non banale del Laplaciano normalizzato per produrre un taglio bilanciato. È la base teorica dello spectral clustering, e ha legami diretti con community detection in social network e segmentazione di immagini.
Stabilità di sistemi dinamici e RNN. Sistema discreto x_{t+1} = A x_t. La traiettoria è x_t = A^t x_0 = somma di c_i λ_i^t v_i nella base degli autovettori. Stabilità: tutti |λ_i| < 1 → x_t → 0 (sistema dissipativo); qualche |λ_i| > 1 → divergenza esponenziale; |λ_i| = 1 → caso marginale (orbite limitate, oscillanti per autovalori complessi). In sistemi continui x’(t) = A x(t), la condizione di stabilità è parte reale di tutti gli autovalori strettamente negativa.
Per le reti ricorrenti, alla linearizzazione attorno all’origine, la dinamica dello stato nascosto è governata dalla matrice di transizione W_h. Se i suoi autovalori dominanti hanno modulo > 1, gradient explosion; se ≤ 1 ma vicini a zero, vanishing. È il problema classico delle RNN vanilla, mitigato da LSTM e GRU tramite gating, e da tecniche come spectral normalization (vincolare la norma spettrale della matrice di transizione a essere ≤ 1).
Spettro Jacobiano e propagazione del segnale. In una rete profonda, il forward pass di un mini-batch è composto da molte trasformazioni lineari intervallate da non linearità. Linearizzando, la propagazione di una piccola perturbazione strato dopo strato dipende dal prodotto delle Jacobiane locali, e quindi dai loro spettri. Pennington, Schoenholz e Ganguli (2017) mostrano che inizializzazioni che producono Jacobiane con tutti i valori singolari vicino a 1 (“dynamical isometry”) permettono di addestrare reti con migliaia di strati anche senza skip connections. È un’applicazione diretta dello spettro a un problema concreto di ingegneria del training.
Dove si rompe
Sezione intitolata “Dove si rompe”Sezione lunga perché qui si concentra la differenza tra “ho capito il concetto” e “so quando NON applicarlo”.
Matrici non diagonalizzabili
Sezione intitolata “Matrici non diagonalizzabili”Se la molteplicità geometrica è strettamente minore di quella algebrica per qualche autovalore, la matrice è difettosa. Lo shear [[1, 1], [0, 1]] è il prototipo: autovalore 1 con molteplicità algebrica 2 ma molteplicità geometrica 1. Manca una direzione, e la dinamica non si decompone in modi indipendenti. La descrizione completa richiede la forma di Jordan: blocchi diagonali con λ sulla diagonale e 1 sulla sopradiagonale, che generano dinamiche del tipo (crescita polinomiale moltiplicata per esponenziale).
Conseguenza pratica. In dimensione alta è raro trovare matrici esattamente difettose, ma è comune trovare matrici vicine a difettose: due autovalori quasi coincidenti con autovettori quasi paralleli. In questi casi i calcoli numerici diventano instabili: piccole perturbazioni della matrice spostano grosso gli autovettori. Diagnosi tipica: il condition number degli autovettori (norma di P · norma di P^{-1}) diventa enorme. Se vedi un solver che restituisce autovettori con componenti gigantesche, sospetta vicinanza al caso difettoso.
Autovalori complessi e sistemi reali
Sezione intitolata “Autovalori complessi e sistemi reali”Una matrice reale non simmetrica può avere autovalori complessi, sempre in coppie coniugate (λ, λ̄). L’esempio canonico è la rotazione 2D di angolo θ: A = [[cos θ, −sin θ], [sin θ, cos θ]], autovalori e^{iθ} e e^{−iθ}.
Cosa significano operativamente. La rotazione non lascia ferma alcuna retta reale (giustamente: è una rotazione). Ma possiede un piano invariante (in 2D è tutto il piano, in dimensione superiore è il piano span dei due autovettori complessi coniugati visto come sottospazio reale 2D), e dentro quel piano la dinamica è una rotazione di angolo θ ad ogni applicazione. Il modulo dell’autovalore complesso governa la dilatazione: |λ| < 1 → spirale che si contrae verso l’origine; |λ| > 1 → spirale che esplode; |λ| = 1 → orbite circolari pure.
Trappola tipica. Quando si fa power iteration su una matrice con autovalore dominante complesso (in coppia), il metodo non converge a una direzione fissa: oscilla. Per matrici reali con autovalori complessi serve un metodo diverso (subspace iteration o QR algorithm). Per matrici simmetriche reali il problema non si pone, perché tutti gli autovalori sono reali — è un altro motivo per cui il caso simmetrico è “il caso amico”.
Sensibilità del polinomio caratteristico
Sezione intitolata “Sensibilità del polinomio caratteristico”Calcolare gli autovalori passando dal polinomio caratteristico è una pessima idea per n grande. Il polinomio di grado n ha coefficienti che dipendono da combinazioni complicate degli elementi di A; piccoli errori nei coefficienti producono errori grandi nelle radici. L’esempio canonico è il polinomio di Wilkinson (James Wilkinson, 1919-1986, numerista inglese, autore di The Algebraic Eigenvalue Problem del 1965), un polinomio con radici intere da 1 a 20 i cui coefficienti, se perturbati di un fattore minuscolo, spostano alcune radici di ordini di grandezza, addirittura nel piano complesso. La morale: non passare mai dal polinomio caratteristico per n > 4 circa.
I solver veri usano algoritmi che lavorano direttamente sulla matrice (QR algorithm, divide-and-conquer, MRRR per matrici tridiagonali simmetriche). Sono numericamente stabili e calcolano autovalori e autovettori in tempo O(n^3) (o meglio per matrici strutturate).
Condizionamento e perturbazioni
Sezione intitolata “Condizionamento e perturbazioni”Anche con un buon algoritmo, gli autovalori possono essere mal condizionati. Per matrici simmetriche il condizionamento è ottimo: una perturbazione ε della matrice produce perturbazione ε degli autovalori (teorema di Weyl). Per matrici non simmetriche il condizionamento può essere arbitrariamente cattivo, soprattutto vicino a matrici difettose. La quantità rilevante è il numero di Bauer-Fike, legato al condizionamento della matrice degli autovettori.
Conseguenza per l’AI pratica. In un training run, le matrici di transizione delle RNN o le Jacobiane delle reti profonde sono raramente esattamente simmetriche e raramente hanno spettro ben separato. Le diagnosi spettrali (calcolare autovalori per capire stabilità) vanno prese come indicatori grossolani, non come misure precise. Per analisi affidabili si usano i valori singolari (SVD) anziché gli autovalori: l’SVD esiste per qualsiasi matrice, è sempre numericamente stabile, e i valori singolari sono sempre reali non negativi.
Matrici rettangolari: ponte a SVD
Sezione intitolata “Matrici rettangolari: ponte a SVD”Gli autovalori sono definiti solo per matrici quadrate. Se A è m×n con m ≠ n, l’equazione non ha senso dimensionale. Per matrici rettangolari la generalizzazione è la decomposizione a valori singolari (SVD): A = U Σ V^T, con Σ matrice m×n con valori non negativi sulla diagonale (i valori singolari) e zeri altrove, U e V ortogonali. I valori singolari sono le radici quadrate degli autovalori di A^T A (o equivalentemente A A^T), che sono simmetriche semidefinite positive.
L’SVD è strettamente più generale e più stabile della decomposizione spettrale: vale per ogni matrice (anche rettangolari, anche non quadrate), produce sempre valori reali non negativi, è il calcolo “sicuro” da fare in pratica. SVD (in preparazione) è il capitolo dedicato.
Per matrici simmetriche semidefinite positive, autovalori e valori singolari coincidono. Per matrici simmetriche con autovalori negativi, i valori singolari sono i moduli degli autovalori. Per matrici generiche, i due concetti divergono.
Alta dimensione e spettri quasi piatti
Sezione intitolata “Alta dimensione e spettri quasi piatti”In dimensioni molto alte (centinaia, migliaia, milioni) due fenomeni complicano l’analisi. Primo, lo spettro tende a concentrarsi: per matrici random con elementi i.i.d. il bulk degli autovalori si distribuisce secondo leggi precise (semicerchio di Wigner per matrici simmetriche, anello di Girko per generiche), e i singoli autovalori non sono particolarmente significativi — è la distribuzione che lo è. Secondo, l’autovalore dominante può essere a malapena distinguibile dal bulk, rendendo power iteration lentissima o l’identificazione dei modi inaffidabile.
Conseguenza per l’analisi di reti neurali profonde. Lo spettro della Jacobiana di un layer ha tipicamente un bulk e qualche outlier. Sono gli outlier a contare per la dinamica del training, ma sono difficili da stimare. Tecniche come la stochastic Lanczos quadrature stimano la distribuzione spettrale senza calcolare singoli autovalori, ed è quello che si fa in pratica per modelli da miliardi di parametri.
Quando l’intuizione “modo dominante” inganna
Sezione intitolata “Quando l’intuizione “modo dominante” inganna”L’intuizione “applica la matrice molte volte e otterrai il modo dominante” funziona se c’è un gap spettrale, cioè |λ_1| > |λ_2|. Se invece più autovalori hanno modulo simile, il sistema oscilla tra modi senza convergere. È il caso, per esempio, di sistemi con simmetrie esatte (un grafo bipartito ha autovalori λ e −λ in coppia: il Laplaciano oscilla in segno e power iteration non si stabilizza). Diagnosi: se il rapporto |λ_2|/|λ_1| è vicino a 1, il modo dominante non emerge nettamente, e serve un metodo diverso (subspace iteration, deflation).
Autovalori non danno tutto: il rango può ingannare
Sezione intitolata “Autovalori non danno tutto: il rango può ingannare”Un caso sottile. Una matrice n×n può avere n autovalori non nulli ma essere “quasi singolare” in pratica: un autovalore vicino a zero (ma non zero) genera un autovettore lungo cui la matrice schiaccia quasi tutto. Numericamente, distinguere “autovalore zero” da “autovalore 10^{-14}” è impossibile in floating point. Conseguenza: il rango numerico di una matrice — il numero di autovalori (o valori singolari) sopra una soglia di tolleranza — è ciò che conta in pratica, non il rango algebrico esatto.
Per matrici simmetriche definite positive (covarianze, Gram, Hessiane in punti di minimo) il problema è particolarmente importante. Il numero di condizione κ(A) = λ_max / λ_min controlla la velocità di convergenza di metodi iterativi che la coinvolgono: gradient descent su una loss quadratica con Hessiana A converge a velocità che dipende da κ. Hessiane mal condizionate (κ ≫ 1) sono il motivo per cui gradient descent vanilla è lento e si introducono momentum, preconditioning e Adam.
Aggiornamenti incrementali e online
Sezione intitolata “Aggiornamenti incrementali e online”In molte applicazioni reali la matrice cambia nel tempo: nuova osservazione che entra in una stima di covarianza, link che vengono aggiunti a un grafo, layer che vengono fine-tunati. Ricalcolare gli autovalori da zero ogni volta è proibitivo. Esistono metodi di aggiornamento incrementale (rank-one updates, perturbation theory, randomized SVD streaming) che mantengono una stima approssimata dello spettro al variare della matrice. Per il libro, basti sapere che il problema esiste e che np.linalg.eig non è adatto a contesti streaming: lì servono librerie dedicate (scikit-learn IncrementalPCA, faiss per ANN, librerie specializzate per online spectral methods).
Una nota sul Rayleigh quotient
Sezione intitolata “Una nota sul Rayleigh quotient”Per matrici simmetriche, c’è un’identità che lega autovalori e ottimizzazione. Definito il quoziente di Rayleigh
per x non nullo, vale che il massimo di R(x) è λ_max e si raggiunge in un autovettore associato; il minimo è λ_min e si raggiunge in un autovettore associato; e gli autovalori intermedi corrispondono a punti stazionari di R sotto vincoli di ortogonalità con quelli precedenti (teorema min-max di Courant-Fischer). Questa è la formulazione variazionale del problema agli autovalori, ed è la chiave per dimostrare l’equivalenza tra PCA come massimizzazione di varianza e PCA come decomposizione spettrale: massimizzare u^T C u sotto ‖u‖ = 1 è esattamente massimizzare il Rayleigh quotient. Il moltiplicatore di Lagrange del vincolo è λ.
Conseguenza algoritmica. Il metodo del Rayleigh quotient iteration è una variante di power iteration che converge cubicamente (non solo linearmente) verso autocoppie isolate: ad ogni passo si stima λ tramite R(x) e si risolve (un problema lineare quasi singolare, ma risolvibile con cura). Per matrici simmetriche è uno dei metodi più veloci per autovalori interni isolati. Lo si vede in pacchetti seri di numerica (LAPACK, ARPACK).
Collegamenti
Sezione intitolata “Collegamenti”- vettori-spazi: autovettore è un vettore in senso pieno, e l’autospazio è un sottospazio. La dimensione dello spazio determina quanti autovalori cercare (con molteplicità).
- norme-distanze: il modulo dell’autovalore complesso vive nella norma euclidea complessa; condizionamento e stabilità si misurano in norme operatoriali.
- matrici-trasformazioni: la diagonalizzazione è un cambio di base che mostra la trasformazione “nuda” come stiramenti lungo assi indipendenti.
- prodotto-scalare: nel teorema spettrale gli autovettori sono ortogonali, e l’ortogonalità è definita dal prodotto scalare. La forma quadratica è massimizzata dall’autovettore dominante quando A è simmetrica — è esattamente il quoziente di Rayleigh.
- pca (in preparazione): equivalenza centrale di questo capitolo, decomposizione spettrale della covarianza.
- attention-intuizione (in preparazione): l’attention head non usa direttamente autovalori, ma il legame tra prodotti scalari, modi dominanti e similarità è lo stesso linguaggio.
- discesa-gradiente: la Hessiana è simmetrica, i suoi autovalori controllano la curvatura della loss, e il rapporto |λ_max|/|λ_min| è il numero di condizione che governa la velocità di convergenza di gradient descent.
- embedding-concetto: la struttura geometrica degli embedding si analizza con tecniche spettrali (PCA delle attivazioni, top-k modi del Gram matrix).
- monte-carlo-tree-search (in preparazione): non c’è collegamento spettrale diretto, ma le catene di Markov che modellano l’esplorazione hanno una distribuzione stazionaria che è autovettore della transizione.
Una breve guida diagnostica
Sezione intitolata “Una breve guida diagnostica”Per chiudere prima delle fonti, una checklist che condensa quando autovalori e autovettori sono lo strumento giusto e quando no.
- La matrice è quadrata? Se no: usa SVD. Autovalori non si applicano.
- La matrice è simmetrica (o hermitiana nel caso complesso)? Se sì: hai garanzie forti (autovalori reali, autovettori ortogonali, condizionamento ottimo). Usa
np.linalg.eigh. È il “caso amico”. - Cerchi solo l’autovalore più grande (o i pochi più grandi)? Usa power iteration o le sue varianti (Lanczos, Arnoldi). Per matrici sparse e grandi è l’unica via percorribile.
- Cerchi tutto lo spettro? Per n ≤ qualche migliaio,
np.linalg.eigoeighbasta. Per n più grande, di solito non vuoi davvero tutto lo spettro: vuoi una sua statistica (densità, traccia, log-determinante), che si stima senza calcolare i singoli autovalori. - La matrice cambia online? Non ricalcolare da zero. Usa aggiornamenti incrementali.
- La matrice è “quasi simmetrica” (perturbazione di una simmetrica)? Tratta gli autovalori complessi che emergono come artefatti, e considera SVD se la stabilità conta più della simmetria.
- Stai facendo diagnosi di stabilità di una RNN o analisi di propagazione di gradienti? Usa i valori singolari della matrice di transizione o della Jacobiana, non gli autovalori. Sono più stabili e più informativi per il problema specifico.
Il filo conduttore di tutta questa cassetta degli attrezzi è uno: gli autovalori parlano della trasformazione, i valori singolari parlano della trasformazione e della metrica. Per matrici simmetriche definite positive coincidono. In tutti gli altri casi, scegli con criterio.
Per andare oltre
Sezione intitolata “Per andare oltre”- Strang, Gilbert (2016). Introduction to Linear Algebra, 5th edition, Wellesley-Cambridge Press. Capitoli 6 e 7: trattazione standard pedagogicamente eccellente, esempi 2×2 e 3×3 lavorati a mano.
- Axler, Sheldon (2015). Linear Algebra Done Right, 3rd edition, Springer. Capitolo 5: costruzione algebrica pulita, autovalori senza determinanti, prospettiva utile a chi viene da informatica e vuole capire la struttura senza il rumore del polinomio caratteristico.
- 3Blue1Brown — Sanderson, Grant (2016). Essence of Linear Algebra, capitoli 14-16. Visualizzazioni canoniche delle direzioni invarianti, del cambio di base e della deformazione del cerchio in ellisse.
- Trefethen, Lloyd N.; Bau, David (1997). Numerical Linear Algebra. SIAM. Capitoli 24-28: cosa fanno davvero i solver moderni, sensibilità numerica, QR algorithm e Lanczos. Il riferimento se si vuole capire perché
np.linalg.eigè quel che è. - Page, Lawrence; Brin, Sergey; Motwani, Rajeev; Winograd, Terry (1998). The PageRank Citation Ranking: Bringing Order to the Web. Stanford InfoLab Technical Report 1999-66. Il paper originale, breve e leggibile, mostra l’intero argomento “autovettore principale di una matrice di transizione damped” senza prerequisiti pesanti.