course
Djupare neurala nätverk borde prestera bättre. Men i praktiken är det inte alltid så.
Efter en viss djupnivå kan noggrannheten faktiskt börja sjunka. Inte för att modellen överanpassar – utan för att själva träningen bryter samman. Gradienter tenderar att försvinna innan de når de tidiga lagren, och de lagren slutar lära sig. Du skulle kunna tro att fler lager löser problemet, men ofta blir det bara värre.
ResNet löste detta med kärnidén om hoppförbindelser. I stället för att tvinga varje lager att lära från grunden låter man nätverket hoppa över lager och lägga till indata direkt till utdata.
I den här artikeln går jag igenom hur ResNet fungerar, hur arkitekturen ser ut och varför det fortfarande är en favorit i modern deep learning.
Vill du se ResNet i praktiken? Lös vår övning i bildklassificering med ResNet som en del av kursen Deep Learning for Images with PyTorch.
Vad är ResNet-arkitektur?
ResNet – kort för Residual Network – är en neural nätverksarkitektur utformad för att göra träning av djupa nätverk praktisk.
Idén introducerades av Microsoft Research redan 2015. Algoritmen använder residualförbindelser för att kringgå de träningsproblem som vid den tiden begränsade djupa nätverk. Idén var enkel, men efter upptäckten gick det för första gången att pålitligt träna nät med 50, 101 eller till och med 152 lager – utan att se prestanda försämras.
Före ResNet var det egentligen inte ett alternativ att gå så djupt.
Varför djupa nätverk är svåra att träna
Fler lager borde ge större chans för ett nätverk att lära sig. I praktiken börjar saker gå sönder efter en viss djupnivå.
Här finns två problem i spel.
Det första är problemet med försvinnande gradienter. Neurala nät lär sig genom att skicka felsignaler bakåt genom nätverket – en process som kallas backpropagation. Varje lager justerar sina vikter baserat på den signalen. Men när signalen färdas bakåt genom många lager multipliceras den upprepade gånger med små tal och krymper. När den når de tidiga lagren finns nästan inget kvar. De lagren slutar uppdateras och därmed slutar de lära sig.
Det andra är degradationsproblemet. Det här är kontraintuitivt. Du förväntar dig att ett nätverk med 56 lager ska prestera minst lika bra som ett med 20 – det har ju högre kapacitet. Men forskare fann motsatsen. Det djupare nätverket presterade sämre, till och med på träningsdata. Det utesluter överanpassning som orsak. Modellen memorerar inte för mycket. I stället har den svårt att optimeras.
Det här är den avgörande skillnaden. Det är inte generaliseringsproblem du kan lösa med dropout eller regularisering. Det är optimeringsproblem – nätverket kan inte hitta bra vikter från början.
ResNet konstruerades för att lösa de här två problemen. Låt mig visa hur.
Kärnidén: Residualinlärning
Traditionella neurala nät försöker lära en direkt avbildning från indata till utdata. Varje lager tittar på vad som kom in och försöker lista ut vad som ska komma ut. Det fungerar fint för grunda nät. Men när du går djupare stöter du på de två problem som diskuterats tidigare.
Med ResNet ber man i stället varje block att inte lära hela avbildningen, utan att svara på en enklare fråga: vad behöver jag lägga till till indata för att få rätt utdata?
Den skillnaden kallas residualen.
Så i stället för att lära:

Residualinlärning (1)
Nätverket lär:

Residualinlärning (2)
Där F(input) är residualen – den lilla korrigering nätverket behöver göra. Om lagret inte behöver ändra något kan det helt enkelt trycka F(input) mot noll och släppa igenom indata oförändrade.
Det kan låta som en liten justering. Men det förändrar vad nätverket behöver lära. Att lära en liten korrigering är ett mycket enklare optimeringsproblem än att lära en fullständig transformation från grunden, och det är det som gör djupare nätverk träningsbara.
Vad är hoppförbindelser i ResNet?
En hoppförbindelse är precis vad det låter som – en direkt väg som kringgår ett eller flera lager och matar indata till en senare punkt i nätverket.
I ett traditionellt nät flödar data genom varje lager i ordning. Varje lager transformerar indata och skickar resultatet vidare till nästa. Hoppförbindelser tar den ursprungliga indata och adderar den direkt till utdatat från ett lager längre ner i blocket.
Här är ett enkelt sätt att visualisera det:

