Immaginate un ufficio in cui, ogni mattina, un dado decide chi resta a casa: mediamente metà dei dipendenti non si presenta, ma non sono mai gli stessi. All’inizio è un disastro. Poi succede qualcosa di interessante: nessuno può più permettersi di essere l’unico a sapere una cosa. Le competenze si diffondono, le procedure vengono scritte, chi c’è impara a coprire i buchi. Il gruppo diventa più fragile nel singolo giorno e più robusto nel lungo periodo. Il dropout, una delle tecniche più usate nell’addestramento delle reti neurali, funziona esattamente così: spegne a caso una parte dei neuroni a ogni passo, e proprio per questo insegna alla rete a non dipendere da nessuno di loro in particolare.
Segnale che svanisce o esplode, inizializzazione, batch normalization, dropout e gli ottimizzatori: il capitolo è nel libro.
L’idea è stata presentata nel 2012 da un gruppo dell’Università di Toronto guidato da Geoffrey Hinton, e formalizzata due anni dopo in un articolo diventato un riferimento standard. All’apparenza è controintuitiva: perché mai danneggiare deliberatamente la rete che stiamo cercando di addestrare? La risposta è che il danno è temporaneo e mirato, e serve a curare un male peggiore.
Spegnere neuroni a caso
Una rete neurale è fatta di strati di neuroni, ognuno dei quali calcola un numero e lo passa a quelli dello strato successivo. Il dropout aggiunge un passaggio: prima di ogni aggiornamento durante l’addestramento, ogni neurone di uno strato viene tenuto attivo con una certa probabilità — poniamo il 50% — e altrimenti azzerato. Un neurone azzerato non contribuisce al calcolo di quel passo, e non riceve nemmeno il segnale di correzione: per quell’istante, è come se non esistesse.
La maschera cambia a ogni passo di addestramento. Su un migliaio di aggiornamenti, ogni neurone viene spento e riacceso centinaia di volte, in combinazione sempre diversa con gli altri. La rete non lavora mai due volte con la stessa configurazione. È la differenza tra allenarsi sempre con la stessa squadra e allenarsi ogni giorno con formazioni rimescolate: nel secondo caso si impara a giocare con chiunque.
Un singolo passo di addestramento con dropout: due neuroni dello strato nascosto sono stati azzerati a caso (cerchi tratteggiati). Non ricevono input, non producono output, non vengono corretti. Al passo successivo la maschera cambia, e a essere spenti saranno altri.
Perché la casualità aiuta
Il nemico che il dropout combatte ha un nome: co-adattamento. Quando i neuroni sono sempre tutti presenti, tendono a organizzarsi in cordate. Un neurone impara a produrre un segnale sbagliato, sapendo che un secondo neurone lo correggerà sistematicamente. Insieme funzionano, ma nessuno dei due, da solo, calcola qualcosa di sensato. È una divisione del lavoro fragile: basta cambiare leggermente i dati e l’accordo salta.
Spegnendo i neuroni a caso, il dropout rende impossibili questi accordi impliciti. Nessun neurone può contare sul fatto che un altro sarà lì a compensarlo, perché quell’altro potrebbe essere assente. Ogni unità è costretta a produrre un segnale utile per conto proprio, in collaborazione con partner sempre diversi. Il risultato sono neuroni più autonomi e caratteristiche più solide, che non si appoggiano a coincidenze del particolare campione di training.
Il dropout non rende la rete più intelligente rendendola più potente, ma rendendola meno dipendente da qualsiasi sua singola parte.
C’è un secondo effetto, più sottile. Azzerare valori a caso equivale a iniettare rumore nel cuore della rete. Un modello che deve dare la risposta giusta nonostante il rumore impara a ignorare i dettagli fragili e a tenersi ai segnali robusti — lo stesso principio per cui una competenza appresa in condizioni un po’ avverse regge meglio di una imparata in laboratorio.
Una folla di reti in una sola
C’è un modo ancora più elegante di leggere il dropout. Ogni volta che spegniamo un sottoinsieme diverso di neuroni, stiamo di fatto addestrando una rete diversa: una versione «assottigliata» di quella completa. Con n neuroni soggetti a dropout, le possibili configurazioni sono 2 elevato a n, un numero astronomico. Durante l’addestramento ne visitiamo una piccola frazione, ma tutte condividono gli stessi pesi.
Alla fine, la rete completa si comporta come una media di questa moltitudine di sotto-reti. È l’idea che rende potenti le foreste casuali e gli ensemble in generale: molti modelli mediocri e diversi, messi insieme, sbagliano meno di un singolo modello ottimizzato, perché i loro errori individuali tendono a cancellarsi. Il dropout ottiene un effetto simile senza il costo di addestrare e conservare migliaia di reti separate: le tiene tutte sovrapposte nello stesso insieme di pesi, come tante trasparenze impilate.
Il trucco dell’inferenza
Resta un problema pratico. Durante l’addestramento metà dei neuroni è spenta, quindi ogni neurone dello strato successivo riceve, in media, metà del segnale. Ma al momento di usare la rete per fare previsioni vere — l’inferenza — vogliamo tutti i neuroni accesi, per sfruttare l’intera capacità. Se non facessimo nulla, ogni neurone riceverebbe improvvisamente il doppio del segnale rispetto a quello a cui è abituato, e i conti salterebbero.
La soluzione è una semplice normalizzazione. Nella versione oggi standard, chiamata inverted dropout, durante l’addestramento i valori dei neuroni sopravvissuti vengono divisi per la probabilità di sopravvivenza: se ne teniamo metà, i loro valori vengono moltiplicati per due. Così la somma attesa del segnale resta la stessa, e all’inferenza si può accendere tutto senza ritocchi. In pratica: si compensa in anticipo l’assenza dei colleghi, così quando tornano tutti al lavoro il carico è già bilanciato. È il motivo per cui, nei framework moderni, il dropout «sparisce» da solo quando si passa dalla modalità di addestramento a quella di valutazione.
Quanto, dove, quando
Il dropout ha un solo parametro davvero importante, la frazione di neuroni da spegnere, e sbagliarlo si paga. Troppo alto, e la rete non riceve segnale a sufficienza per imparare: cade nell’underfitting, l’errore opposto all’overfitting. Troppo basso, e l’effetto regolarizzante svanisce. Storicamente il valore di riferimento per gli strati completamente connessi è la metà; per gli strati di input si usano tassi più bassi, perché buttare via troppi dati grezzi è controproducente.
Non tutte le architetture ne beneficiano allo stesso modo. Negli strati convoluzionali, dove i neuroni condividono già i pesi e le caratteristiche sono spazialmente ridondanti, il dropout classico funziona meno bene, e si preferiscono varianti che spengono intere mappe. Dopo l’arrivo della batch normalization, che introduce un rumore regolarizzante proprio, in molte reti convoluzionali il dropout è stato ridimensionato o rimosso. Nei Transformer, invece, è tuttora presente in dosi contenute, applicato in punti precisi dell’architettura. La regola implicita è sempre la stessa: il dropout è una difesa contro l’overfitting, quindi ha senso quando i dati sono pochi rispetto alla capacità del modello, e diventa superfluo — a volte dannoso — quando i dati abbondano.
Perché ti riguarda
Il dropout è uno di quei casi in cui il machine learning trova, per necessità pratica, un principio che vale ben oltre le reti neurali. Un sistema che dipende da un singolo componente insostituibile è un sistema fragile, per quanto brillante sia quel componente. Rendere ogni parte un po’ ridondante, costringere le competenze a diffondersi, allenarsi con configurazioni sempre diverse: sono strategie di robustezza che riconosciamo nelle organizzazioni, nelle infrastrutture, nelle squadre.
La lezione tecnica è ancora più concreta. La prossima volta che un modello dà risultati sospettosamente perfetti sui dati di training e deludenti su quelli nuovi, il dropout è tra le prime difese da provare — non perché aggiunga potenza, ma perché toglie alla rete la scorciatoia più comoda: appoggiarsi sempre agli stessi neuroni, sperando che il mondo non cambi mai le carte in tavola. Il mondo, puntualmente, le cambia.

I commenti sono riservati agli iscritti.
Accedi per commentare