D· AI-utvecklareLaboration· ca 75 min· container
Labb: ett neuronnät i ren NumPy — forward, backprop, gradientkontroll
Implementera forward pass, loss, backprop och träningsloop för ett tvålagersnät, verifiera gradienterna numeriskt och lära nätet XOR.
Lär ut: backpropagation · Kräver: neuronnatgradient-descent
Teori
z₁ = W₁x + b₁, a₁ = ReLU(z₁), z₂ = W₂a₁ + b₂, L = ½‖z₂ − y‖². Bakåt: δ₂ = z₂ − y; ∂L/∂W₂ = δ₂a₁ᵀ; δ₁ = (W₂ᵀδ₂) ⊙ 1[z₁>0]; ∂L/∂W₁ = δ₁xᵀ. Den numeriska kontrollen (L(w+ε) − L(w−ε))/2ε avslöjar varje fel i härledningen.
Deluppgifter
- forward — `forward(params, X)` returnerar (z1, a1, z2) för en batch X (n×d).
- backward — `backward(params, X, Y, cache)` returnerar gradienter för W1, b1, W2, b2 (medel över batchen).
- träna — `train(X, Y, hidden, lr, steps, seed)` tränar med gradient descent och returnerar params.
Evals: xor-loss (loss <= 0.05)
Logga in för att köra laborationen.
Förväntade resultat
Gradientkontrollen ger relativ skillnad < 1e-5 för alla parametrar. XOR-lossen efter 3000 steg < 0.05.
Vanliga fel
- ReLU-derivatan glömd → δ₁ = W₂ᵀδ₂ utan maskering (gradientkontrollen för W1 faller).
- Transponat fel: W₁ är h×d, så ∂L/∂W₁ = δ₁ᵀ-form beror på din layout — håll fast vid en.
- Medelvärde över batchen saknas → gradienten n gånger för stor.