Algebra Lineare per il Deep Learning Parte I

Scalari, Vettori, Matrici e Tensori – Algebra Lineare per il Deep Learning (parte 1)

Sommario

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Se è la prima volta che atterri su DataTrading, BENVENUTO!

Lascia che mi presenti. Sono Gianluca, ingegnere, trekker e appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato DataTrading per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

DataTrading vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

TUTORIAL

Poiché il deep learning è un argomento importante per il machine learning applicato al trading pensiamo sia opportuno scrivere alcuni articoli che introduco i concetti matematici fondamentali – algebra lineare, calcolo e probabilità – che sono necessari per comprendere davvero il deep learning per il trading quantitativo.

Questo articolo è il primo di una serie di post sull’argomento Algebra lineare per il Deep Learning. Ha lo scopo di descrivere alcune delle idee e delle nozioni di base che si troveranno nei libri di testo e nei documenti di ricerca di deep learning più avanzati. Leggere questi documenti è assolutamente fondamentale per trovare i migliori metodi di trading quantitativo e come tale aiuta a capire questi approcci!

L’algebra lineare è un argomento fondamentale nella matematica ed è estremamente usata nelle scienze fisiche. Costituisce anche la spina dorsale di molti algoritmi di machine learning. E’ quindi fondamentale che il professionista di deep learning comprenda questi concetti fondamentali. E’ una branca della matematica continua, invece che discreta

Il matematico, il fisico, l’ingegnere e il quant hanno probabilmente familiarità con la matematica continua attraverso lo studio delle equazioni differenziali, che sono utilizzate per modellare molti fenomeni fisici e finanziari.

L’informatico, lo sviluppatore di software o il trader discrezionale retail, tuttavia, potrebbero aver studiato solamente i concetti matematici relativi alla teoria dei grafi o alla combinatoria, argomenti che fanno parte della matematica discreta. Quindi le notazioni di insiemi e funzioni presentate in questo articolo potrebbero essere inizialmente sconosciute.

Per questo motivo la discussione presentata in questa serie di articoli omette il consueto approccio “teorema e dimostrazione” di un libro di testo di matematica universitaria. Ci concentriamo invece su argomenti specifici ed importanti per i professionisti del deep learning di diversa estrazione.

Da notare che la descrizione dell’algebra lineare presentata in questa serie di articoli segue da vicino le notazioni trattati nei lavori di Goodfellow et al (2016) [3], Blyth e Robertson (2002) [1], e Strang (2016) [2].

Motivazione

La probabilità, il calcolo e l’algebra lineare sono i “linguaggi” in cui viene scritto il machine learning. Lo studio di questi argomenti fornisce una comprensione più profonda della meccanica algoritmica sottostante e consente lo sviluppo di nuovi algoritmi, che possono essere implementati in strategie di trading quantitativo più sofisticate.

Molti algoritmi di machine learning supervisionato e deep learning prevedono l’ottimizzazione di una funzione  obiettivo attraverso la modifica dei parametri del modello. A tale scopo è necessario conoscere come la funzione obiettivo cambia al variare dei parametri del modello.

Questo motiva immediatamente il calcolo, l’argomento elementare in matematica che descrive i cambiamenti di quantità rispetto a un altro. In particolare richiede il concetto di derivata parziale, che descrive come la funzione obiettivo viene alterata attraverso singole modifiche di ogni parametro.

Le derivate parziali sono spesso raggruppate insieme, in matrici, per consentire un calcolo più semplice. Anche i modelli di machine learning più elementari come la regressione lineare sono ottimizzati con queste tecniche di algebra lineare.

Un argomento chiave nell’algebra lineare è la notazione di vettore e  di matrice. Essere in grado di “leggere il linguaggio” dell’algebra lineare aprirà la capacità di comprendere libri di testo, articoli web e documenti di ricerca che contengono descrizioni di modelli più complesse. Questo non solo consente la riproduzione e la verifica dei modelli esistenti, ma consente estensioni e nuovi sviluppi che possono essere  successivamente implementati nelle strategie di trading.

L’algebra lineare fornisce i primi passi nella vettorizzazione, presentando un modo più  preciso per descrivere la parallelizzazione di determinate operazioni. Gli algoritmi scritti nella notazione standard “for-loop” possono essere riformulati come equazioni di matrici con notevoli guadagni in termini di efficienza computazionale.

