Sari la conținutul principal

Arhitectura ResNet: Rețele reziduale și conexiuni skip

O analiză aprofundată a arhitecturii ResNet, acoperind modul în care învățarea reziduală și conexiunile skip rezolvă problemele gradientului care dispare și ale degradării, care îngreunează antrenarea rețelelor neuronale profunde.
Actualizat 4 mai 2026  · 12 min. citire

Rețelele neuronale mai profunde ar trebui să aibă performanțe mai bune. Dar, în practică, nu este întotdeauna așa.

După o anumită adâncime, acuratețea poate chiar să scadă. Nu pentru că modelul face overfitting, ci pentru că antrenarea însăși se deteriorează. Gradientii tind să dispară înainte de a ajunge la straturile timpurii, iar acele straturi nu mai învață. Ați presupune că adăugarea mai multor straturi ar rezolva problema, dar de multe ori o agravează.

ResNet a remediat asta cu ideea centrală a conexiunilor „skip”. În loc să forțeze fiecare strat să învețe de la zero, permite rețelei să sară peste straturi și să adauge direct intrarea la ieșire.

În acest articol, voi prezenta cum funcționează ResNet, cum arată arhitectura sa și de ce rămâne un algoritm de bază în deep learning-ul modern.

Vreți să vedeți ResNet în practică? Rezolvați exercițiul Image classification with ResNet ca parte a cursului Deep Learning for Images with PyTorch.

Ce este arhitectura ResNet?

ResNet - prescurtare de la „Residual Network” - este o arhitectură de rețea neuronală concepută pentru a face antrenarea rețelelor profunde practică.

Ideea a fost introdusă de Microsoft Research în 2015. Algoritmul folosește conexiuni reziduale pentru a ocoli problemele de antrenare care limitau rețelele profunde la acea vreme. Ideea era simplă, dar după descoperire, puteai antrena în mod fiabil rețele cu 50, 101 sau chiar 152 de straturi pentru prima dată - fără degradarea performanței.

Înainte de ResNet, a merge atât de adânc nu era cu adevărat o opțiune.

De ce rețelele profunde sunt greu de antrenat

Mai multe straturi ar trebui să însemne mai multe șanse pentru o rețea să învețe. În practică, după o anumită adâncime, lucrurile încep să se strice.

Există două probleme aici.

Prima este problema gradientului care dispare. Rețelele neuronale învață trimițând semnale de eroare înapoi prin rețea - un proces numit backpropagation. Fiecare strat își ajustează ponderile pe baza acelui semnal. Dar, pe măsură ce semnalul călătorește înapoi prin multe straturi, este înmulțit repetat cu numere mici și se micșorează. Până când ajunge la straturile timpurii, aproape că nu mai rămâne nimic. Acele straturi încetează să se actualizeze, ceea ce înseamnă că nu mai învață.

A doua este problema degradării. Aceasta este contraintuitivă. V-ați aștepta ca o rețea cu 56 de straturi să performeze cel puțin la fel de bine ca una cu 20 - are mai multă capacitate, până la urmă. Dar cercetătorii au descoperit contrariul. Rețeaua mai adâncă a avut performanțe mai slabe, chiar și pe datele de antrenare. Asta exclude overfitting-ul ca fiind cauza. Modelul nu memorează prea mult. În schimb, are dificultăți de optimizare.

Aceasta este distincția-cheie. Nu sunt probleme de generalizare pe care le puteți remedia cu dropout sau regularizare. Sunt probleme de optimizare - rețeaua nu poate găsi din start ponderi bune.

ResNet-urile au fost concepute pentru a rezolva aceste două probleme. Iată cum.

Ideea de bază: învățarea reziduală

Rețelele neuronale tradiționale încearcă să învețe o mapare directă de la intrare la ieșire. Fiecare strat analizează ce a intrat și încearcă să stabilească ce ar trebui să iasă. Asta funcționează bine pentru rețelele puțin adânci. Dar, pe măsură ce aprofundați, întâlniți cele două probleme discutate anterior.

Cu ResNet, în loc să ceară fiecărui bloc să învețe maparea completă, se pune o întrebare mai simplă: ce trebuie să adaug la intrare pentru a obține ieșirea corectă?

Acea diferență se numește rezidual.

Așadar, în loc să învețe:

Residual learning (1)

