Loading [MathJax]/extensions/TeX/boldsymbol.js

Matrice Inversa per il Deep Learning

matrice inversa per il Deep Learning

Nel precedente lezione sull’algebra lineare abbiamo analizzato le operazioni fondamentali sulle matrici, come la somma e la moltiplicazione. Queste operazioni costituiscono un prerequisito essenziale per comprendere il concetto di matrice inversa.

In questa lezione introduciamo la matrice inversa e ne spieghiamo l’importanza. Utilizziamo il concetto di risoluzione delle equazioni lineari simultanee, che ci è familiare dai corsi di matematica delle scuole superiori, per motivare il suo utilizzo.

Affrontiamo la risoluzione di equazioni lineari simultanee in numerosi ambiti della scienza applicata. In fisica e in ingegneria, per esempio, simulare al computer i flussi di fluido comporta la risoluzione di tali equazioni. In finanza quantitativa, le impieghiamo per risolvere la PDE di Black-Scholes, necessaria per il pricing di alcune opzioni.

L’inversione della matrice ci fornisce una tecnica fondamentale per risolvere questi sistemi. Questa metodologia è alla base della statistica e del machine learning, derivando dalla stima dei minimi quadrati ordinari per la regressione lineare.

Equazioni lineari simultanee

Partiamo da un esempio motivante di un sistema di equazioni lineari simultanee:

\begin{eqnarray} x + 2y + 4z &=& 10 \\ 3x + y – 5z &=& -8 \\ 4x – 3y + 7z &=& 4 \end{eqnarray}

Cerchiamo i valori di x, y e z che soddisfano queste equazioni. Con sole tre equazioni, bastano semplici passaggi algebrici per ottenere la soluzione.

Quando aumentiamo notevolmente il numero di equazioni, però, diventa complesso scriverle in questa forma.

In alternativa, possiamo rappresentare tali sistemi in modo compatto con la notazione matriciale. Definiamo \boldsymbol{x} = [x, y, z]^T, \boldsymbol{b} = [10, -8, 4]^T e la matrice dei coefficienti A:

\boldsymbol{A} = \left[ \begin{array}{ccc} 1 & 2 & 4 \\ 3 & 1 & -5 \\ 4 & -3 & 7 \end{array} \right]

Possiamo scrivere il sistema nel modo seguente:

\left[ \begin{array}{ccc} 1 & 2 & 4 \\ 3 & 1 & -5 \\ 4 & -3 & 7 \end{array} \right] \left[ \begin{array}{c} x \\ y \\ z \end{array} \right] = \left[ \begin{array}{c} 10 \\ -8 \\ 4 \end{array} \right]

Oppure, in forma ancora più compatta:

\begin{eqnarray} \boldsymbol{A} \boldsymbol{x} = \boldsymbol{b} \end{eqnarray}

Usiamo il grassetto per indicare che stiamo trattando vettori e matrici, non semplici scalari.

Nel caso scalare A x = b con A \neq 0, possiamo risolvere per x dividendo entrambi i lati per A:

\begin{equation} x = \frac{b}{A} = \frac{1}{A} b = A^{-1} b \end{equation}

Da qui otteniamo x = A^{-1} b. Ci chiediamo quindi se possiamo risolvere \boldsymbol{A} \boldsymbol{x} = \boldsymbol{b} come \boldsymbol{x} = \boldsymbol{A}^{-1} \boldsymbol{b}.

Poiché non possiamo dividere per una matrice, ci basiamo sulla definizione dell’inversa \boldsymbol{A}^{-1}, chiamata matrice inversa di A. Per farlo, introduciamo alcuni strumenti matematici fondamentali.

Delta di Kronecker e matrici di identità

Il delta di Kronecker è una funzione matematica a due variabili i e j che assume i seguenti valori:

\begin{equation} \delta_{ij} = \begin{cases} 1, & \text{if } i=j,\\ 0, & \text{if } i\neq j. \end{cases} \end{equation}

In pratica, assegniamo il valore uno quando i = j e zero quando i ≠ j.

Costruiamo una matrice quadrata in cui ogni elemento in posizione i,j corrisponde al delta di Kronecker.

Scriviamo questa definizione in modo compatto come \boldsymbol{I}_n=[\delta_{ij}]_{n \times n}. La matrice assume la forma seguente:

\begin{equation} \boldsymbol{I}_n=\begin{bmatrix} \kern4pt 1 & 0 & 0 & \dots & 0 \kern4pt \\ \kern4pt 0 & 1 & 0 & \dots & 0 \kern4pt \\ \kern4pt 0 & 0 & 1 & \dots & 0 \kern4pt \\ \kern4pt \vdots & \vdots & \vdots & \ddots & \vdots \kern4pt \\ \kern4pt 0 & 0 & 0 & \dots & 1 \kern4pt \\ \end{bmatrix} \end{equation}

