“Una catena di votanti: ognuno pesa gli indizi, poi passa avanti la sua stima.”
Un neurone, una decisione
L'unità atomica è il neurone. Prende qualche numero in ingresso, moltiplica ciascuno per un peso, aggiunge una costante (il bias) e comprime il risultato attraverso una funzione non lineare. In uscita: un numero. Tutto qui. Non succede nulla di biologico.
Se vedi gli input come indizi e i pesi come l'importanza data a ciascun indizio, un neurone è una minuscola cabina elettorale. «Questa foto mostra dei baffi? un orecchio a punta? del pelo? Sì, sì, sì. In uscita: punteggio alto per gatto.»
Perché gli strati, e perché «profonda»
Un solo strato di neuroni può imparare solo distinzioni lineari: «questo punto è sopra o sotto la linea?» Impila due strati e puoi imparare le curve. Impilane dieci e puoi imparare qualunque cosa, con abbastanza dati. Questo è, formalmente, il «teorema di approssimazione universale».
Il trucco interessante è cosa succede dentro le reti profonde: ogni strato impara una caratteristica leggermente più astratta di quella sotto. Nelle reti per la visione, il primo strato rileva i bordi, il secondo gli angoli e le texture, il quinto gli occhi e le ruote, il decimo i volti e le auto. Nessuno ha programmato questa gerarchia. Emerge dall'obiettivo di addestramento.
La compressione non lineare
Tra ogni coppia di strati c'è una piccola funzione non lineare applicata a ogni uscita. Le più comuni: ReLU («se negativo, output zero; altrimenti, conservalo»), GELU, sigmoide, tanh. Senza di essa, impilare strati non serve a nulla: tutta la rete collasserebbe matematicamente in un singolo strato.
La non linearità è l'intera ragione per cui le reti profonde possono modellare curve, forme e decisioni che un singolo strato non può. È un piccolo dettaglio che svolge un enorme lavoro strutturale.
Come una rete calcola davvero
In pratica, non si calcola mai un neurone alla volta. Un intero strato è una grande moltiplicazione tra matrici: vettore di input per matrice di pesi, più vettore di bias, applicazione della non linearità, vettore di output. Lo strato successivo prende quell'output e fa lo stesso. Tutta la rete è solo una catena di moltiplicazioni tra matrici intervallate da non linearità.
Ecco perché le GPU contano così tanto. Le GPU sono state costruite per la grafica, e la grafica è moltiplicazioni tra matrici. Si sono rivelate l'hardware perfetto per qualcosa per cui nessuno le aveva progettate. Tutto il boom dell'IA si regge su questa fortunata coincidenza.
# forward pass, two layers, in 5 lines
h1 = relu(x @ W1 + b1) # input -> hidden
y = h1 @ W2 + b2 # hidden -> output
# x: input vector
# W1, W2: weight matrices
# b1, b2: bias vectors
# relu: max(0, ...) applied elementwise
La retropropagazione, in un paragrafo
Addestrare una rete significa regolare ogni matrice di pesi e ogni vettore di bias perché la loss diminuisca. Per sapere in che direzione ritoccarli, serve il gradiente della loss rispetto a ogni parametro. Calcolarlo in modo ingenuo è impossibile: possono esserci centinaia di miliardi di parametri. La retropropagazione è il trucco che li calcola tutti in un'unica passata all'indietro, applicando la regola della catena strato per strato. Gira più o meno nello stesso tempo della passata in avanti.
La retropropagazione è stata la chiave che ha reso pratiche le reti profonde. La matematica è la stessa dal 1986; il motivo per cui la usiamo oggi e non nel 1986 è che le GPU ci permettono di eseguirla su reti un milione di volte più grandi.
Aspetta: dov'è la parte sul linguaggio?
Tutto ciò che precede è generico. Una rete neurale per le foto di gatti e una rete per il testo a questo livello si somigliano: moltiplicazioni tra matrici e non linearità. Ciò che rende una brava con le immagini e l'altra brava con il linguaggio è (a) cosa le dai in ingresso e (b) come sono cablati gli strati. Incontriamo il cablaggio specifico del linguaggio, embedding e attention, nei capitoli 4 e 5.
Una riga per ciascuno
- Un neurone è una somma pesata seguita da una compressione non lineare. È tutto l'atomo.
- Gli strati impilano neuroni; la profondità permette alla rete di imparare una gerarchia di astrazione senza che glielo si chieda.
- Tutto il calcolo è moltiplicazioni tra matrici intervallate da non linearità. Ecco perché hanno trionfato le GPU.
- La retropropagazione è il modo di calcolare in modo efficiente i gradienti su centinaia di miliardi di parametri.
Dove andare ora