Învățare reziduală (1)

Rețeaua învață:

Residual learning (2)

Învățare reziduală (2)

Unde F(input) este rezidualul - corecția mică pe care rețeaua trebuie să o facă. Dacă stratul nu trebuie să schimbe nimic, poate pur și simplu să împingă F(input) spre zero și să transmită intrarea neschimbată.

Poate părea o ajustare minoră. Dar schimbă ceea ce trebuie să învețe rețeaua. Învățarea unei corecții mici este o problemă de optimizare mult mai ușoară decât învățarea unei transformări complete de la zero, iar asta face ca rețelele mai profunde să poată fi antrenate.

Ce sunt conexiunile skip în ResNet?

O conexiune skip este exact ceea ce sugerează numele - o cale directă care ocolește unul sau mai multe straturi și trimite intrarea către un punct ulterior în rețea.

Într-o rețea tradițională, datele trec prin fiecare strat în secvență. Fiecare strat transformă intrarea și transmite rezultatul mai departe. Conexiunile skip preiau intrarea originală și o adaugă direct la ieșirea unui strat aflat mai jos în bloc.

Iată o modalitate simplă de a vă imagina asta:

Exemplu de grafic cu conexiune skip

Exemplu de grafic cu conexiune skip

Intrarea x călătorește pe două căi simultan. O cale trece prin straturile convoluționale, care învață rezidualul F(x). Cealaltă cale sare peste acele straturi și se conectează la pasul de adunare. Ieșirea finală este F(x) + x.

Această scurtătură face ceva important pentru antrenare. În timpul backpropagation, gradientii pot călători înapoi prin conexiunea skip, fără a trece prin straturile intermediare. Asta oferă straturilor timpurii un semnal mai curat și mai puternic din care să învețe - exact ce lipsea în rețelele profunde înainte de ResNet.

Structura unui bloc ResNet

Un bloc rezidual este unitatea repetitivă care alcătuiește un ResNet. Dacă înțelegeți un bloc, înțelegeți întreaga rețea.

Iată ce se întâmplă în interiorul unui singur bloc:

  1. Intrarea x intră în bloc și se împarte în două căi

  2. O cale trece prin două straturi convoluționale, fiecare urmat de normalizare pe lot (batch normalization) și o activare ReLU

  3. Cealaltă cale sare peste acele straturi - aceasta este conexiunea skip

  4. Ambele căi se întâlnesc la un pas de adunare, unde intrarea originală este adăugată la ieșirea straturilor convoluționale

  5. Se aplică o activare ReLU finală rezultatului

Sau sub formă de diagramă:

Diagrama unui bloc ResNet

Diagrama unui bloc ResNet

Conexiunea skip de aici se numește mapare identitate - intrarea trece neschimbată și este adăugată direct la ieșirea învățată. Este cea mai simplă scurtătură posibilă, fără transformare și fără parametri suplimentari.

Dar, pentru ca adunarea să funcționeze, ambele căi trebuie să producă tensori de aceeași formă. Dacă straturile convoluționale schimbă dimensiunile spațiale sau numărul de canale, intrarea x nu poate fi adăugată. În aceste cazuri, ResNet aplică o scurtătură de proiecție - o convoluție 1×1 pe calea skip care reconfigurează x pentru a se potrivi.

Majoritatea blocurilor dintr-un ResNet folosesc scurtături de identitate. Scurtăturile de proiecție apar doar când se schimbă dimensiunile, de obicei când rețeaua trece între etape.

Tipuri de arhitecturi ResNet

ResNet vine în câteva variante standard, fiecare denumită după numărul total de straturi. Varianta potrivită depinde de ceea ce optimizați - viteză, acuratețe sau un compromis între ele.

Comparație între arhitecturi ResNet

Comparație între arhitecturi ResNet

ResNet-18 și ResNet-34 folosesc blocul de bază standard - două straturi convoluționale 3×3 cu o conexiune skip. Sunt rapide și ieftine de rulat, ceea ce le face un punct de plecare bun când prototipați sau lucrați cu hardware limitat.

ResNet-50 și versiunile superioare trec la un design diferit numit bloc „bottleneck”, care folosește trei straturi în loc de două. Această schimbare face ca rețelele mai profunde să fie mai ușor de antrenat fără o creștere proporțională a costului de calcul. Veți citi mai multe despre cum funcționează în secțiunea următoare.