Exempel på graf med hoppförbindelse
Indatan x färdas två vägar samtidigt. En väg går genom konvolutionlagren, som lär residualen F(x). Den andra vägen hoppar över dessa lager och ansluter till adderingssteget. Slututdata är F(x) + x.
Den här genvägen gör något viktigt för träningen. Under backpropagation kan gradienter färdas bakåt genom hoppförbindelsen utan att passera genom de mellanliggande lagren. Det ger de tidiga lagren en renare och starkare signal att lära av – vilket var precis det som saknades i djupa nätverk före ResNet.
Strukturen i ett ResNet-block
Ett residualblock är den upprepade byggstenen som utgör ett ResNet. Förstår du ett block, förstår du hela nätverket.
Så här ser det ut inuti ett enskilt block:
-
Indatan
xgår in i blocket och delas i två vägar -
En väg går genom två konvolutionlager, vardera följt av batchnormalisering och en ReLU-aktivering
-
Den andra vägen hoppar över dessa lager – det här är hoppförbindelsen
-
Båda vägarna möts i ett adderingssteg, där den ursprungliga indatan adderas till utdatat från konvolutionlagren
-
En slutlig ReLU-aktivering appliceras på resultatet
Eller i diagramform:

ResNet-blockdiagram
Hoppförbindelsen här kallas en identitetsavbildning – indatan går igenom oförändrad och adderas direkt till det inlärda utdatat. Det är den enklast möjliga genvägen utan transformation och utan extra parametrar.
Men för att additionen ska fungera måste båda vägarna producera tensorer av samma form. Om konvolutionlagren ändrar de rumsliga dimensionerna eller antalet kanaler kan indatan x inte adderas. I de fallen använder ResNet en projektiongenväg – en 1×1-konvolution på hoppvägen som formar om x så att den matchar.
De flesta block i ett ResNet använder identitetsgenvägar. Projektiongenvägar dyker bara upp när dimensioner förändras, vanligtvis när nätverket går mellan olika steg.
Typer av ResNet-arkitekturer
ResNet finns i några standardvarianter, vardera uppkallad efter sitt totala antal lager. Rätt val beror på vad du optimerar för – hastighet, noggrannhet eller något däremellan.

Jämförelse av ResNet-arkitekturer
ResNet-18 och ResNet-34 använder det vanliga grundblocket – två 3×3-konvolutionlager med en hoppförbindelse. De är snabba och billiga att köra, vilket gör dem till en bra startpunkt när du prototypar eller arbetar med begränsad hårdvara.
ResNet-50 och uppåt byter till en annan design kallad flaskhalsblock, som använder tre lager i stället för två. Den förändringen gör det lättare att träna djupare nät utan en proportionell ökning av beräkningskostnaden. Du läser mer om hur det fungerar i nästa avsnitt.
ResNet-101 och ResNet-152 går ett steg längre till priset av längre träningstider och högre minnesanvändning. De är vanliga inom forskning och i produktionssystem där noggrannhet är viktigare än hastighet.
För de flesta praktiska uppgifter är ResNet-50 standardstartpunkten. Det har en bra balans mellan djup och kostnad och stöds väl i alla större deep learning-ramverk.
ResNets flaskhalsarkitektur
Djupare ResNet använder inte samma blockdesign som grundare varianter. Från och med ResNet-50 går arkitekturen över till ett flaskhalsblock, en trelagersdesign som håller beräkningarna hanterbara när djupet ökar.
Blocket använder tre konvolutioner i följd:
- 1×1-konvolution – minskar antalet kanaler och gör indatat mindre
- 3×3-konvolution – utför själva funktionsinlärningen på den mindre representationen
- 1×1-konvolution – expanderar kanalerna tillbaka till ursprunglig storlek
De första och sista 1×1-konvolutionerna fungerar som en flaskhals – därav namnet. De komprimerar datan innan den mer kostsamma 3×3-konvolutionen körs och återställer den efteråt.
En 3×3-konvolution på indata med många kanaler är beräkningstung. Genom att först minska kanalerna låter flaskhalsblocket 3×3-lagret göra sitt jobb på ett mycket mindre indata. Resultatet är ett block som går djupare utan en proportionell ökning av beräkningskostnaden.
Hoppförbindelsen fungerar på samma sätt som i ett grundblock – indatan adderas till utdatat före den sista aktiveringen. Den enda skillnaden är att en projektiongenväg nästan alltid behövs här, eftersom kanaldimensionerna ändras inuti blocket.
Hur ResNet löser problemet med försvinnande gradienter
Problemet med försvinnande gradienter handlar om avstånd. Ju längre en gradient måste färdas genom ett nätverk, desto mer krymper den – och när den når de tidiga lagren finns inte mycket kvar att lära av.
Hoppförbindelser kringgår problemet genom att ge gradienterna en kortare väg att färdas.
Under backpropagation behöver gradienter inte passera genom varje lager i ordning. De kan färdas bakåt genom hoppförbindelsen direkt och helt förbigå konvolutionlagren. Den genvägen håller gradienten tillräckligt stor för att faktiskt uppdatera de tidiga lagren.
Det förändrar också vad varje block behöver lära. I stället för att hitta en fullständig transformation från grunden behöver nätverket bara lära en liten korrigering ovanpå indatan. Det är ett mycket enklare optimeringsproblem, och det innebär att nätverket kan bli djupare utan att träningen blir instabil.
Sammanfattningsvis blir nät som tidigare var för djupa för att pålitligt tränas, träningsbara.
ResNet jämfört med traditionella CNN-arkitekturer
Traditionella CNN:er och ResNet lär båda utdrag ur bilder, men de gör det på olika sätt.
I en traditionell CNN flödar data genom lager i en rak linje. Varje lager tar utdatat från det föregående, applicerar en transformation och skickar resultatet vidare. Det fungerar bra upp till en punkt. Efter en viss djupnivå blir den sekventiella strukturen opålitlig under backpropagation – gradienterna krymper, tidiga lager slutar lära och noggrannheten börjar falla.
ResNet går inte i en rak linje. Hoppförbindelser låter indatan kringgå ett eller flera lager och adderas direkt till utdatat längre ner i blocket. Nätverket lär fortfarande transformationer, men det har också en direkt väg för både data och gradienter att färdas genom.
Så här jämförs de två tillvägagångssätten:

