
Nel capitolo precedente abbiamo detto che una rete è fatta di nodi elementari e che, combinandone abbastanza, si può, almeno in linea di principio, rappresentare qualunque relazione fra input e output. Ma abbiamo lasciato la promessa a metà: che cosa fa, esattamente, uno di quei nodi? E come nascono le formule, quando li si mette insieme? Guardiamo dentro a un nodo.
Che cosa calcola un neurone. Un neurone artificiale è un piccolo modello matematico con quattro ingredienti:
- gli input — n numeri in ingresso, x₁, x₂, …, xₙ, che arrivano dai nodi dello strato precedente (o, per il primo strato, direttamente dai dati);
- le connessioni pesate — ciascun input viene moltiplicato per il proprio peso w₁, w₂, …, wₙ, e i prodotti si sommano. È la stessa somma pesata del capitolo 3, vista ora dall’interno di un singolo nodo;
- il bias — un termine w₀ che si aggiunge alla somma pesata, uno scostamento che sposta la soglia a cui il neurone si attiva, indipendentemente dagli input;
- la funzione di attivazione — una funzione f che prende la somma pesata più il bias e restituisce l’output y del neurone.
In una riga: si moltiplica ogni input per il suo peso, si somma tutto, si aggiunge il bias e si passa il risultato attraverso f. Tutto qui.
Le funzioni di attivazione. La scelta di f cambia il carattere del neurone. Tre esempi tipici:
- l’identità — l’output coincide con la somma pesata, senza alcuna trasformazione. Semplice, ma, come vedremo tra poco, con un difetto fatale;
- la logistica (o sigmoide) — schiaccia qualunque valore in un numero compreso fra 0 e 1, utile quando l’output va letto come una probabilità;
- la ReLU — lascia passare i valori positivi immutati e azzera quelli negativi. Nella sua variante GELU, che smussa lo spigolo netto attorno allo zero sostituendolo con una transizione morbida, è stata a lungo, ed è tuttora, una delle funzioni di attivazione più usate nelle reti profonde.

Come i neuroni combinati producono le formule. Prendiamo una piccola rete di esempio: due input, uno strato nascosto di tre neuroni, due neuroni di output (nell’esempio il bias è omesso, per non appesantire le formule). Ogni neurone nascosto calcola la propria somma pesata degli input; ogni neurone di output calcola la propria somma pesata degli output nascosti. Scritte per esteso, queste espressioni diventano rapidamente molto complesse, ed è per questo che si usa la notazione matriciale: gli output di uno strato si ottengono moltiplicando una matrice di pesi per il vettore degli input, e l’intera rete a due strati si scrive, in modo compattissimo, come Z = V × W × X.
E qui torna la funzione di attivazione, con un ruolo tutt’altro che decorativo. Se f è l’identità — cioè se non c’è alcuna non linearità — quel prodotto di matrici si può moltiplicare una volta per tutte e ridurre a un’unica matrice. In altre parole: una rete profonda con attivazione lineare collassa in un solo strato, e tutta la profondità di cui abbiamo parlato nel capitolo 6 svanisce. È la non linearità della funzione di attivazione a impedire questo collasso — è ciò che rende la profondità davvero significativa. Senza di essa, mille strati varrebbero quanto uno.
Ecco perché il neurone non è solo “somma pesata più bias”: quel piccolo pezzo non lineare in fondo è ciò che dà a una rete profonda la sua vera potenza. Nel prossimo capitolo vediamo come si trovano, tutti insieme, i milioni di pesi che abbiamo introdotto: la backpropagation.