ResNet-101 și ResNet-152 merg cu un pas mai departe, cu prețul unor timpi de antrenare mai lungi și al unei utilizări mai mari a memoriei. Sunt frecvente în cercetare și în sistemele de producție unde acuratețea contează mai mult decât viteza.

Pentru majoritatea proiectelor practice, ResNet-50 este punctul de pornire implicit. Are un echilibru bun între adâncime și cost și este bine susținut în toate framework-urile majore de deep learning.

Arhitectura bottleneck în ResNet

ResNet-urile mai profunde nu folosesc același design de bloc ca cele mai puțin adânci. Începând cu ResNet-50, arhitectura trece la un bloc bottleneck, un design în trei straturi care menține calculul gestionabil pe măsură ce adâncimea crește.

Blocul folosește trei convoluții în secvență:

  • Convoluție 1×1 - reduce numărul de canale, micșorând intrarea
  • Convoluție 3×3 - face învățarea efectivă a caracteristicilor pe acea reprezentare mai mică
  • Convoluție 1×1 - extinde canalele înapoi la dimensiunea inițială

Prima și ultima convoluție 1×1 acționează ca un gât de sticlă (bottleneck) - de aici și numele. Ele comprimă datele înainte ca convoluția 3×3, mai costisitoare, să ruleze, apoi le restaurează după.

O convoluție 3×3 pe o intrare cu multe canale este costisitoare computațional. Prin reducerea canalelor mai întâi, blocul bottleneck permite stratului 3×3 să-și facă treaba pe o intrare mult mai mică. Rezultatul este un bloc mai adânc fără o creștere proporțională a costului de calcul.

Conexiunea skip funcționează la fel ca în blocul de bază - intrarea este adăugată la ieșire înainte de activarea finală. Singura diferență este că aici aproape întotdeauna este necesară o scurtătură de proiecție, deoarece dimensiunile canalelor se schimbă în interiorul blocului.

Cum rezolvă ResNet problema gradientului care dispare

Problema gradientului care dispare se reduce la distanță. Cu cât un gradient trebuie să călătorească mai mult printr-o rețea, cu atât se micșorează mai mult - iar până când ajunge la straturile timpurii, nu mai rămâne mare lucru din care să se învețe.

Conexiunile skip ocolesc această problemă oferind gradientilor o cale mai scurtă de parcurs.

În timpul backpropagation, gradientii nu trebuie să treacă prin fiecare strat în secvență. Ei pot călători înapoi direct prin conexiunea skip, ocolind complet straturile convoluționale. Acea scurtătură menține gradientul suficient de mare pentru a actualiza cu adevărat straturile timpurii.

De asemenea, se schimbă ceea ce trebuie să învețe fiecare bloc. În loc să găsească o transformare completă de la zero, rețeaua trebuie doar să învețe o mică corecție peste intrare. Aceasta este o problemă de optimizare mult mai ușoară și înseamnă că rețeaua poate merge mai adânc fără ca antrenarea să devină instabilă.

Pe scurt, rețelele care anterior erau prea profunde pentru a fi antrenate în mod fiabil devin antrenabile.

ResNet vs arhitecturi CNN tradiționale

CNN-urile tradiționale și ResNet-urile învață ambele caracteristici din imagini, dar o fac în moduri diferite.

Într-un CNN tradițional, datele curg prin straturi în linie dreaptă. Fiecare strat ia ieșirea celui anterior, aplică o transformare și transmite rezultatul mai departe. Asta funcționează bine până la un punct. Dincolo de o anumită adâncime, structura secvențială devine nesigură în timpul backpropagation - gradientii se micșorează, straturile timpurii nu mai învață, iar acuratețea începe să scadă.

ResNet nu merge în linie dreaptă. Conexiunile skip permit intrării să ocolească unul sau mai multe straturi și să fie adăugată direct la ieșirea mai jos în bloc. Rețeaua încă învață transformări, dar are și o cale directă atât pentru date, cât și pentru gradienti.

Iată cum se compară cele două abordări:

ResNet versus CNN tradițional

ResNet versus CNN tradițional

Conexiunile skip ajută atât la gradienti, cât și fac optimizarea mai lină, ceea ce înseamnă că rețeaua găsește ponderi bune mai repede și mai fiabil.

