Initiering av vikter
Kunna förklara varför initiering spelar roll och använda Xavier/He.
Förkunskaper
Intuition
Alla vikter noll? Då ger varje neuron i ett lager exakt samma utdata och samma gradient — de förblir identiska för alltid. Nätet beter sig som om det hade en enda neuron per lager. Symmetrin måste brytas.
För stora vikter? Aktiveringarna växer lager för lager → gradienterna exploderar → NaN.
För små vikter? Aktiveringarna krymper mot noll → gradienterna försvinner → inget lär sig.
Målet: håll variansen på aktiveringarna ungefär konstant genom hela nätet. Det är precis vad Xavier- och He-initiering är konstruerade för.
Formellt
Vill man att genom ett lager med ingångar krävs .
Xavier/Glorot (för sigmoid/tanh, symmetriska kring noll): — kompromissar mellan framåt- och bakåtpasset.
He/Kaiming (för ReLU): ReLU nollar hälften av värdena och halverar därmed variansen, så man kompenserar: .
Bias initieras normalt till 0.
Moderna arkitekturer är mindre känsliga tack vare normaliseringslager (batch/layer norm) och residualkopplingar, men initieringen avgör fortfarande de första hundra stegen — och i mycket djupa nät utan normalisering är den skillnaden mellan konvergens och NaN.
Kod
import torch, torch.nn as nn
def variansprofil(init_fn, lager=8, bredd=512):
x = torch.randn(1000, bredd)
for _ in range(lager):
lin = nn.Linear(bredd, bredd, bias=False)
init_fn(lin.weight)
x = torch.relu(lin(x))
return x.var().item()
print("för små:", round(variansprofil(lambda w: nn.init.normal_(w, std=0.01)), 8))
print("He: ", round(variansprofil(lambda w: nn.init.kaiming_normal_(w, nonlinearity="relu")), 4))
print("för stora:", round(variansprofil(lambda w: nn.init.normal_(w, std=0.5)), 1))
# för små: 0.00000000 ← aktiveringarna har dött ut
# He: ~0.3 ← samma storleksordning genom hela nätet
# för stora: 1e+08 ← exploderar
I PyTorch initieras nn.Linear och nn.Conv2d med en variant av Kaiming redan från början — men när du skriver egna lager eller laddar in vikter manuellt är det ditt ansvar.
Behärskning innebär
- Förklarar varför initiering påverkar träningen
- Väljer Xavier eller He efter aktiveringsfunktion
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — Delving Deep into Rectifiers (He-init) — arXiv (öppen åtkomst; licens per artikel)
- Dive into Deep Learning (CC BY-SA 4.0) — CC BY-SA 4.0