Tali metodi sono utilizzati nelle principali librerie Python come NumPy, SciPy, Scikit-Learn, Pandas e Tensorflow. Le GPU sono state progettate per eseguire operazioni ottimizzate di algebra lineare. L’esplosiva crescita del deep learning può essere in parte attribuita alla natura ad elevato parallelismo degli algoritmi sottostanti l’hardware delle GPU.

Nonostante l’algebra lineare sia una branca della matematica continua, le entità descritte di seguito sono implementate in un ambiente computazionale discreto. Queste rappresentazioni discrete di entità di algebra lineare possono portare a problemi di overflow e underflow, che rappresentano i limiti della rappresentazione computazionale in modo efficace di numeri estremamente grandi e piccoli.

Un meccanismo per mitigare gli effetti della limitata rappresentazione numerica consiste nell’utilizzare le tecniche di decomposizione delle matrici. Tali tecniche consentono di rappresentare alcuni tipi di matrici con matrici più semplici e strutturate che hanno utili proprietà computazionali.

Le tecniche di decomposizione della matrice includono la decomposizione Lower Upper (LU), la decomposizione QR e la decomposizione Singular Value (SVD). Sono una componente intrinseca di alcuni algoritmi di machine learning, inclusi i minimi quadrati lineari e l’analisi dei componenti principali (PCA). La decomposizione di una matrice  è descritta in dettaglio in questa serie.

Non si può sottovalutare quanto sia fondamentale l’algebra lineare per il deep learning. Per coloro che mirano a implementare i modelli quantitativi più sofisticati basati su tecniche di deep learning, o cercano lavoro in aziende che lo sono, sarà necessario apprendere estremamente bene l’algebra lineare.

Il materiale di questa serie di articoli descrive il minimo indispensabile, ma per comprendere la frontiera della ricerca è necessario andare molto oltre. Nei riferimenti alla fine dell’articolo è disponibile un breve elenco delle risorse dove continuare a studiare l’algebra lineare.

Vettori e matrici

Le due entità matematiche  fondamentali dell’algebra lineare sono il vettore e la matrice. Sono esempi di un’entità più generale nota come tensore. I tensori possiedono un ordine (o rank), che determina il numero di dimensioni in un array necessarie per rappresentarlo.

Scalari

Gli scalari sono numeri singoli e sono un esempio di tensore di ordine 0. In matematica è necessario descrivere l’insieme di valori a cui appartiene uno scalare. La notazione \(x \in \mathbb{R}\) afferma che il valore scalare (minuscolo). x è un elemento (o un membro) dell’insieme dei numeri a valori reali, \(\mathbb{R}\).

Esistono vari insiemi di numeri di interesse all’interno del machine learning. \(\mathbb{N}\) rappresenta l’insieme degli interi positivi (\(1, 2, 3,\ldots\)). \(\mathbb{Z}\) rappresenta gli interi, che includono valori positivi, negativi e lo zero. \(\mathbb{Q}\) rappresenta l’insieme dei numeri razionali, cioè che possono essere espressi come una frazione di due interi.

Vettori

I vettori sono matrici ordinate di numeri singoli e sono un esempio di tensore del 1° ordine. I vettori sono membri di oggetti noti spazi vettoriali. Uno spazio vettoriale può essere considerato come l’intera raccolta di tutti i possibili vettori di una specifica lunghezza (o dimensione). Lo spazio vettoriale tridimensionale a valori reali, indicato da \(\mathbb{R}^3\) è spesso usato per rappresentare matematicamente la nostra nozione del mondo reale di spazio tridimensionale.

Più formalmente uno spazio vettoriale è un prodotto cartesiano n-dimensionale di un dataset con se stesso, insieme a definizioni appropriate su come aggiungere vettori e moltiplicarli per valori scalari. Se tutti gli scalari in un vettore sono a valori reali, allora la notazione \(\boldsymbol{x} \in \mathbb{R}^n\) afferma che il valore del vettore (in grassetto minuscolo) x è un membro dello spazio vettoriale  a n-dimensioni dei numeri reali, \(\mathbb{R}^n\).

A volte è necessario identificare in modo esplicito i componenti di un vettore. L’i-esimo elemento scalare di un vettore è scritto come \(x_i\). Da notare che è scritto in minuscolo e senza grassetto poiché l’elemento è uno scalare. Un vettore a n dimensioni può essere scritto esplicitamente usando la seguente notazione:

\(\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}\)

Dato che gli scalari esistono per rappresentare i valori, perché sono necessari i vettori? I vettori sono usati principalmente per rappresentare quantità fisiche che hanno sia una magnitudine (grandezza) che una direzione. Gli scalari sono in grado di rappresentare solo le grandezze.