Aplicații ale arhitecturii ResNet

Arhitectura ResNet apare într-o gamă largă de sarcini din lumea reală.

Clasificarea imaginilor este locul de unde a pornit ResNet. A câștigat ImageNet Large Scale Visual Recognition Challenge în 2015 și rămâne o alegere de bază pentru clasificarea imaginilor în categorii, fie că sunt vorba de scanări medicale, imagini satelitare sau fotografii de produse.

Detecția de obiecte folosește adesea ResNet. Framework-uri precum Faster R-CNN și Mask R-CNN combină ResNet cu un head de detecție care identifică și localizează obiectele într-o imagine. ResNet face extragerea de caracteristici, iar head-ul de detecție face restul.

Învățarea prin transfer este locul unde ResNet devine cu adevărat util pentru majoritatea data scientist-ilor. În loc să antrenați de la zero - ceea ce ia zile și multe date - încărcați un ResNet preantrenat pe ImageNet și îl ajustați pe propriul set de date. Ponderile preantrenate encodează deja caracteristici utile de nivel jos, precum muchii, texturi și forme, astfel că porniți dintr-un punct mult mai bun.

Extragerea de caracteristici adoptă o abordare similară. Rulați imaginile printr-un ResNet preantrenat și preluați ieșirea din unul dintre straturile ulterioare. Aceste ieșiri sunt reprezentări dense, semnificative ale imaginilor pe care le puteți alimenta într-un clasificator sau algoritm de clusterizare mai simplu.

În toate aceste cazuri de utilizare, ResNet funcționează ca un punct de plecare preantrenat. Majoritatea framework-urilor de deep learning vin cu ponderi ResNet preantrenate gata de folosit, ceea ce îl face una dintre cele mai ușoare arhitecturi cu care să începeți.

Avantaje și limitări ale ResNet

ResNet a reprezentat un progres real în deep learning - dar, ca orice arhitectură, vine cu compromisuri. Voi trece în revistă câteva avantaje și dezavantaje.

Avantaje

Cel mai evident este adâncimea. Conexiunile skip permit antrenarea rețelelor cu 50, 100 sau chiar peste 150 de straturi fără a întâmpina problema degradării. Asta nu era posibil în mod fiabil înainte de ResNet.

Antrenarea este, de asemenea, mai stabilă. Căile scurte oferă gradientilor o rută curată înapoi prin rețea, ceea ce înseamnă mai puțină reglare fină, mai puține colapsuri și rezultate mai previzibile pe diverse sarcini și seturi de date.

Iar performanța este și ea un avantaj. Variantele ResNet se clasează constant bine în benchmark-urile pe imagini, iar modelele ResNet preantrenate se transferă bine în domenii noi, motiv pentru care sunt încă un punct de pornire implicit pentru atât de multe proiecte de viziune computerizată.

Limitări

ResNet este costisitor computațional. Variantele mai profunde precum ResNet-101 și ResNet-152 au nevoie de multă memorie și putere de procesare, ceea ce poate fi o constrângere când lucrați cu hardware limitat sau aveți nevoie de inferență rapidă.

De asemenea, nu este cea mai bună alegere pentru fiecare sarcină. Pentru seturi de date mai mici sau probleme mai simple, o arhitectură mai ușoară obține adesea rezultate la fel de bune la o fracțiune din cost. Alegerea implicită a ResNet-50 nu este întotdeauna corectă.

Și, în unele domenii, ResNet a fost înlocuit. Arhitecturi precum EfficientNet obțin o acuratețe mai bună per parametru pe sarcini de imagine, iar transformer-ele au preluat conducerea în altele. ResNet este încă utilizat pe scară largă, dar nu mai este singura opțiune serioasă.

ResNet în deep learning-ul modern

La unsprezece ani de la introducere, arhitectura ResNet rezistă în continuare. Asta nu este obișnuit în deep learning.

Cei mai mulți practicieni încă aleg ResNet când au nevoie de un baseline fiabil pentru o sarcină de viziune computerizată. Este bine înțeles, bine susținut în toate framework-urile majore și există ponderi preantrenate în fiecare bibliotecă importantă. Așadar, când aveți nevoie de ceva care funcționează fără multă experimentare, ResNet este de obicei prima opțiune pe care o încercați.

Dar influența sa merge dincolo de propriile variante.

