Corso
Reti neurali più profonde dovrebbero performare meglio. Ma in pratica, non è sempre così.
Oltre una certa profondità, l'accuratezza può addirittura iniziare a diminuire. Non perché il modello stia facendo overfitting, ma perché l'addestramento stesso si inceppa. I gradienti tendono a svanire prima di raggiungere i primi strati, e quei livelli smettono di imparare. Potresti pensare che aggiungere più strati risolva il problema, ma spesso lo peggiora.
ResNet ha risolto questo problema con l'idea chiave delle connessioni saltate. Invece di costringere ogni strato a imparare da zero, permette alla rete di saltare alcuni strati e aggiungere l'input direttamente all'output.
In questo articolo ti spiego come funziona ResNet, com'è fatta la sua architettura e perché è ancora un algoritmo di riferimento nel deep learning moderno.
Vuoi vedere ResNet in pratica? Risolvi il nostro esercizio di classificazione di immagini con ResNet come parte del corso Deep Learning for Images with PyTorch.
Cos'è l'architettura ResNet?
ResNet - abbreviazione di Residual Network - è un'architettura di rete neurale progettata per rendere pratico l'addestramento di reti profonde.
L'idea è stata introdotta da Microsoft Research nel 2015. L'algoritmo usa connessioni residuali per aggirare i problemi di addestramento che all'epoca limitavano le reti profonde. L'idea era semplice, ma dopo la scoperta è stato possibile addestrare in modo affidabile reti con 50, 101 o persino 152 strati per la prima volta, senza vedere cali di prestazioni.
Prima di ResNet, spingersi così in profondità non era davvero un'opzione.
Perché le reti profonde sono difficili da addestrare
Più strati dovrebbero significare più opportunità per la rete di imparare. In pratica, oltre una certa profondità, le cose iniziano a rompersi.
Qui entrano in gioco due problemi.
Il primo è il problema del gradiente che svanisce. Le reti neurali imparano inviando segnali di errore all'indietro attraverso la rete, un processo chiamato backpropagation. Ogni strato aggiusta i propri pesi in base a quel segnale. Ma man mano che il segnale risale attraverso molti strati, viene moltiplicato ripetutamente per numeri piccoli e si riduce. Quando raggiunge i primi strati, resta ben poco. Quei livelli smettono di aggiornarsi, quindi smettono di imparare.
Il secondo è il problema del degrado. Questo è controintuitivo. Ti aspetteresti che una rete a 56 strati performi almeno quanto una a 20 strati: dopotutto ha più capacità. Ma i ricercatori hanno scoperto il contrario. La rete più profonda performava peggio, anche sui dati di training. Questo esclude l'overfitting come causa. Il modello non sta memorizzando troppo. Piuttosto, fa fatica a ottimizzare.
Questa è la distinzione chiave. Non sono problemi di generalizzazione che puoi risolvere con dropout o regolarizzazione. Sono problemi di ottimizzazione: la rete non riesce a trovare buoni pesi fin dall'inizio.
Le ResNet sono state progettate per risolvere questi due problemi. Vediamo come.
L'idea di base: apprendimento residuale
Le reti neurali tradizionali cercano di apprendere una mappatura diretta da input a output. Ogni strato osserva ciò che entra e cerca di capire cosa dovrebbe uscire. Questo funziona bene per reti poco profonde. Ma man mano che vai più in profondità, incontri i due problemi discussi prima.
Con ResNet, invece di chiedere a ogni blocco di apprendere l'intera mappatura, si pone una domanda più semplice: cosa devo aggiungere all'input per ottenere l'output corretto?
Questa differenza si chiama residuo.
Quindi invece di imparare:

Apprendimento residuale (1)
La rete impara:

Apprendimento residuale (2)
Dove F(input) è il residuo, la piccola correzione che la rete deve apportare. Se lo strato non deve cambiare nulla, può semplicemente spingere F(input) verso zero e lasciare passare l'input invariato.
Potrebbe sembrare una piccola modifica. Ma cambia ciò che la rete deve imparare. Imparare una piccola correzione è un problema di ottimizzazione molto più semplice che imparare da zero una trasformazione completa, ed è questo che rende addestrabili le reti più profonde.
Cosa sono le skip connection in ResNet?
Una skip connection è esattamente ciò che sembra: un percorso diretto che scavalca uno o più strati e alimenta l'input a un punto successivo della rete.
In una rete tradizionale, i dati scorrono attraverso ogni strato in sequenza. Ogni strato trasforma l'input e passa il risultato al successivo. Le skip connection prendono l'input originale e lo aggiungono direttamente all'output di uno strato più avanti nel blocco.
Ecco un modo semplice per visualizzarla:

