Algebra Lineare per il Deep Learning

Algebra Lineare per il Deep Learning Parte I

Poiché il deep learning rappresenta un elemento chiave del machine learning applicato al trading, riteniamo utile proporre una serie di lezioni introduttive sui concetti matematici fondamentali – algebra lineare, calcolo e probabilità – necessari per comprendere davvero il deep learning per il trading quantitativo.

Questa lezione introduce i concetti dell’Algebra lineare per il Deep Learning. Presentiamo alcune idee e nozioni di base presenti nei libri di testo e nei paper di ricerca avanzata. Studiare questi documenti è assolutamente fondamentale per individuare i migliori metodi di trading quantitativo e comprenderli a fondo.

L’Algebra Lineare

L’algebra lineare rappresenta una componente essenziale della matematica ed è ampiamente applicata nelle scienze fisiche. Costituisce inoltre la base di numerosi algoritmi di machine learning. Per questo motivo, approfondiamo questi concetti per consolidare la nostra preparazione nel deep learning. Si tratta di una branca della matematica continua, in contrapposizione a quella discreta.

Come matematici, fisici, ingegneri o quant, abbiamo spesso familiarità con la matematica continua grazie allo studio delle equazioni differenziali, strumenti cruciali per modellare fenomeni fisici e finanziari.

Invece, come informatici, sviluppatori software o trader discrezionali retail, potremmo aver affrontato solo argomenti come la teoria dei grafi o la combinatoria, tipici della matematica discreta. Di conseguenza, le notazioni su insiemi e funzioni che presentiamo in questa lezione potrebbero risultare inizialmente nuove.

Per rendere i contenuti accessibili a un pubblico eterogeneo, abbandoniamo il classico approccio “teorema e dimostrazione” dei testi universitari e ci focalizziamo su concetti essenziali e rilevanti per i professionisti del deep learning.

Segnaliamo che le notazioni di algebra lineare adottate in questa serie seguono fedelmente i riferimenti di Goodfellow et al. (2016) [3], Blyth e Robertson (2002) [1], e Strang (2016) [2].

Motivazione

Probabilità, calcolo e algebra lineare costituiscono i “linguaggi” fondamentali del machine learning. Approfondire questi temi ci permette di comprendere meglio il funzionamento degli algoritmi e sviluppare nuove soluzioni implementabili nelle strategie di trading quantitativo più avanzate.

Molti algoritmi di machine learning supervisionato e di deep learning richiedono l’ottimizzazione di una funzione obiettivo modificando i parametri del modello. Per farlo, dobbiamo capire come varia la funzione rispetto a tali parametri.

Questo ci porta immediatamente al calcolo, branca della matematica che analizza i cambiamenti tra quantità. In particolare, introduciamo il concetto di derivata parziale, che descrive come la funzione obiettivo cambia al variare di ogni singolo parametro.

Raggruppiamo spesso le derivate parziali in matrici, semplificando i calcoli. Anche modelli base come la regressione lineare utilizzano queste tecniche di algebra lineare per l’ottimizzazione.

Uno degli elementi centrali dell’algebra lineare è la notazione di vettori e matrici. Imparare a “leggere” il linguaggio dell’algebra lineare ci consente di comprendere testi, articoli e paper che descrivono modelli complessi. Possiamo così replicare, validare, estendere e innovare i modelli da implementare nelle strategie di trading.

L’algebra lineare introduce il concetto di vettorizzazione, che migliora la descrizione delle operazioni parallele. Riformuliamo i classici algoritmi in notazione “for-loop” come equazioni matriciali, ottenendo grandi vantaggi in efficienza computazionale.

Le principali librerie Python come NumPy, SciPy, Scikit-Learn, Pandas e TensorFlow impiegano questi metodi. Le GPU sono progettate per eseguire operazioni ottimizzate di algebra lineare, contribuendo alla rapida espansione del deep learning grazie alla natura fortemente parallela degli algoritmi.

Anche se l’algebra lineare appartiene alla matematica continua, implementiamo le entità in ambienti computazionali discreti. Questa discrepanza può causare problemi di overflow e underflow, ovvero limiti nella rappresentazione di numeri molto grandi o piccoli.

Decomposizione delle matrici

