CMD + K

6 min lesing

Nevrale nettverk

Følg signalet gjennom lag og aktiveringer, og se hvordan backpropagation og gradientbasert trening justerer vektene.

Læringsmål
  • 01Regne et forward pass gjennom et lite nettverk med ReLU og sigmoid eller softmax
  • 02Forklare hvorfor aktiveringsfunksjoner gir nettverket ikke-lineær uttrykksevne
  • 03Bruke kjerneregelen til å følge én gradientvei gjennom backpropagation
  • 04Utføre ett gradientbasert vektsteg og kontrollere retningen på oppdateringen
  • 05Skille parametre fra hyperparametre og diagnostisere enkel under- og overtilpasning

Fra én lineær regel til et lagdelt system

Tenk at to målinger skal avgjøre om et signal er en hendelse eller bakgrunn. En lineær modell kan tegne én rett grense. Dersom hendelsene ligger i flere adskilte områder, er ikke én grense nok. Et nevralt nettverk løser dette ved å koble sammen mange små beregninger slik at tidlige lag lager nye representasjoner som senere lag kan kombinere.

Det historiske utgangspunktet er perceptron, en lineær klassifikator som summerer vektede input og bruker en terskelregel. Et moderne nevron gjør først den samme lineære beregningen med ƒnevronets score, men sender deretter scoren gjennom en differensierbar aktivering. Ett nevron er fortsatt enkelt. Uttrykksevnen kommer når mange nevroner danner lag og deres output blir input til neste lag.

Vektene bestemmer hvilke signaler som forsterkes eller dempes. Biasleddet flytter når nevronet blir aktivt. For tre nevroner i et lag samler vi vektene i en matrise: hver rad hører til ett nevron, og matriseproduktet beregner alle scorer samtidig. Dette er grunnen til at dimensjonskontroll er så nyttig. Har input lengde 2 og laget 3 nevroner, må vektmatrisen ha form , mens biasvektoren har lengde 3.

FIGUR · neuralnet
FIGForward pass gjennom et 2–3–1-nettverk

Aktiveringer bryter lineariteten

Uten en aktiveringsfunksjon mellom lagene kollapser hele nettverket til én lineær transformasjon. Produktet av to matriser er bare en ny matrise, så flere lineære lag alene kan ikke tegne mer kompliserte grenser enn logistisk regresjon. Aktiveringen gjør sammensetningen ikke-lineær.

ƒrelu er vanlig i skjulte lag. Positive scorer passerer, mens negative blir null. ReLU er rask å beregne og har derivert 1 på positiv side, noe som ofte gir effektiv gradientflyt. På negativ side er den deriverte 0. Et nevron som alltid får negativ score kan derfor slutte å lære, en situasjon som ofte kalles en død ReLU.

ƒsigmoidaktivering klemmer en score mellom 0 og 1 og passer godt som output i binær klassifikasjon. I dype skjulte lag kan sigmoid mette: ved svært positive eller negative scorer er kurven nesten flat og gradienten liten. For flere gjensidig utelukkende klasser bruker outputlaget ofte ƒsoftmax, som gjør én score per klasse om til positive sannsynligheter som summerer til 1.

-44-0.204.20score zaktiveringknekk / midtpunktReLU er null for negative scorer; sigmoid mettes mot 0 og 1.
FIGReLU og sigmoid gir ulik ikke-linearitet

Valget av outputaktivering må passe tapet og labeltypen. Ett sigmoid-output passer to uavhengige utfall 0/1. Softmax passer ett valg blant klasser. Flere sigmoid-output kan brukes når hver observasjon kan ha flere labels samtidig. Å velge feil kombinasjon kan gi tall som ser plausible ut, men som ikke representerer oppgaven riktig.

Forward pass: regn i riktig rekkefølge

Et skjult lag ligger mellom rå input og prediksjon. Laget kan lære mellomrepresentasjoner som «sterkt signal i område A» eller «kombinasjon av høy frekvens og lav varighet». Disse egenskapene er ikke håndkodet; vektene tilpasses slik at de hjelper sluttoppgaven.