ResNet kontra traditionell CNN
Hoppförbindelserna hjälper både med gradienterna och gör optimeringen smidigare, vilket innebär att nätverket hittar bra vikter snabbare och mer tillförlitligt.
Tillämpningar av ResNet-arkitektur
ResNet-arkitektur dyker upp i en rad verkliga uppgifter.
Bildklassificering är där ResNet började. Det vann ImageNet Large Scale Visual Recognition Challenge 2015 och är fortfarande ett givet val för att klassificera bilder i kategorier, vare sig det gäller medicinska skanningar, satellitbilder eller produktfoton.
Objektdetektering använder ofta ResNet. Ramverk som Faster R-CNN och Mask R-CNN kombinerar ResNet med ett detekteringshuvud som identifierar och lokaliserar objekt i en bild. ResNet sköter feature-extraktionen och detekteringshuvudet gör resten.
Transferinlärning är där ResNet blir riktigt användbart för de flesta data scientists. I stället för att träna från grunden – vilket tar dagar och mycket data – laddar du ett ResNet förtränat på ImageNet och finjusterar det på din egen datamängd. De förtränade vikterna kodar redan användbara låg-nivåegenskaper som kanter, texturer och former, så du börjar från en mycket bättre position.
Feature-extraktion tar ett liknande grepp. Du kör dina bilder genom ett förtränat ResNet och hämtar utdatat från ett av de senare lagren. Dessa utdatan är täta, meningsfulla representationer av dina bilder som du kan mata in i en enklare klassificerare eller klustringsalgoritm.
I alla dessa användningsfall fungerar ResNet som en förtränad startpunkt. De flesta deep learning-ramverk levereras med förtränade ResNet-vikter direkt, vilket gör det till en av de enklaste arkitekturerna att komma igång med.
Fördelar och begränsningar med ResNet
ResNet var ett verkligt framsteg inom deep learning – men som alla arkitekturer innebär det kompromisser. Låt mig gå igenom några fördelar och nackdelar.
Fördelar
Den mest uppenbara är djupet. Hoppförbindelser gör det möjligt att träna nätverk med 50, 100 eller till och med 150+ lager utan att stöta på degraderingsproblemet. Det var inte tillförlitligt möjligt före ResNet.
Träningen är också mer stabil. Genvägarna ger gradienterna en ren väg tillbaka genom nätverket, vilket innebär mindre finjustering, färre kollapser och mer förutsägbara resultat över olika uppgifter och datamängder.
Och prestandan är också en fördel. ResNet-varianter placerar sig konsekvent väl på bildjämförelser, och förtränade ResNet-modeller överför väl till nya domäner, vilket är anledningen till att de fortfarande är en standardstartpunkt för så många datorseendeprojekt.
Begränsningar
ResNet är beräkningstungt. Djupare varianter som ResNet-101 och ResNet-152 kräver mycket minne och processorkraft, vilket kan vara en begränsning när du arbetar med knappa resurser eller behöver snabb inferens.
Det är inte heller det bästa valet för varje uppgift. För mindre datamängder eller enklare problem gör ofta en lättare arkitektur lika bra ifrån sig till en bråkdel av kostnaden. Att välja ResNet-50 som standard är inte alltid rätt.
Och på vissa områden har ResNet ersatts. Arkitekturer som EfficientNet ger bättre noggrannhet per parameter på bilduppgifter, och transformatorer har tagit över på andra. ResNet används fortfarande brett, men det är inte längre det enda seriösa alternativet.
ResNet i modern deep learning
Elva år efter introduktionen står ResNet-arkitekturen fortfarande stark. Det är inte vanligt inom deep learning.
De flesta praktiker väljer fortfarande ResNet när de behöver en pålitlig baslinje för en datorseendeuppgift. Den är välförstådd, välstödd i alla större ramverk och förtränade vikter finns i alla stora bibliotek. Så när du behöver något som fungerar utan mycket experimenterande är ResNet oftast det första du provar.
Men dess inflytande sträcker sig bortom de egna varianterna.
ResNets kärnidé – att du kan lägga till en genväg runt lager för att hjälpa information och gradienter att flöda – visade sig vara allmänt användbar. DenseNet förbättrade idén genom att koppla varje lager till alla andra lager, inte bara hoppa över ett eller två. Och även om transformatorer har en annan arkitektur följer residualförbindelserna i varje transformatorblock samma princip som ResNet introducerade.
Nyare arkitekturer som EfficientNet, ConvNeXt och visuella transformatorer har drivit prestandan längre inom specifika områden. Men de ersatte inte ResNet så mycket som de byggde vidare på det som etablerats.
Slutsats
ResNet-arkitektur handlar om en sak: hoppförbindelser. Den idén löste två problem som hade hållit tillbaka djupa nätverk – försvinnande gradienter och degraderingsproblemet – och gjorde det praktiskt att träna nät med ett djup som tidigare inte var möjligt.
Idén att lägga till genvägar mellan lager är nu en standardbyggsten i modern deep learning, och syns i DenseNet, transformatorer och de flesta arkitekturer som byggts efter 2015.
Om du arbetar med ett datorseendeproblem idag är ResNet fortfarande en stabil startpunkt. Det är inte det nyaste alternativet, men ett av de mest pålitliga. Behandla det som en baslinje – du skulle bli förvånad över hur det fortfarande kan överträffa konkurrenterna 2026.
Om du är ny inom deep learning men kan grunderna i Python, utforska vår kurs Introduction to TensorFlow in Python – den får igång dig med ämnen som ResNet på en helg.
FAQs
Vad är ResNet och varför var det viktigt?
ResNet, kort för Residual Network, är en deep learning-arkitektur som introducerades av Microsoft Research 2015. Den löste två problem som gjorde det svårt att träna djupa nätverk: försvinnande gradienter och degraderingsproblemet. Mekanismen med hoppförbindelser gjorde det för första gången möjligt att pålitligt träna nätverk med 50, 100 eller till och med 150+ lager.
Vad är hoppförbindelser i ett neuralt nätverk?
En hoppförbindelse är en direkt väg som kringgår ett eller flera lager och adderar indatan rakt till utdatat från ett senare lager. Detta ger både data och gradienter en genväg genom nätverket och håller gradientsignalen tillräckligt stark för att uppdatera tidiga lager under träningen.
Vad är problemet med försvinnande gradienter?
Problemet med försvinnande gradienter uppstår när gradienter krymper när de färdas bakåt genom ett djupt nätverk. När signalen når de tidiga lagren är den för liten för att uppdatera dem – vilket gör att de lagren slutar lära sig. ResNet hanterar detta genom att låta gradienter flöda bakåt genom hoppförbindelser och därmed förbigå mellanliggande lager.
Vad är skillnaden mellan ResNets grundblock och flaskhalsblock?
Grundblocket använder två 3×3-konvolutionlager och finns i grundare varianter som ResNet-18 och ResNet-34. Flaskhalsblocket, som används i ResNet-50 och djupare, använder en 1×1 – 3×3 – 1×1-konvolutionssekvens som minskar beräkningen genom att komprimera kanaler innan den kostsamma 3×3-konvolutionen körs.
Hur väljer jag rätt ResNet-variant för mitt projekt?
För de flesta praktiska arbeten är ResNet-50 ett bra standardval – det balanserar djup, noggrannhet och beräkningskostnad väl. ResNet-18 och ResNet-34 är snabbare alternativ när hårdvaran är begränsad, medan ResNet-101 och ResNet-152 är rimliga när noggrannhet prioriteras och beräkning inte är en begränsning.