
Questo articolo sullo spazio latente è estratto da un video che ho realizzato per Data Masters.
Data Masters è un’AI Academy italiana che offre percorsi di formazione nei settori della Data Science, del Machine Learning e dell’Intelligenza Artificiale.
Se vuoi maggiori informazioni sui corsi e materiali divulgativi, puoi visitare il sito datamasters.it.
In questo ultimo capitolo della miniserie, ripartiamo dal filo conduttore dei video precedenti: lo spazio latente nelle reti neurali e il modo in cui le trasformazioni linearie non lineari ne determinano la forma. Dopo l'introduzione intuitiva, i richiami di algebra lineare e il legame tra matrici di trasformazione e pesi di rete, qui andiamo al cuore del tema: la non linearità e la profondità come motori della rappresentazione.
Fino a una trasformazione lineare, la rete può ruotare, allungare o comprimere lo spazio. È utile, ma limitato. La svolta arriva con le funzioni di attivazione non lineari: ogni neurone introduce una curvatura locale che deforma lo spazio latente, rendendo possibile modellare relazioni complesse nei dati.
In particolare, la non linearità permette di separare classi che in uno spazio lineare si sovrappongono, di evidenziare pattern nascosti e di costruire trasformazioni gerarchiche. Non a caso, anche il teorema di approssimazione universale sottolinea quanto la non linearità sia un requisito essenziale per approssimare una vasta classe di funzioni.
Riprendiamo l'idea di base: un input n-dimensionale passa attraverso un hidden layer di m neuroni, applicando una matrice di pesi m × n. Il risultato è un vettore m-dimensionale, quindi un cambio di dimensione che può aumentare o ridurre lo spazio. Ma questa operazione, da sola, è lineare.
Ora, se dopo la trasformazione lineare aggiungiamo una funzione di attivazione non lineare, lo spazio non si limita a ruotare o comprimersi: si piega, si curva, cambia forma. È proprio questa deformazione che rende lo spazio latente una rappresentazione più utile per il compito che la rete deve svolgere.
Nel video precedente ci siamo concentrati sul primo hidden layer. Qui allarghiamo lo sguardo alla rete nel suo insieme: ogni layer prende in input la rappresentazione trasformata dal precedente e la rielabora, spesso introducendo nuova non linearità.
Possiamo immaginare una gerarchia: i primi layer estraggono caratteristiche di base (per esempio, in un'immagine, bordi e contrasti), mentre i layer successivi combinano queste caratteristiche in strutture via via più astratte. L'ultimo hidden layer produce una rappresentazione latente finale, ottimizzata per il compito.
Questa è la forza delle reti neurali profonde: aumentano la capacità di astrazione e generalizzazione. Un singolo hidden layer può teoricamente bastare con molti neuroni, ma non è detto che generalizzi bene. La profondità, se progettata con criterio, costruisce una trasformazione più ricca. Attenzione però: crescere senza controllo può introdurre problemi come la scomparsa del gradiente. Quindi il messaggio non è aggiungere layer all'infinito, ma usare la profondità per migliorare la rappresentazione.
Per rendere tutto visivo, il video utilizza una demo del dipartimento di Computer Science di Stanford, basata su ConvNetJS. La simulazione mostra un toy problem di classificazione binaria in 2D: punti rossi per la classe 0 e punti verdi per la classe 1.
La rete, senza entrare nel dettaglio del codice, segue questo schema concettuale:
- input bidimensionale;
- layer fully connected con 6 neuroni;
- funzione di attivazione non lineare (tangente iperbolica);
- layer fully connected con 2 neuroni;
- seconda funzione di attivazione non lineare;
- layer Softmax a due classi.
In ConvNetJS la Softmax è implementata come layer, mentre in altre librerie è spesso una funzione di attivazione. Il punto chiave resta lo stesso: la rete trasforma lo spazio di input in uno spazio più separabile.
[>] https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html
ul piano di sinistra vediamo lo spazio di input e possiamo modificare i dati: click per aggiungere un punto rosso, Shift + click per aggiungere un punto verde, Ctrl + click per rimuovere un punto. A destra, invece, possiamo osservare la trasformazione dello spazio layer dopo layer.
Dopo il layer fully connected con 6 neuroni, lo spazio è a 6 dimensioni. Non potendo visualizzarlo direttamente, la demo mostra coppie di neuroni alla volta. Prima dell'attivazione, la trasformazione appare lineare. Dopo la tangente iperbolica, la non linearità curva lo spazio in modo evidente.
Questo spazio trasformato diventa l'input del layer successivo. Già prima della seconda non linearità, i punti delle due classi risultano quasi separati; dopo l'attivazione la separazione è ancora più netta. Infine, la Softmax completa la classificazione. È un esempio semplice ma efficace di come una rete neurale possa creare uno spazio latente più adatto al compito.
Lo spazio latente nelle reti neurali, dunquem emerge dalla combinazione di trasformazioni lineari e non lineari. Le funzioni di attivazione deformano lo spazio, mentre la profondità costruisce una gerarchia di rappresentazioni sempre più astratte. Il risultato è una trasformazione che rende i dati più separabili e, quindi, più facili da classificare o interpretare.
Con questo esempio pratico si chiude la miniserie, mostrando in modo concreto come una rete neurale trasformi lo spazio di input in una rappresentazione utile e adatta al compito che deve svolgere.