Et forward pass fører data fra input gjennom alle lag fram til prediksjon og tap. ƒforward pass i et lag beskriver ett lag: først affin transformasjon, deretter aktivering. Rekkefølgen betyr noe. Bias legges til før aktiveringen, og neste lag mottar aktiveringen, ikke den rå scoren.

kap7-forward-pass

Forward pass i et lite nettverk

python
import numpy as np rng = np.random.default_rng(4172)x = np.array([0.8, -1.1])W1 = rng.normal(0, 0.4, size=(3, 2))b1 = np.zeros(3)W2 = rng.normal(0, 0.4, size=(1, 3))b2 = np.zeros(1) z1 = W1 @ x + b1a1 = np.maximum(0, z1)z2 = W2 @ a1 + b2p = 1 / (1 + np.exp(-z2)) print("skjult score:", np.round(z1, 3))print("skjult ReLU:", np.round(a1, 3))print("P(y=1|x):", np.round(p, 3))

Matrisenes former gjør dataflyten synlig: tre skjulte nevroner mottar to input, og ett output-nevron mottar tre aktiveringer.

For eksamensregning bør du skrive mellomverdiene eksplisitt. Finn , bruk aktiveringen for å få , og gjenta i neste lag. Kontroller formene etter hvert matriseprodukt. Dersom en ReLU-score er negativ, blir aktiveringen nøyaktig null og bidraget videre blir null. Rund først til slutt; tidlig avrunding kan flytte en sannsynlighet over eller under en terskel.

Forward pass brukes både under trening og etter utrulling. Forskjellen er at trening også kjenner fasiten, beregner et tap og trenger gradienter. Ved inferens holder det å beregne prediksjonen med de ferdige vektene.

Backpropagation er organisert kjerneregel

Når tapet er beregnet, må vi vite hvordan hver vekt påvirket det. Direkte utregning parameter for parameter ville gjenta store deler av samme arbeid. backpropagation går baklengs gjennom beregningsgrafen og gjenbruker gradienter. Metoden er ikke en egen tapsfunksjon eller optimizer; den er en effektiv måte å differensiere en sammensatt funksjon på.

ƒkjerneregel er kjernen. Hvis vekten påvirker scoren, og scoren påvirker tapet, er total påvirkning produktet av de lokale derivertene. I et nettverk kan samme aktivering påvirke mange senere nevroner. Bidragene summeres når gradienten føres tilbake. Hver matriseoperasjon i forward pass får en tilsvarende gradientoperasjon bakover.

FIGUR · neuralnet
FIGBackpropagation fører gradienter bakover

ReLU illustrerer en viktig detalj. For et skjult nevron med negativ score er den lokale deriverten null, så det går ingen gradient gjennom denne veien i akkurat dette eksemplet. For positiv score er deriverten 1. Det betyr ikke at hele laget alltid lærer eller alltid står stille; aktiveringsmønsteret kan endres fra observasjon til observasjon.

I sigmoid-output med binary cross-entropy forenkles gradienten mot logiten til . Dersom labelen er 1 og modellen gir lav sannsynlighet, er uttrykket negativt og oppdateringen trekker scoren opp. Dersom labelen er 0 og sannsynligheten er høy, trekker oppdateringen scoren ned. Denne fortegnssjekken er en god måte å kontrollere et håndregnet backprop-steg.

kap7-ett-treningssteg

Ett backprop-steg for et sigmoid-nevron

python
import numpy as np rng = np.random.default_rng(4172)x = rng.normal(size=3)y = 1.0w = rng.normal(0, 0.3, size=3)b = 0.0eta = 0.2 z = x @ w + bp = 1 / (1 + np.exp(-z))tap_for = -(y * np.log(p) + (1 - y) * np.log(1 - p)) dz = p - ydw = dz * xdb = dzw_ny = w - eta * dwb_ny = b - eta * db p_ny = 1 / (1 + np.exp(-(x @ w_ny + b_ny)))tap_etter = -(y * np.log(p_ny) + (1 - y) * np.log(1 - p_ny))print(f"tap før={tap_for:.4f}, tap etter={tap_etter:.4f}")