Per ridurre questi problemi, adottiamo tecniche di decomposizione delle matrici. Questi metodi permettono di rappresentare alcune matrici complesse tramite altre più semplici e computazionalmente vantaggiose.

Tra le tecniche di decomposizione più comuni troviamo la LU decomposition, la decomposizione QR e la SVD (Singular Value Decomposition). Le utilizziamo in algoritmi come i minimi quadrati lineari e l’analisi dei componenti principali (PCA). Spieghiamo in dettaglio questi metodi nel corso della serie.

Ribadiamo quanto sia cruciale l’algebra lineare per il deep learning. Chi desidera implementare modelli quantitativi sofisticati o entrare in aziende all’avanguardia dovrà padroneggiare a fondo questi concetti.

Descriviamo i concetti indispensabili, ma per avvicinarsi alla frontiera della ricerca bisogna andare molto oltre. Alla fine della lezione forniamo una selezione di risorse per continuare a studiare l’algebra lineare.

Vettori e matrici

Nella lezione di oggi esploriamo le due entità matematiche fondamentali dell’algebra lineare: il vettore e la matrice. Questi rappresentano casi specifici di un’entità più generale chiamata tensore. Ogni tensore possiede un ordine (o rank), che indica il numero di dimensioni dell’array necessario per rappresentarlo.

Scalari

Gli scalari sono numeri singoli e costituiscono un esempio di tensore di ordine 0. In matematica specifichiamo sempre l’insieme di valori cui appartiene uno scalare. La notazione \(x \in \mathbb{R}\) indica che lo scalare x appartiene all’insieme dei numeri reali, \(\mathbb{R}\).

Nel machine learning utilizziamo diversi insiemi numerici. \(\mathbb{N}\) rappresenta gli interi positivi (\(1, 2, 3,\ldots\)); \(\mathbb{Z}\) include tutti gli interi, positivi, negativi e lo zero; infine \(\mathbb{Q}\) rappresenta i numeri razionali, cioè quelli esprimibili come frazione tra due interi.

Vettori

I vettori sono matrici ordinate di numeri singoli e rappresentano un esempio di tensore di 1° ordine. I vettori appartengono agli spazi vettoriali. Consideriamo uno spazio vettoriale come l’insieme completo di tutti i possibili vettori di una determinata lunghezza (o dimensione). Ad esempio, usiamo \(\mathbb{R}^3\) per rappresentare lo spazio tridimensionale della nostra esperienza nel mondo reale.

Descriviamo più formalmente uno spazio vettoriale come un prodotto cartesiano n-dimensionale di un dataset con sé stesso, e specifichiamo come sommare i vettori o moltiplicarli per scalari. Se tutti gli elementi di un vettore sono numeri reali, allora scriviamo \(\boldsymbol{x} \in \mathbb{R}^n\), per indicare che il vettore x (in grassetto) appartiene allo spazio n-dimensionale dei numeri reali, \(\mathbb{R}^n\).

Quando vogliamo indicare i componenti di un vettore, usiamo \(x_i\) per riferirci all’i-esimo elemento. Poiché si tratta di uno scalare, lo scriviamo in minuscolo e senza grassetto. Un vettore n-dimensionale può essere espresso come segue:

\(\begin{equation}\boldsymbol{x}=\begin{bmatrix}
\kern4pt x_1 \kern4pt \\
\kern4pt x_2 \kern4pt \\
\kern4pt \vdots \kern4pt \\
\kern4pt x_n \kern4pt
\end{bmatrix}\end{equation}\)

Ma perché usiamo i vettori se abbiamo già gli scalari? Utilizziamo i vettori per rappresentare quantità fisiche che possiedono sia una magnitudine (grandezza) sia una direzione, mentre gli scalari rappresentano solo la grandezza.

Ad esempio, possiamo distinguere tra la velocità (scalare) e la velocità direzionale (vettore) di un’auto. La seconda comprende anche l’informazione sulla direzione. Molte altre grandezze fisiche condividono questa caratteristica, come le forze gravitazionali ed elettromagnetiche o la velocità del vento.

Nel machine learning rappresentiamo insiemi di feature con vettori, dove ogni componente indica l’importanza relativa di una specifica feature. Possiamo usare i vettori per esprimere il peso delle parole in un testo, l’intensità dei pixel in un’immagine o i prezzi storici di strumenti finanziari.

