Micrograd – så lär sig ett litet neuralt nätverk
Modellen gissar, mäter felet och justerar sina inställningar. Micrograd visar hur man räknar ut vilka små ändringar som kan förbättra nästa gissning.
Kort sagt
Ett neuralt nätverk lär sig genom att justera tal som kallas vikter. De fungerar ungefär som inställningsrattar: ändrar du dem, ändras modellens svar.
Träningen upprepar tre saker: gissa, mät felet, justera. Backpropagation är metoden som räknar ut hur varje ratt påverkar felet. Micrograd är ett litet program som gör den beräkningen lättare att följa.
Ett vardagsexempel: uppskatta ett hus värmebehov
Förenklad illustration, inte en användbar energimodell: Vi uppskattar värmebehovet med husets yta och ett justerbart tal.
Uppskattning = husets yta × en vikt.
Om uppskattningen blir för hög behöver vikten i detta enkla exempel sänkas. Men i ett riktigt nätverk finns många vikter som påverkar varandra. Då räcker det inte att säga ”svaret är fel”. Vi behöver veta vilka vikter som påverkar felet och åt vilket håll de bör ändras.
Det är där backpropagation hjälper till.
Fyra begrepp utan krångel
| Begrepp | Enkel förklaring |
|---|---|
| Vikt | Ett justerbart tal som påverkar modellens svar. |
| Förlust | Ett mått på hur fel svaret blev. |
| Gradient | Visar hur förlusten påverkas av en liten ändring i en vikt. |
| Lärhastighet | Bestämmer hur stora justeringar vi gör. |
Gradienten är en lokal vägvisare, inte en garanti för att ett stort steg blir bättre. För stora justeringar kan göra träningen sämre.
Framåt för att gissa, bakåt för att lära
Framåtpass: Följ beräkningarna från indata till ett svar. Jämför svaret med det rätta och beräkna förlusten.
Bakåtpass: Börja vid förlusten och följ beräkningarna bakåt. Räkna ut hur varje vikt bidrog till att resultatet förändras.
Justering: Flytta vikterna ett litet steg i den riktning som gradienten anger minskar förlusten lokalt. Gör sedan en ny gissning.
Micrograd sparar hur beräkningarna hänger ihop i en beräkningsgraf – tänk ett flödesschema av enkla räkneoperationer. Bakåtpasset använder kedjeregeln: påverkan räknas genom hela kedjan, ett steg i taget.
Ett litet exempel du kan följa
Låt x vara ett justerbart tal och beräkna:
y = x × x + x
Med x = 3 blir y = 12. Micrograd räknar också ut gradienten: 7. Det betyder att en mycket liten ökning av x ger ungefär sju gånger så stor ökning av y, nära just den punkten.
Här är y bara ett resultat, inte ett felmått. I träning gör vi motsvarande beräkning för förlusten.
from micrograd.engine import Value
x = Value(3.0)
y = x * x + x
y.backward()
print(y.data, x.grad) # 12.0 7.0
Samma x används på flera ställen. Därför måste påverkan från alla vägar räknas med, inte bara den sista.
Gör så här för att förstå principen
- Börja med en ratt. Följ det lilla uttrycket ovan innan du tittar på ett helt nätverk.
- Räkna framåt. Vilket svar blir det med ditt valda
x? - Ändra lite. Höj
xen aning och se hur svaret förändras. - Jämför med gradienten. Den beskriver förändringens riktning och känslighet nära den aktuella punkten.
- Koppla till ett felmått. Först när du vet vad ett bra svar är kan du justera för att minska felet.
Vid vanliga separata träningssteg i Micrograd nollställer du parametergradienterna och gör ett nytt framåtpass före nästa bakåtpass. Programmet rensar inte alla gamla gradienter åt dig.
Viktigaste fallgropen
Att tro att ”modellen lär sig” betyder att den förstår eller blir användbar automatiskt. Den justerar sina vikter för att förbättra ett valt mått på träningsdata. Bra data, ett relevant mål och tester på osedd data behövs fortfarande.
Vidare läsning
Neurala nätverk: struktur, aktiveringar och hur de lär sig visar hur många sådana beräkningar bildar ett nätverk.
Vad du kan göra nu
Förklara träningen med tre meningar: modellen gissar, vi mäter felet, vikterna justeras. Förklara sedan vad bakåtpasset tillför: det visar hur varje vikt påverkar felet.