Esempio di grafo con skip connection
L'input x percorre due cammini contemporaneamente. Un cammino passa attraverso i layer convoluzionali, che apprendono il residuo F(x). L'altro salta quei layer e si collega al passaggio di somma. L'output finale è F(x) + x.
Questa scorciatoia fa qualcosa di importante per l'addestramento. Durante la backpropagation, i gradienti possono risalire attraverso la skip connection, senza passare per gli strati intermedi. Questo dà ai primi strati un segnale più pulito e più forte da cui imparare, esattamente ciò che mancava nelle reti profonde prima di ResNet.
Struttura di un blocco ResNet
Un blocco residuo è l'unità ripetuta che compone una ResNet. Se capisci un blocco, capisci l'intera rete.
Ecco cosa succede dentro un singolo blocco:
-
L'input
xentra nel blocco e si divide in due percorsi -
Un percorso passa attraverso due layer convoluzionali, ciascuno seguito da batch normalization e un'attivazione ReLU
-
L'altro percorso salta quei layer: questa è la skip connection
-
Entrambi i percorsi si incontrano in un passaggio di somma, dove l'input originale viene aggiunto all'output dei layer convoluzionali
-
Una ReLU finale viene applicata al risultato
Oppure in forma di diagramma:

Diagramma di un blocco ResNet
La skip connection qui è chiamata mappatura identità: l'input passa invariato e viene aggiunto direttamente all'output appreso. È la scorciatoia più semplice possibile, senza trasformazioni e senza parametri aggiuntivi.
Ma perché la somma funzioni, entrambi i percorsi devono produrre tensori della stessa forma. Se i layer convoluzionali cambiano le dimensioni spaziali o il numero di canali, l'input x non può essere aggiunto. In questi casi, ResNet applica una scorciatoia con proiezione: una convoluzione 1×1 sul percorso di skip che rimodella x per farlo combaciare.
La maggior parte dei blocchi in una ResNet usa scorciatoie identità. Le scorciatoie con proiezione compaiono solo quando cambiano le dimensioni, tipicamente quando la rete passa da uno stadio all'altro.
Tipi di architetture ResNet
ResNet esiste in alcune varianti standard, ciascuna chiamata in base al numero totale di strati. Quella giusta dipende da ciò che vuoi ottimizzare: velocità, accuratezza o un compromesso tra le due.

Confronto tra architetture ResNet
ResNet-18 e ResNet-34 usano il blocco di base standard: due layer convoluzionali 3×3 con una skip connection. Sono veloci ed economici da eseguire, quindi ottimi punti di partenza quando fai prototipi o lavori con hardware limitato.
ResNet-50 e superiori passano a un design diverso chiamato blocco a collo di bottiglia (bottleneck), che usa tre layer invece di due. Questa modifica rende più facile addestrare reti più profonde senza un aumento proporzionale del costo computazionale. Più avanti leggerai come funziona.
ResNet-101 e ResNet-152 spingono ancora oltre, al costo di tempi di training più lunghi e maggior uso di memoria. Sono comuni nella ricerca e in sistemi produttivi dove l'accuratezza conta più della velocità.
Per la maggior parte dei lavori pratici, ResNet-50 è il punto di partenza predefinito. Ha un buon equilibrio tra profondità e costo, ed è ben supportata in tutti i principali framework di deep learning.
Architettura bottleneck di ResNet
Le ResNet più profonde non usano lo stesso design di blocco di quelle più superficiali. A partire da ResNet-50, l'architettura passa a un blocco bottleneck, un design a tre layer che mantiene gestibile il calcolo all'aumentare della profondità.
Il blocco usa tre convoluzioni in sequenza:
- Convoluzione 1×1 - riduce il numero di canali, rendendo l'input più piccolo
- Convoluzione 3×3 - esegue l'effettivo apprendimento delle feature su quella rappresentazione ridotta
- Convoluzione 1×1 - espande di nuovo i canali alla dimensione originale
La prima e l'ultima convoluzione 1×1 fungono da collo di bottiglia, da cui il nome. Comprimono i dati prima che venga eseguita la più costosa convoluzione 3×3, poi li ripristinano dopo.
Una convoluzione 3×3 su un input con molti canali è computazionalmente pesante. Riducendo prima i canali, il blocco bottleneck consente al layer 3×3 di lavorare su un input molto più piccolo. Il risultato è un blocco che va più in profondità senza un aumento proporzionale del costo computazionale.
La skip connection funziona nello stesso modo del blocco base: l'input viene aggiunto all'output prima dell'attivazione finale. L'unica differenza è che qui serve quasi sempre una scorciatoia con proiezione, dato che le dimensioni dei canali cambiano all'interno del blocco.
Come ResNet risolve il problema del gradiente che svanisce
Il problema del gradiente che svanisce si riduce alla distanza. Più a lungo un gradiente deve viaggiare attraverso una rete, più si riduce, e quando raggiunge i primi strati non resta molto da cui imparare.
Le skip connection aggirano questo problema dando ai gradienti un percorso più breve da percorrere.
Durante la backpropagation, i gradienti non devono passare attraverso ogni strato in sequenza. Possono risalire direttamente attraverso la skip connection, saltando completamente i layer convoluzionali. Questa scorciatoia mantiene il gradiente abbastanza grande da aggiornare effettivamente i primi strati.
Cambia anche ciò che ogni blocco deve imparare. Invece di trovare da zero una trasformazione completa, la rete deve solo imparare una piccola correzione sull'input. È un problema di ottimizzazione molto più semplice, e significa che la rete può andare più in profondità senza che l'addestramento diventi instabile.
In sintesi, reti che prima erano troppo profonde per essere addestrate in modo affidabile diventano addestrabili.
ResNet vs architetture CNN tradizionali
Le CNN tradizionali e le ResNet apprendono entrambe feature dalle immagini, ma lo fanno in modi diversi.
In una CNN tradizionale, i dati scorrono attraverso i layer in linea retta. Ogni strato prende l'output del precedente, applica una trasformazione e passa il risultato in avanti. Questo funziona bene fino a un certo punto. Oltre una certa profondità, la struttura sequenziale diventa inaffidabile durante la backpropagation: i gradienti si riducono, i primi strati smettono di imparare e l'accuratezza inizia a calare.
ResNet non procede in linea retta. Le skip connection permettono all'input di scavalcare uno o più strati e di essere aggiunto direttamente all'output più avanti nel blocco. La rete continua a imparare trasformazioni, ma ha anche un percorso diretto per far viaggiare sia i dati che i gradienti.
Ecco come si confrontano i due approcci:

