Algebra lineare (3): calcolo differenziale con le matrici
Nelle prime due parti di questa serie abbiamo costruito gli spazi vettoriali e studiato le matrici. Restava fuori un pezzo: cosa succede quando si deriva rispetto a un vettore o a una matrice.
È il pezzo che serve davvero se si scrive codice di ottimizzazione. Ogni algoritmo di addestramento, dalla regressione lineare alla discesa del gradiente in una rete neurale, calcola la derivata di una funzione scalare — la loss — rispetto a un insieme di parametri organizzati in matrici. Le regole che seguono sono quelle che permettono di farlo senza scendere agli indici ogni volta, e quello che si scopre è che ricalcano fedelmente le regole del calcolo a una variabile: dove nel caso scalare c'è \(ax\), qui c'è \(b^T x\); dove c'è \(ax^2\), qui c'è \(x^T A x\); e le derivate si corrispondono una per una.
1. Il gradiente rispetto a una matrice
La definizione è la più naturale possibile: si deriva rispetto a ogni singolo elemento e si ripongono i risultati nella stessa posizione in cui stava l'elemento derivato.
Il gradiente ha dunque sempre la stessa forma dell'oggetto rispetto a cui si deriva. Nel caso particolare in cui l'argomento sia un vettore \(x \in \mathbb{R}^n\), il gradiente è a sua volta un vettore colonna:
Questa corrispondenza di forma non è un dettaglio estetico: è ciò che rende possibile scrivere l'aggiornamento dei parametri come \(\theta \leftarrow \theta - \eta\, \nabla_\theta L\), sommando due oggetti della stessa dimensione.
- \(\nabla_x\big(f(x) + g(x)\big) = \nabla_x f(x) + \nabla_x g(x)\)
- \(\forall t \in \mathbb{R} : \nabla_x\big(t\, f(x)\big) = t\, \nabla_x f(x)\)
Il gradiente è cioè un operatore lineare, il che permette di spezzare il calcolo di espressioni complicate in pezzi trattabili separatamente — cosa che faremo tra poco derivando i minimi quadrati.
2. L'hessiana
Passando alle derivate seconde, le combinazioni possibili di due indici diventano \(n^2\) e il risultato è di nuovo una matrice, anche quando si parte da un vettore.
L'hessiana è sempre simmetrica, perché per il teorema di Schwarz l'ordine di derivazione non conta:
Ed è una simmetria fortunata, perché è esattamente l'ipotesi sotto cui valgono i teoremi più forti visti nella seconda parte: autovalori reali, base ortonormale di autovettori, caratterizzazione della definitezza tramite il segno degli autovalori. Il legame fra definitezza dell'hessiana e natura di un punto critico è quello che ci si aspetta dal caso a una variabile.
- se \(df(\dot x) = 0\) e \(H_f(\dot x)\) è definita positiva, allora \(\dot x\) è un minimo relativo per \(f\);
- se \(df(\dot x) = 0\) e \(H_f(\dot x)\) è definita negativa, allora \(\dot x\) è un massimo relativo per \(f\).
È l'analogo esatto del criterio della derivata seconda: \(f''(x) \gt 0\) diventa "hessiana definita positiva". Quando l'hessiana è indefinita — autovalori di entrambi i segni — il punto critico non è né un minimo né un massimo, ma una sella: la funzione sale lungo certe direzioni e scende lungo altre. Sono i punti che rendono difficile l'ottimizzazione non convessa, e la seconda parte ci ha già detto come riconoscerli.
3. Gradiente e hessiana delle forme lineari e quadratiche
Passiamo al calcolo effettivo. Ricaviamo le derivate dei due casi che compaiono praticamente ovunque, e verifichiamo la corrispondenza con il caso scalare.
3.1 Forma lineare
Per \(x \in \mathbb{R}^n\) sia \(f(x) = b^T x\), con \(b \in \mathbb{R}^n\) vettore noto. Esplicitando,
e derivando rispetto alla generica componente \(x_k\), tutti i termini della somma spariscono tranne quello che contiene effettivamente \(x_k\):
Raccogliendo le \(n\) derivate parziali in un vettore si ottiene
che è l'analogo diretto della derivata in una variabile \(\frac{d}{dx}(ax) = a\).
3.2 Forma quadratica: il gradiente
Consideriamo ora \(f(x) = x^T A x\) con \(A \in \mathbf{S}^n\) simmetrica — ipotesi legittima, come abbiamo visto nella seconda parte, perché la parte antisimmetrica non contribuisce alla forma quadratica. Ricordiamo che
Per calcolare la derivata parziale rispetto a \(x_k\) conviene separare i termini secondo che contengano \(x_k\) una volta, due volte o nessuna:
Il primo blocco non dipende da \(x_k\) e si annulla; il secondo e il terzo sono lineari in \(x_k\); l'ultimo è quadratico e dà un fattore 2. Restano
dove nel passaggio centrale i due termini \(A_{kk}x_k\) mancanti sono stati riassorbiti nelle sommatorie complete. L'ultimo membro è il prodotto scalare della \(k\)-esima riga di \(A\) per \(x\), moltiplicato per 2; considerando tutte le \(n\) righe si ottiene
di nuovo in perfetta analogia col caso scalare, dove \(\frac{d}{dx}(ax^2) = 2ax\).
3.3 Forma quadratica: l'hessiana
Derivando una seconda volta il risultato appena ottenuto:
dove l'ultima uguaglianza usa ancora la simmetria di \(A\). Dunque
analogamente a \(\frac{d^2}{dx^2}(ax^2) = 2a\). Riassumendo le tre formule:
| Caso | Funzione | Derivata |
|---|---|---|
| Forma lineare, gradiente | \(f(x) = b^T x\) | \(\nabla_x\, b^T x = b\) |
| Forma quadratica, gradiente | \(f(x) = x^T A x\) | \(\nabla_x\, x^T A x = 2Ax\) (\(A\) simmetrica) |
| Forma quadratica, hessiana | \(f(x) = x^T A x\) | \(\nabla_x^2\, x^T A x = 2A\) (\(A\) simmetrica) |
Vale la pena notare che l'hessiana di una forma quadratica è costante: non dipende da \(x\). Una forma quadratica con \(A\) definita positiva è quindi convessa ovunque, e ha un unico minimo globale. È la ragione per cui i problemi ai minimi quadrati si risolvono in forma chiusa, mentre l'addestramento di una rete neurale — dove la loss non è quadratica — richiede metodi iterativi.
4. Le equazioni dei minimi quadrati
Con questi strumenti possiamo derivare uno dei risultati più usati in assoluto, e chiudere il conto lasciato aperto nella seconda parte.
Poiché \(b\) non appartiene al range di \(A\) — cioè, ricordando la seconda parte, \(b\) non è combinazione lineare delle colonne di \(A\) — non esiste alcun \(x\) con \(Ax = b\). Cerchiamo allora l'\(x\) che rende \(Ax\) il più vicino possibile a \(b\), misurando con la norma euclidea.
Usando \(\lVert v \rVert_2^2 = v^T v\) ed espandendo:
$$\lVert Ax - b \rVert_2^2 = (Ax-b)^T(Ax-b) = (x^T A^T - b^T)(Ax - b) = x^T A^T A x - x^T A^T b - b^T A x + b^T b$$
I due termini centrali sono scalari, e uno è la trasposta dell'altro: \(x^T A^T b = (b^T A x)^T = b^T A x\). Si sommano quindi in un unico termine:
$$= x^T A^T A x - 2\, b^T A x + b^T b$$
Ora prendiamo il gradiente rispetto a \(x\), sfruttando la linearità e riconoscendo in ciascun addendo una delle forme derivate al punto 3 — il primo è una forma quadratica nella matrice \(A^T A\) (che è simmetrica), il secondo è una forma lineare nel vettore \(A^T b\), il terzo è costante in \(x\):
$$\nabla_x\big(x^T A^T A x - 2 b^T A x + b^T b\big) = \underbrace{\nabla_x\, x^T (A^TA) x}_{= \,2A^TAx} \ -\ \underbrace{2\,\nabla_x\, (A^Tb)^T x}_{=\, 2A^Tb} \ +\ \underbrace{\nabla_x\, b^Tb}_{=\,0} = 2A^T A x - 2A^T b$$
Ponendo il gradiente uguale a zero:
$$2A^T A x - 2A^T b = 0 \quad \Rightarrow \quad A^T A x = A^T b \quad \Rightarrow \quad x = (A^T A)^{-1}A^T b$$
L'inversa esiste perché \(A\) ha pieno rango, e quindi \(A^T A\) è definita positiva per la proposizione sulla matrice di Gram vista nella seconda parte. Essendo \(A^T A\) definita positiva, l'hessiana \(2A^TA\) lo è pure e il punto critico trovato è effettivamente un minimo. \(\blacksquare\)
L'equazione intermedia \(A^T A x = A^T b\) è quella che si chiama sistema delle equazioni normali, ed è la forma in cui il problema viene effettivamente risolto in pratica — senza mai invertire esplicitamente \(A^T A\).
5. Gradiente del determinante
Un caso meno frequente ma istruttivo, perché mostra come le proprietà algebriche viste nella seconda parte si traducano direttamente in formule di derivazione. Cominciamo con una riscrittura dell'identità che lega inversa e aggiunta.
Dalla seconda parte sappiamo che \(A^{-1} = \frac{\mathrm{adj}(A)}{|A|}\). Moltiplicando ambo i membri per lo scalare \(|A|\) si ottiene immediatamente la tesi. \(\blacksquare\)
Dalla definizione di determinante per sviluppo di Laplace, scelta una colonna \(j\) qualsiasi e ricordando la definizione di complemento algebrico \(\Delta_{ij}\):
$$|A| = \sum_{i=1}^n A_{ij}\Delta_{ij}$$
La chiave è che il complemento algebrico \(\Delta_{kl}\) si ottiene cancellando la riga \(k\) e la colonna \(l\), quindi non contiene l'elemento \(A_{kl}\). Rispetto ad \(A_{kl}\), l'espressione è dunque lineare, e derivando resta il solo coefficiente:
$$\frac{\partial |A|}{\partial A_{kl}} = \Delta_{kl}$$
Il gradiente è quindi la matrice dei complementi algebrici, che è la trasposta dell'aggiunta classica (si ricordi l'inversione degli indici nella definizione di \(\mathrm{adj}\)):
$$\nabla_A |A| = \big(\mathrm{adj}(A)\big)^T \ \overset{\text{(lemma)}}{=}\ \big(|A|\, A^{-1}\big)^T = |A|\, A^{-T}$$
dove nell'ultimo passaggio si è portato fuori \(|A|\), essendo uno scalare. \(\blacksquare\)
Restringiamo il dominio alle matrici simmetriche definite positive, così che il determinante sia positivo e il logaritmo restituisca valori reali. Applicando la regola di derivazione delle funzioni composte:
$$\frac{\partial \log|A|}{\partial A_{ij}} = \frac{\partial \log|A|}{\partial |A|} \cdot \frac{\partial |A|}{\partial A_{ij}} = \frac{1}{|A|} \cdot \frac{\partial |A|}{\partial A_{ij}}$$
e quindi, in forma matriciale, usando il risultato precedente:
$$\nabla_A \log|A| = \frac{1}{|A|}\, \nabla_A |A| = \frac{1}{|A|}\,|A|\, A^{-T} = A^{-T} = A^{-1}$$
dove l'ultimo passaggio usa la simmetria di \(A\). \(\blacksquare\)
Il risultato è l'analogo multidimensionale di \(\frac{d}{dx}\log x = \frac{1}{x}\): il posto del reciproco è preso dall'inversa. Non è una curiosità isolata — \(\log|A|\) compare nella log-verosimiglianza di una distribuzione gaussiana multivariata, e questa derivata è ciò che serve per stimarne la matrice di covarianza.
6. Gli autovalori come soluzione di un problema di ottimizzazione
Chiudiamo la serie con un risultato che ricollega tutto. Nella seconda parte avevamo dimostrato, con un lungo conto sulle derivate parziali, che il massimo e il minimo di \(x^T A x\) sulla sfera unitaria sono autovalori di \(A\). Lo stesso fatto si ottiene ora in poche righe, usando il metodo dei moltiplicatori di Lagrange e le formule di derivazione appena ricavate.
Il metodo standard consiste nello scrivere la lagrangiana, una funzione che incorpora il vincolo di uguaglianza:
$$\mathbf{L}(x, \lambda) = x^T A x - \lambda\,(x^T x - 1)$$
dove \(\lambda\) è il moltiplicatore di Lagrange. Si dimostra che, affinché \(x^*\) sia una soluzione, il gradiente della lagrangiana deve annullarsi in \(x^*\) — condizione necessaria ma non sufficiente. Calcoliamolo usando le formule del punto 3, osservando che anche \(x^T x = x^T I x\) è una forma quadratica, con matrice \(I\):
$$\nabla_x \mathbf{L}(x, \lambda) = \nabla_x\big(x^T A x - \lambda\, x^T x\big) = 2Ax - 2\lambda x$$
Ponendo il gradiente uguale a zero:
$$2Ax - 2\lambda x = 0 \quad \Rightarrow \quad Ax - \lambda x = 0 \quad \Rightarrow \quad Ax = \lambda x$$
che è esattamente la definizione di autovettore. \(\blacksquare\)
Il moltiplicatore di Lagrange, introdotto come artificio tecnico per gestire il vincolo, si rivela essere l'autovalore. E il valore della funzione obiettivo nel punto ottimo è \(x^T A x = x^T \lambda x = \lambda \lVert x \rVert^2 = \lambda\), dato che \(\lVert x \rVert = 1\): il massimo cercato coincide con l'autovalore più grande, il minimo con il più piccolo. Ritroviamo, per una strada completamente diversa, il teorema di min-max della seconda parte.
Questa proposizione è, in pratica, l'analisi delle componenti principali. Cercare la direzione lungo cui un insieme di dati ha varianza massima significa massimizzare \(x^T \Sigma x\) sulla sfera unitaria, con \(\Sigma\) matrice di covarianza — che è simmetrica e semidefinita positiva, come tutte le matrici di Gram. La risposta è l'autovettore associato all'autovalore più grande, e le componenti successive sono gli autovettori seguenti in ordine decrescente.
Conclusione
Con questo si chiude la serie. Ripercorrendo il cammino: nella prima parte abbiamo costruito la struttura astratta — spazi vettoriali, basi, applicazioni lineari, prodotti scalari — e visto che una matrice è un'applicazione lineare scritta in coordinate. Nella seconda abbiamo studiato le matrici per conto loro, fino a decomporle in autovalori e valori singolari per capire in quali direzioni agiscono. In questa terza abbiamo aggiunto la derivazione, che è ciò che trasforma tutto l'apparato in un metodo di calcolo effettivo.
I tre risultati da portare a casa sono probabilmente \(\nabla_x b^T x = b\), \(\nabla_x x^T A x = 2Ax\) e la loro conseguenza, le equazioni normali \(A^T A x = A^T b\). Da lì passa la regressione lineare, e con qualche complicazione in più anche tutto il resto.
Commenti
Posta un commento