Questa struttura rende nulli tutti gli elementi tranne quelli sulla diagonale principale, pari a uno, dato che per essi i = j.

Chiamiamo questo tipo di matrice matrice identità di dimensione n. Possiede la proprietà fondamentale di lasciare invariata una matrice quadrata \boldsymbol{A} \in \mathbb{R}^{n \times n} quando la moltiplichiamo a sinistra o a destra:

\begin{equation} \boldsymbol{I}_n \boldsymbol{A} = \boldsymbol{A} \boldsymbol{I}_n = \boldsymbol{A} \end{equation}

Dimostriamo facilmente questo risultato utilizzando la definizione di moltiplicazione tra matrici trattata nella lezione precedente.

Matrice inversa

A questo punto definiamo la matrice inversa \boldsymbol{A}^{-1}. L’inversa di una matrice è quella che, moltiplicata per A da sinistra o da destra, restituisce la matrice identità:

\begin{equation} \boldsymbol{A}^{-1} \boldsymbol{A} = \boldsymbol{I}_n = \boldsymbol{A} \boldsymbol{A}^{-1} \end{equation}

Verifichiamo questo risultato con l’equivalente algebrico scalare:

\begin{equation} \frac{a}{a} = \frac{1}{a} a = a^{-1} a = 1 = a a^{-1} = a \frac{1}{a} = \frac{a}{a} \end{equation}

Da qui osserviamo che a^{-1} a = 1 = a a^{-1}. Possiamo interpretare 1 come una matrice 1×1 con valore unitario.

Risolvere l’equazione matriciale

Con queste definizioni, possiamo finalmente risolvere l’equazione \boldsymbol{A} \boldsymbol{x} = \boldsymbol{b}:

\begin{eqnarray} \boldsymbol{A} \boldsymbol{x} &=& \boldsymbol{b} \\ \boldsymbol{A}^{-1} \boldsymbol{A} \boldsymbol{x} &=& \boldsymbol{A}^{-1} \boldsymbol{b} \\ \boldsymbol{I}_n \boldsymbol{x} &=& \boldsymbol{A}^{-1} \boldsymbol{b} \\ \boldsymbol{x} &=& \boldsymbol{A}^{-1} \boldsymbol{b}\label{eqn-matrix-inverse} \end{eqnarray}

Moltiplichiamo entrambi i membri per l’inversa \boldsymbol{A}^{-1} e semplifichiamo grazie alla proprietà della matrice identità.

Poiché moltiplicare un vettore per \boldsymbol{I}_n non ne modifica il valore, otteniamo direttamente l’espressione per x in funzione di \boldsymbol{A}^{-1} e b.

Risolviamo quindi \boldsymbol{x} = \boldsymbol{A}^{-1} \boldsymbol{b} per il vettore incognito x, a condizione che esista un’inversa appropriata.

Tuttavia, dobbiamo ancora vedere come calcolare \boldsymbol{A}^{-1} e capire se ciò sia possibile.

Tratteremo questo tema nelle prossime lezioni, ma anticipiamo brevemente alcuni metodi per calcolare l’inversa di una matrice.

Algoritmi per l’inversione di matrice

Un metodo classico per ottenere la matrice inversa è l’eliminazione Gauss-Jordan (o eliminazione gaussiana). Tuttavia, per una matrice n \times n di grandi dimensioni, si rivela costosa e inefficiente.

Il tempo di calcolo cresce con la complessità \mathcal{O}(n^3), diventando critico quando dobbiamo eseguire inversioni frequenti.

Nella maggior parte dei casi applicativi, dalla finanza quantitativa al deep learning, preferiamo approssimare la soluzione x entro una tolleranza accettabile piuttosto che cercare il valore esatto.

Adottiamo quindi algoritmi meno onerosi dal punto di vista computazionale, che mantengono l’accuratezza necessaria per l’analisi.

Questi includono versioni ottimizzate dell’eliminazione di Gauss-Jordan per matrici strutturate oppure metodi iterativi che approssimano x con una precisione soddisfacente in un numero finito di passi.

La necessità di calcolare efficacemente x ha dato origine a un intero campo della matematica: l’Algebra Lineare Numerica.

In questo contesto, alcune fattorizzazioni di matrici ci aiutano a risolvere in modo efficiente l’equazione. Approfondiamo queste tecniche nelle prossime lezioni.

Conclusione

In sintesi, comprendere la matrice inversa è fondamentale per risolvere sistemi di equazioni lineari, sia in ambito teorico che applicato. Dalla finanza quantitativa al deep learning, passando per la simulazione numerica in fisica e ingegneria, i concetti di matrice inversa, matrice identità e algebra lineare sono strumenti chiave per modellare e analizzare problemi complessi.

Nelle prossime lezioni esploreremo i metodi computazionali più efficaci per calcolare l’inversa e introdurremo tecniche avanzate di fattorizzazione matriciale, essenziali per applicazioni reali di machine learning e data science nel trading quantitativo.