Nov C: En neuron med LeakyReLU aktivering
LeakyReLU-neuron: forward pass, gradient, reverse-mode autodiff og tilfældig initialisering i PyTorch.
LeakyReLU er en ofte brugt aktiveringsfunktion i neurale netværk:
hvor $\alpha$ er et lille positivt tal. (Se PDF for grafen ved $\alpha=0.1$.)
En neuron med tre input og LeakyReLU-aktivering:
I de følgende to spørgsmål antager vi $\alpha=0.1$, input $x_1=1$, $x_2=2$, $x_3=3$, og vægte $w_0=-10$, $w_1=w_2=w_3=1$.
Beregn neuronens output $f$.
Vis svar Skjul svar
$-0.4$
Beregn gradienten af funktionen $f$ med hensyn til modellens parametre.
Vis svar Skjul svar
Med $z=\sum_{i=0}^{3} w_i x_i$ (hvor $x_0=1$) og $z<0$ er $\partial\mathrm{LeakyReLU}(z)/\partial z=0.1$, så
$[0.1,\,0.1,\,0.2,\,0.3]^\top$
I PyTorch kan gradienten findes således:
linear = torch.nn.Linear(3, 1)
activation = torch.nn.LeakyReLU(0.1)
net = torch.nn.Sequential(linear, activation)
x = torch.tensor([1., 2., 3.])
f = net(x)
f.backward()
net indeholder et lineært lag og LeakyReLU. Det lineære lags bias og weight
svarer til $[w_0]$ og $[w_1,w_2,w_3]$.
Beskriv hvad der foregår, når funktionen f.backward() kaldes i koden ovenfor. Hvad beregnes og hvordan?
Vis svar Skjul svar
Når f.backward() kaldes, udføres reverse mode automatic differentiation på den beregningsgraf der underligger variabelen $f$. Herved beregnes gradienten af $f$ med hensyn til alle modelparametre.
Reverse-mode AD → gradient mht. alle parametre
Hvis vi kører ovenstående kode og undersøger linear.bias.grad og linear.weight.grad, så vil de ikke nødvendigvis svare overens med gradienten fra C.2. Hvorfor ikke, og hvilke resultater er mulige?
Vis svar Skjul svar
Når koden køres, initialiseres parametrene $w_0,\ldots,w_3$ med tilfældige værdier (PyTorch-default), så det er ukendt om $z$ er positiv eller negativ.
- Hvis $z<0$: $\nabla f=[0.1,\,0.1,\,0.2,\,0.3]^\top$ (som i C.2).
- Hvis $z\geq 0$: $\partial\mathrm{LeakyReLU}/\partial z=1$, så $\nabla f=[1,\,1,\,2,\,3]^\top$.
Disse er de to eneste muligheder.
$[0.1,0.1,0.2,0.3]^\top$ eller $[1,1,2,3]^\top$