ResNet, il paper che ha insegnato alle reti profonde a non fare nulla

Nel 2015 quattro ricercatori di Microsoft Research notarono un paradosso: le reti più profonde imparavano peggio anche sui dati di addestramento. La loro soluzione, il blocco residuale, è oggi dentro ogni architettura che conta, Transformer compresi.

Nel 2015 c’era una convinzione diffusa e ragionevole: reti più profonde imparano di più. Più strati, più capacità di catturare motivi complessi. Quattro ricercatori di Microsoft Research — Kaiming He, Xiangyu Zhang, Shaoqing Ren e Jian Sun — fecero un esperimento semplice per verificarla e si trovarono davanti a un paradosso. Presero una rete di 20 strati e una di 56, entrambe della stessa famiglia, e le addestrarono sullo stesso problema. La rete più profonda sbagliava di più. E non solo sui dati nuovi: sbagliava di più anche sui dati di addestramento, quelli che aveva davanti agli occhi. Qualcosa non tornava, e capire cosa portò a una delle idee più riutilizzate di tutto il deep learning.

Da LeNet-5 ad AlexNet, VGG e ResNet: le architetture che hanno fatto la storia sono ricostruite nel libro.

Leggi «Le architetture che hanno fatto la storia» nel libro →

Non è overfitting, è peggio

La prima spiegazione che viene in mente è l’overfitting: la rete grande impara i dati a memoria e va male sul resto. Ma l’overfitting ha una firma precisa — l’errore di addestramento scende, quello sui dati nuovi sale. Qui succedeva l’opposto: saliva anche l’errore di addestramento. La rete profonda non riusciva nemmeno a memorizzare bene i dati che aveva. Gli autori chiamarono questo fenomeno degradazione, e lo distinsero con cura dall’overfitting perché è un problema di natura diversa: non di generalizzazione, ma di ottimizzazione. La rete profonda aveva tutta la capacità necessaria, ma la discesa del gradiente non riusciva a trovare i pesi giusti.

C’è un argomento logico che rende il paradosso ancora più fastidioso. Prendiamo la rete a 20 strati che funziona. Costruiamone una a 56 strati identica nei primi 20, e con gli ultimi 36 che si limitano a copiare l’input all’uscita senza toccarlo — la cosiddetta funzione identità. Questa rete a 56 strati, per costruzione, dovrebbe dare esattamente lo stesso risultato di quella a 20. Non dovrebbe mai fare peggio. Se in pratica fa peggio, significa che gli strati in più non riescono nemmeno a imparare la cosa più banale del mondo: stare fermi e passare avanti l’input così com’è.

L’idea: imparare la correzione, non il tutto

Da questa osservazione nasce la mossa del paper. Se il problema è che gli strati faticano a rappresentare l’identità — a «non fare nulla» — allora rendiamo il non fare nulla la loro condizione di partenza, quella più facile da raggiungere. Invece di chiedere a un blocco di strati di produrre direttamente l’uscita desiderata, chiamiamola H(x), gli chiediamo di produrre solo la differenza rispetto all’ingresso: F(x) = H(x) − x. L’uscita del blocco diventa allora F(x) + x, dove quel + x è una scorciatoia — una skip connection — che salta gli strati e riporta l’ingresso direttamente all’uscita.

Il vantaggio è sottile ma decisivo. Se per un certo blocco la cosa migliore è non toccare l’input, ora gli basta imparare F(x) = 0 — azzerare i propri pesi — e la scorciatoia farà passare l’input intatto. Portare a zero un mucchio di pesi è facilissimo per la discesa del gradiente; imparare a copiare esattamente l’input attraverso una catena di trasformazioni non lineari, molto meno. È come la differenza tra correggere un testo con le revisioni — dove «nessuna modifica» è semplicemente non scrivere nulla — e ricopiare a mano l’intero paragrafo sperando di non introdurre errori. Il blocco residuale rende il «nessun cambiamento» l’opzione predefinita, e lascia che gli strati aggiungano qualcosa solo quando serve davvero.

