Vai al contenuto
Capitolo 03 · 11 min

Dentro una rete neurale

Apriamo la scatola. Una rete neurale non è un cervello. È una pila di moltiplicazioni tra matrici con una compressione non lineare tra uno strato e l'altro. Una volta che la vedi così, la magia diventa molto meno misteriosa.

A chain of votersThree rows of small circular nodes. Each row passes its vote to the next via thin lines, forming a forward chain. Some connections are highlighted in accent color to suggest weighted importance.LAYER 1LAYER 2LAYER 3 → GUESS

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.»

A single neuronThree inputs x1, x2, x3 each travel along a weighted line to a summing node, where a bias is added, then pass through a non-linear activation function and emerge as one output y.x₁×w₁x₂×w₂x₃×w₃Σ+biasσACTIVATIONy
Gli input arrivano lungo fili pesati a una somma con bias, poi passano attraverso un'attivazione non lineare. Un solo numero in uscita.

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.

Layer hierarchy of a deep networkFour columns of vertically stacked neurons. From left to right, the labels describe what each layer tends to learn: edges and textures, then patterns, then object parts, then whole objects.edges & texturesLAYER 1patternsLAYER 2parts (eye, wheel)LAYER 3objects (face, car)LAYER 4ABSTRACTION INCREASES →
Nessuno dice alla rete di costruire una gerarchia. Emerge perché è il modo più compresso di prevedere la risposta.

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.
Dentro una rete neurale · Corsi di IA · SDEN