For sigmoid kombinert med binary cross-entropy blir gradienten mot scoren p−y. Koden viser at ett lite steg reduserer tapet for observasjonen.

Oppdatering i minibatcher

Når gradientene er klare, bruker vi ƒvektoppdatering. Læringsraten bestemmer steglengden. For stor verdi kan få tapet til å oscillere eller eksplodere; for liten verdi gir stabil, men treg trening. Vi bruker ofte minibatcher fordi de gir effektive matriseoperasjoner og et rimelig kompromiss mellom støy og beregningskostnad.

stokastisk gradient descent brukes noen ganger snevert om ett eksempel per steg og andre ganger om hele familien av minibatchmetoder. Hovedideen er at hvert steg estimerer gradienten fra et utvalg i stedet for hele datasettet. Støyen kan hjelpe optimeringen, men treningskurven blir mindre jevn. Én epoke betyr at omtrent alle treningsobservasjonene har bidratt én gang.

Skalering av features og god initialisering påvirker gradientflyten. Hvis alle vekter i samme lag initialiseres identisk, får nevronene identiske gradienter og lærer samme funksjon. Små tilfeldige startvekter bryter denne symmetrien. Samtidig kan svært store startvekter mette sigmoid eller gi ustabile aktiveringer.

Kapasitet, generalisering og valg utenfor treningen

Antall lag, antall nevroner, aktiveringsvalg, læringsrate, batchstørrelse og regularisering er hver en hyperparameter. De læres ikke av vanlig backpropagation. Vi velger dem med valideringsdata eller en kontrollert søkeprosedyre. Testsettet skal ikke drive disse valgene.

Et bredere eller dypere nett har høyere kapasitet, men er ikke automatisk bedre. Det kan tilpasse treningsdata svært godt og likevel generalisere dårlig. Tidlig stopping, vektregularisering og dropout kan begrense overtilpasning, men de må evalueres på samme ryddige måte som andre modellvalg. Mer data hjelper bare når de nye observasjonene er relevante for framtidig bruk.

Under trening bør vi følge både trenings- og valideringstap. Dersom begge er høye, kan modellen eller featuregrunnlaget være for svakt. Dersom treningstapet faller mens valideringstapet begynner å stige, lærer nettverket trolig treningsspesifikke mønstre. Accuracy alene kan skjule dette, særlig ved ubalanserte klasser.

Eksamensstrategi for små nettverk

Tegn lagene og skriv formen til hver matrise før du regner. Gjennomfør forward pass fra venstre mot høyre og oppbevar scorer og aktiveringer separat. Beregn tapet. Gå deretter baklengs med kjerneregelen, og merk hvor en aktiveringsderivert multipliseres inn. Avslutt med oppdateringen; backprop beregner gradienten, mens optimizersteget endrer vektene.

Skill også mellom parametre og hyperparametre. Vekter og bias er parametre som treningen lærer. Lagbredde og læringsrate velges utenfor gradientsteget. Når du forklarer hvorfor nettverket er ikke-lineært, pek på aktiveringsfunksjonene. Når du forklarer hvorfor det kan trenes, pek på differensierbare operasjoner og gjenbruk av lokale deriverte.

Et lite nettverk er bare en kjede av kjente deler: matriseprodukt, bias, aktivering, tap og gradientoppdatering. Holder du orden på rekkefølge, former og fortegn, blir både forward pass og backprop håndterlige selv om diagrammet først ser omfattende ut.

Mine notater

Skriv egne notater for dette kapittelet. De lagres automatisk og dukker opp i «Mine notater»-oversikten paa fag-siden.

Laster…