Ad esempio scalari e vettori codificano la differenza tra la velocità di un’auto e la sua velocità direzionale. La velocità direzionale contiene non il valore scalare (la velocità) ma anche la direzione di marcia. Non è difficile immaginare molte più grandezze fisiche che possiedono caratteristiche simili come le forze gravitazionali ed elettromagnetiche o la velocità del vento.

Nel machine learning i vettori  sono usati per rappresentare insiemi di feature, con i loro singoli componenti che specificano l’importanza di una particolare feature. Tali feature potrebbero includere l’importanza relativa delle parole in un documento di testo, l’intensità di un insieme di pixel in un’immagine bidimensionale o i valori storici dei prezzi per una selezione di strumenti finanziari.

Matrici

Le matrici sono array rettangolari costituiti da numeri e sono un esempio di tensori del 2° ordine. Se m e n sono numeri interi positivi, cioè \(m,n \in \mathbb{N}\), allora la matrice \(m \times n\) contiene n*m numeri, con m righe e n colonne.

Se tutti gli scalari in una matrice sono a valori reali, allora una matrice è indicata con lettere maiuscole in grassetto, come \(\boldsymbol{A} \in \mathbb{R}^{m \times n}\). Cioè la matrice vive in spazio vettoriale di \(m \times n\) dimensioni di valori reali. Quindi le matrici sono in realtà vettori che vengono semplicemente scritti in modo simile a una tabella bidimensionale.

Le sue componenti sono identificati da due indici i e j. i rappresenta l’indice della riga della matrice, mentre j rappresenta l’indice della colonna della matrice. Ogni componente di A è identificato da \(a_{ij}\).

La matrice totale \(m \times n\) può essere scritta come:

\(\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}\)

Spesso è utile abbreviare la visualizzazione completa delle componenti della matrice con la seguente espressione:

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

Dove \(a_{ij}\) è indicato come l’\((i,j)\)-esimo elemento della matrice A. Il pedice \(m \times n\) può essere eliminato se la dimensione della matrice è chiara dal contesto.

Da notare che un vettore colonna è una mattrice di  dimensione \(m \times 1\), poiché ha m righe e 1 colonna. Salvo diversa indicazione, tutti i vettori saranno considerati vettori colonna.

Le matrici rappresentano un tipo di funzione nota come mappa lineare. Sulla base di regole che sono descritte negli articoli successivi, è possibile definire operazioni di moltiplicazione tra matrici o tra matrici e vettori. Tali operazioni sono estremamente importanti nelle scienze fisiche, nella finanza quantitativa, nell’informatica e nel machine learning.

Le matrici possono codificare operazioni geometriche come rotazione, riflessione e trasformazione. Pertanto, se una collezione di vettori rappresenta i vertici di un modello geometrico tridimensionale in un software CAD (Computer Aided Design), moltiplicando individualmente questi vettori con una predefinita matrice di  trasformazione produce nuovi vettori che rappresentano le posizioni dei vertici ruotati. Questa è la base della moderna computer grafica 3D.

Nel deep learning i pesi della rete neurale sono memorizzati come matrici, mentre gli input delle feature sono memorizzati come vettori. Formulare il problema in termini di algebra lineare consente una gestione compatta di questi calcoli. Descrivendo il problema in termini di tensori e utilizzando i  metodi dell’algebra lineare, è possibile ottenere l’addestramento in tempi rapidi  con l’hardware delle moderne GPU.

Tensori

Il tensore è un’entità più generale che racchiude lo scalare, il vettore e la matrice. A volte è necessario, sia nelle scienze fisiche che nel machine learning, utilizzare i tensori con ordine superiore a due.

In fisica teorica, e in particolare nella relatività generale, il tensore di curvatura di Riemann è un tensore di 4° ordine che descrive la curvatura locale dello spaziotempo. Nel machine learning, e in particolare nel deep learning, si può usare un tensore di 3° ordine per descrivere i valori di intensità a più canali (rosso, verde e blu) di un’immagine bidimensionale.

In questa serie di post i tensori sono identificati tramite la notazione sans-serif in grassetto, A. Per un tensore di 3° ordine gli elementi saranno dati da \(a_{ijk}\), mentre per un tensore di 4° ordine gli elementi saranno dati da \(a_{ijkl}\).

Prossimi passi

Nel prossimo articolo sono illustrate le operazioni di base della moltiplicazione matrice-vettore e matrice-matrice. Questo argomento è noto come algebra delle matrici.

Riferimenti

Torna su