Ideea de bază a ResNet - că puteți adăuga o scurtătură în jurul straturilor pentru a ajuta fluxul de informații și de gradienti - s-a dovedit a fi extrem de utilă. DenseNet a îmbunătățit această idee conectând fiecare strat la fiecare alt strat, nu doar sărind peste unul sau două. Iar deși transformer-ele au o arhitectură diferită, conexiunile reziduale din fiecare bloc transformer urmează același principiu introdus de ResNet.

Arhitecturi mai noi, precum EfficientNet, ConvNeXt și transformer-ele pentru viziune, au împins performanța mai departe în anumite domenii. Dar nu l-au înlocuit pe ResNet atât cât au construit pe baza a ceea ce a stabilit el.

Concluzie

Arhitectura ResNet se reduce la un lucru: conexiunile skip. Această idee a rezolvat două probleme care țineau pe loc rețelele profunde - gradientii care dispar și problema degradării - și a făcut practic antrenarea rețelelor la o adâncime care nu era posibilă înainte.

Ideea de a adăuga scurtături între straturi este acum un element standard în deep learning-ul modern, apărând în DenseNet, transformer-e și majoritatea arhitecturilor construite după 2015.

Dacă lucrați la o problemă de viziune computerizată astăzi, ResNet este încă un punct de plecare solid. Nu este cea mai nouă opțiune, dar este una dintre cele mai fiabile. Tratați-l ca pe un baseline - v-ar putea surprinde cum încă poate depăși concurența în 2026.

Dacă sunteți nou în deep learning, dar cunoașteți bazele Python, explorați cursul nostru Introduction to TensorFlow in Python - vă va pune pe direcția corectă cu subiecte precum ResNet într-un weekend.

Întrebări frecvente

Ce este ResNet și de ce a fost important?

ResNet, prescurtare de la Residual Network, este o arhitectură de deep learning introdusă de Microsoft Research în 2015. A rezolvat două probleme care făceau dificilă antrenarea rețelelor profunde: gradientii care dispar și problema degradării. Mecanismul conexiunilor skip a făcut posibilă antrenarea fiabilă a rețelelor cu 50, 100 sau chiar peste 150 de straturi pentru prima dată.

Ce sunt conexiunile skip într-o rețea neuronală?

O conexiune skip este o cale directă care ocolește unul sau mai multe straturi și adaugă intrarea direct la ieșirea unui strat ulterior. Aceasta oferă atât datelor, cât și gradientilor o scurtătură prin rețea, menținând semnalul gradientului suficient de puternic pentru a actualiza straturile timpurii în timpul antrenării.

Ce este problema gradientului care dispare?

Problema gradientului care dispare apare atunci când gradientii se micșorează pe măsură ce călătoresc înapoi printr-o rețea profundă. Până când semnalul ajunge la straturile timpurii, este prea mic pentru a le actualiza - ceea ce înseamnă că acele straturi nu mai învață. ResNet abordează acest lucru permițând gradientilor să curgă înapoi prin conexiuni skip, ocolind straturile intermediare.

Care este diferența între blocul de bază și blocul bottleneck din ResNet?

Blocul de bază folosește două straturi convoluționale 3×3 și se regăsește în variantele mai puțin adânci, precum ResNet-18 și ResNet-34. Blocul bottleneck, folosit în ResNet-50 și în versiunile mai profunde, folosește o secvență de convoluții 1×1 - 3×3 - 1×1 care reduce calculul prin comprimarea canalelor înainte ca convoluția 3×3, costisitoare, să ruleze.

Cum aleg varianta potrivită de ResNet pentru proiectul meu?

Pentru majoritatea proiectelor practice, ResNet-50 este o alegere implicită bună - echilibrează bine adâncimea, acuratețea și costul computațional. ResNet-18 și ResNet-34 sunt opțiuni mai rapide când hardware-ul este limitat, în timp ce ResNet-101 și ResNet-152 au sens când prioritatea este acuratețea și resursele de calcul nu sunt o constrângere.

Subiecte

Învățați cu DataCamp

course

Introduction to Deep Learning in Python

4 oră
262.9K
Learn the fundamentals of neural networks and how to build deep learning models using Keras 2.0 in Python.
Vezi detaliiRight Arrow
Începeți cursul
Vezi mai multRight Arrow