ResNet rispetto a CNN tradizionale
Le skip connection aiutano sia con i gradienti sia a rendere l'ottimizzazione più fluida, il che significa che la rete trova buoni pesi più velocemente e in modo più affidabile.
Applicazioni dell'architettura ResNet
L'architettura ResNet compare in un'ampia gamma di attività reali.
Classificazione di immagini è dove ResNet è nata. Ha vinto l'ImageNet Large Scale Visual Recognition Challenge nel 2015, ed è ancora una scelta di riferimento per classificare le immagini in categorie, che si tratti di scansioni mediche, immagini satellitari o foto di prodotti.
Rilevamento di oggetti: i workflow spesso usano ResNet. Framework come Faster R-CNN e Mask R-CNN combinano ResNet con una testa di rilevamento che identifica e localizza gli oggetti in un'immagine. ResNet fa l'estrazione di feature e la detection head fa il resto.
Transfer learning è dove ResNet diventa davvero utile per la maggior parte dei data scientist. Invece di addestrare da zero - cosa che richiede giorni e molti dati - carichi una ResNet preaddestrata su ImageNet e la affini sul tuo dataset. I pesi preaddestrati codificano già utili feature di basso livello come bordi, texture e forme, quindi parti da una base molto migliore.
Estrazione di feature adotta un approccio simile. Fai passare le tue immagini attraverso una ResNet preaddestrata e prelevi l'output da uno degli strati finali. Quegli output sono rappresentazioni dense e significative delle tue immagini che puoi alimentare a un classificatore più semplice o a un algoritmo di clustering.
In tutti questi casi d'uso, ResNet funziona come punto di partenza preaddestrato. La maggior parte dei framework di deep learning include pesi ResNet preaddestrati pronti all'uso, il che la rende una delle architetture più semplici con cui iniziare.
Vantaggi e limiti di ResNet
ResNet è stato un vero passo avanti nel deep learning, ma come ogni architettura ha dei compromessi. Vediamo un paio di vantaggi e svantaggi.
Vantaggi
Il più evidente è la profondità. Le skip connection permettono di addestrare reti con 50, 100 o anche più di 150 strati senza incorrere nel problema del degrado. Prima di ResNet, non era possibile con affidabilità.
L'addestramento è anche più stabile. I percorsi di scorciatoia danno ai gradienti una via pulita per attraversare la rete, il che significa meno tuning, meno collassi e risultati più prevedibili su task e dataset diversi.
E anche le prestazioni sono un vantaggio. Le varianti ResNet si posizionano costantemente bene nei benchmark di immagini, e i modelli ResNet preaddestrati si trasferiscono bene a nuovi domini, motivo per cui sono ancora un punto di partenza predefinito per tanti progetti di computer vision.
Limiti
ResNet è pesante dal punto di vista computazionale. Varianti più profonde come ResNet-101 e ResNet-152 richiedono molta memoria e potenza di calcolo, il che può essere un vincolo quando lavori con hardware limitato o ti serve inferenza rapida.
Non è nemmeno la scelta migliore per ogni task. Per dataset piccoli o problemi più semplici, un'architettura più leggera spesso funziona altrettanto bene a una frazione del costo. Scegliere ResNet-50 di default non è sempre la mossa giusta.
E in alcune aree, ResNet è stata sostituita. Architetture come EfficientNet ottengono una migliore accuratezza per parametro nei task di immagini, e i transformer hanno preso il sopravvento in altri ambiti. ResNet è ancora ampiamente usata, ma non è più l'unica opzione seria.
ResNet nel deep learning moderno
Undici anni dopo la sua introduzione, l'architettura ResNet è ancora in gran forma. Non è una cosa comune nel deep learning.
La maggior parte dei professionisti continua a scegliere ResNet quando serve una baseline affidabile per un task di computer vision. È ben compresa, supportata in tutti i principali framework e i pesi preaddestrati sono disponibili in ogni libreria importante. Quindi, quando ti serve qualcosa che funzioni senza troppa sperimentazione, ResNet è di solito la prima opzione che provi.
Ma la sua influenza va oltre le sue varianti.
L'idea chiave di ResNet - aggiungere una scorciatoia attorno agli strati per aiutare il flusso di informazioni e gradienti - si è rivelata ampiamente utile. DenseNet ha migliorato quell'idea collegando ogni strato a tutti gli altri, non solo saltandone uno o due. E sebbene i transformer abbiano un'architettura diversa, le connessioni residuali all'interno di ciascun blocco transformer seguono lo stesso principio introdotto da ResNet.
Architetture più recenti come EfficientNet, ConvNeXt e i vision transformer hanno spinto le prestazioni oltre in aree specifiche. Ma non hanno tanto sostituito ResNet quanto costruito su ciò che ha introdotto.
Conclusione
L'architettura ResNet ruota attorno a una cosa: le skip connection. Questa idea ha risolto due problemi che frenavano le reti profonde - gradienti che svaniscono e problema del degrado - e ha reso pratico addestrare reti a una profondità prima impossibile.
L'idea di aggiungere scorciatoie tra gli strati è ora un mattone standard nel deep learning moderno, presente in DenseNet, nei transformer e nella maggior parte delle architetture costruite dopo il 2015.
Se oggi stai lavorando a un problema di computer vision, ResNet è ancora un solido punto di partenza. Non è l'opzione più nuova, ma è una delle più affidabili. Trattala come baseline: potresti sorprenderti di come riesca ancora a superare la concorrenza nel 2026.
Se sei alle prime armi con il deep learning ma conosci le basi di Python, esplora il nostro corso Introduction to TensorFlow in Python: ti avvierà su argomenti come ResNet in un weekend.
FAQ
Cos'è ResNet e perché è stata importante?
ResNet, abbreviazione di Residual Network, è un'architettura di deep learning introdotta da Microsoft Research nel 2015. Ha risolto due problemi che rendevano difficile l'addestramento di reti profonde: i gradienti che svaniscono e il problema del degrado. Il meccanismo delle skip connection ha reso possibile, per la prima volta, addestrare in modo affidabile reti con 50, 100 o anche oltre 150 strati.
Cosa sono le skip connection in una rete neurale?
Una skip connection è un percorso diretto che scavalca uno o più layer e aggiunge l'input direttamente all'output di un layer successivo. Questo offre a dati e gradienti una scorciatoia attraverso la rete, mantenendo il segnale del gradiente abbastanza forte da aggiornare i primi strati durante l'addestramento.
Cos'è il problema del gradiente che svanisce?
Il problema del gradiente che svanisce si verifica quando i gradienti si riducono mentre risalgono attraverso una rete profonda. Quando il segnale raggiunge i primi strati, è troppo piccolo per aggiornarli, il che significa che quei layer smettono di imparare. ResNet affronta il problema permettendo ai gradienti di fluire indietro attraverso le skip connection, saltando gli strati intermedi.
Qual è la differenza tra il blocco base e il blocco bottleneck di ResNet?
Il blocco di base usa due layer convoluzionali 3×3 ed è presente nelle varianti più superficiali come ResNet-18 e ResNet-34. Il blocco bottleneck, usato in ResNet-50 e più profonde, usa una sequenza di convoluzioni 1×1 - 3×3 - 1×1 che riduce il calcolo comprimendo i canali prima che venga eseguita la costosa convoluzione 3×3.
Come scelgo la variante ResNet giusta per il mio progetto?
Per la maggior parte dei lavori pratici, ResNet-50 è una buona scelta predefinita: bilancia bene profondità, accuratezza e costo computazionale. ResNet-18 e ResNet-34 sono opzioni più rapide quando l'hardware è limitato, mentre ResNet-101 e ResNet-152 hanno senso quando l'accuratezza è la priorità e le risorse di calcolo non sono un vincolo.