Matrici

Le matrici sono array rettangolari di numeri, esempi di tensori di 2° ordine. Se m e n sono numeri interi positivi, cioè \(m,n \in \mathbb{N}\), allora una matrice \(m \times n\) contiene n*m numeri, distribuiti in m righe e n colonne.

Quando tutti gli elementi di una matrice sono numeri reali, utilizziamo lettere maiuscole in grassetto per rappresentarla, come \(\boldsymbol{A} \in \mathbb{R}^{m \times n}\). Questa notazione indica che la matrice vive nello spazio vettoriale \(m \times n\) di numeri reali. In realtà consideriamo le matrici come vettori scritti in forma tabellare bidimensionale.

Per identificare i componenti della matrice usiamo due indici, i per le righe e j per le colonne. Rappresentiamo ciascun elemento come \(a_{ij}\).

Scriviamo l’intera matrice \(m \times n\) come segue:

\(\begin{equation}\boldsymbol{A}=\begin{bmatrix}
\kern4pt a_{11} & a_{12} & a_{13} & \ldots & a_{1n} \kern4pt \\
\kern4pt a_{21} & a_{22} & a_{23} & \ldots & a_{2n} \kern4pt \\
\kern4pt a_{31} & a_{32} & a_{33} & \ldots & a_{3n} \kern4pt \\
\kern4pt \vdots & \vdots & \vdots & \ddots & \vdots \kern4pt \\
\kern4pt a_{m1} & a_{m2} & a_{m3} & \ldots & a_{mn} \kern4pt \\
\end{bmatrix}\end{equation}\)

Possiamo anche abbreviare la scrittura completa delle componenti con:

\(\begin{equation}\boldsymbol{A} = [a_{ij}]_{m \times n}\end{equation}\)

In questo caso, \(a_{ij}\) rappresenta l’elemento in posizione \((i,j)\) della matrice A. Quando il contesto chiarisce la dimensione, possiamo omettere il pedice \(m \times n\).

Un vettore colonna è una matrice con dimensione \(m \times 1\), cioè m righe e 1 colonna. Salvo indicazioni diverse, consideriamo tutti i vettori come vettori colonna.

Matrice di trasformazione

Le matrici rappresentano un tipo di funzione chiamata mappa lineare. Seguendo regole che esploreremo nelle lezioni successive, possiamo definire prodotti tra matrici o tra matrici e vettori. Queste operazioni risultano fondamentali nelle scienze fisiche, nella finanza quantitativa, nell’informatica e nel machine learning.

Le matrici permettono di codificare trasformazioni geometriche come rotazioni, riflessioni e cambi di scala. Se vogliamo rappresentare un oggetto tridimensionale in un software CAD (Computer Aided Design), possiamo moltiplicare i vettori che rappresentano i suoi vertici con una matrice di trasformazione per ottenere nuove posizioni ruotate. Questo meccanismo è alla base della grafica 3D moderna.

Nel deep learning salviamo i pesi delle reti neurali sotto forma di matrici e rappresentiamo gli input come vettori di feature. Descrivendo il problema in termini di tensori e utilizzando le regole dell’algebra lineare, gestiamo i calcoli in modo compatto ed efficiente con le moderne GPU.

Tensori

Consideriamo il tensore come un’estensione generale dello scalare, del vettore e della matrice. In vari ambiti, dalle scienze fisiche al machine learning, utilizziamo tensori di ordine superiore a due.

In fisica teorica, e in particolare nella relatività generale, il tensore di curvatura di Riemann (ordine 4) descrive la curvatura locale dello spaziotempo. Nel deep learning possiamo utilizzare un tensore di 3° ordine per rappresentare i valori di intensità RGB di un’immagine.

In questa lezione adottiamo la notazione sans-serif in grassetto, come A, per rappresentare i tensori. Gli elementi di un tensore di 3° ordine si indicano con \(a_{ijk}\), mentre quelli di un tensore di 4° ordine con \(a_{ijkl}\).

Conclusione

Dopo aver introdotto i concetti base dell’algebra lineare, nella prossima lezione sono illustrate le operazioni di base della moltiplicazione matrice-vettore e matrice-matrice. Questo argomento è noto come algebra delle matrici.

Riferimenti

Torna in alto