Il blocco residuale x strato + ReLU strato F(x) identità: x (la scorciatoia) + uscita = F(x) + x Se F(x) = 0 il blocco lascia passare l’input intatto: uscita = x azzerare i pesi è facile, copiare l’input no.

Il blocco residuale: l’ingresso x attraversa due strati che calcolano una correzione F(x), mentre una scorciatoia lo riporta intatto al nodo di somma. L’uscita è F(x) + x. Se al blocco conviene non fare nulla, gli basta portare F(x) a zero: la scorciatoia fa il resto.

Perché funziona: un’autostrada per il gradiente

C’è un secondo motivo per cui le scorciatoie aiutano, e riguarda l’addestramento delle reti molto profonde. Durante la retropropagazione, il segnale d’errore deve tornare indietro dall’uscita fino ai primi strati, attraversando ogni trasformazione. In una rete profonda «liscia» questo segnale tende ad affievolirsi strato dopo strato — il famigerato problema del gradiente che svanisce — finché i primi strati quasi non ricevono più indicazioni su come correggersi. Le skip connection offrono al gradiente una corsia preferenziale: una via diretta per tornare indietro senza attenuarsi a ogni passaggio. È come aggiungere delle scale antincendio a un grattacielo — il messaggio può scendere velocemente invece di fermarsi a ogni piano.

Il risultato è che diventa possibile addestrare reti di una profondità prima impensabile. Il paper presenta una versione a 152 strati — otto volte più profonda delle architetture di visione più grandi dell’anno precedente — e, come dimostrazione estrema, gli autori addestrano su un problema più piccolo una rete di oltre mille strati. Non perché serva, ma per far vedere che la degradazione, con i blocchi residuali, semplicemente non si presenta più.

Il risultato e l’eredità

Con questa architettura, chiamata ResNet (da residual network), il gruppo di Microsoft vinse la competizione di riconoscimento immagini ImageNet del 2015, con un errore top-5 del 3,57% ottenuto da un ensemble di reti — un livello che pochi anni prima sarebbe sembrato irraggiungibile. Ma il lascito più importante non è il record su una gara. È il fatto che la skip connection si è rivelata un’idea che vale ovunque, non solo nella visione.

La connessione residuale è forse il mattone più riutilizzato del deep learning: se apri un Transformer, la trovi attorno a ogni singolo sotto-strato.

Ogni grande modello linguistico che usi oggi è costruito impilando decine di blocchi di attenzione, e ciascuno di quei blocchi è avvolto esattamente nella stessa scorciatoia inventata per ResNet: l’output di ogni componente viene sommato al suo input, non sostituito. Senza quella somma, impilare quaranta o ottanta strati di attenzione sarebbe altrettanto impraticabile quanto lo era impilare cinquantasei strati convoluzionali nel 2015. L’idea nata per classificare immagini è diventata la precondizione per costruire modelli profondi di qualsiasi tipo.

Perché ti riguarda

Se progetti o addestri reti, il blocco residuale è probabilmente già dentro tutto ciò che tocchi, e vale la pena sapere cosa fa quella innocua somma: rende profonde le reti senza pagarne il prezzo in instabilità. Ma anche se l’AI la osservi da fuori, ResNet insegna qualcosa sul modo in cui progrediscono le idee tecniche. La svolta non fu costruire qualcosa di più complicato — fu il contrario: rendere banale un’opzione che prima era difficile, il «non fare nulla». A volte l’intuizione che sblocca un intero campo non è aggiungere una capacità nuova, ma togliere un ostacolo che nessuno aveva pensato di rimuovere.

Il paper

Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, Deep Residual Learning for Image Recognition, presentato a CVPR 2016. Disponibile su arXiv: arxiv.org/abs/1512.03385. Un approfondimento successivo degli stessi autori sul perché le scorciatoie identità funzionino meglio di alternative più elaborate è Identity Mappings in Deep Residual Networks, ECCV 2016: arxiv.org/abs/1603.05027.

I commenti sono riservati agli iscritti.

Accedi per commentare