DAI-utvecklareLaboration· ca 50 min· i webbläsaren
Labb: gradient descent från grunden
Implementera gradient descent för en enkel loss och för linjär regression, och se effekten av inlärningstakten.
Teori
w ← w − η·L'(w). För L(w) = (w−3)² är L'(w) = 2(w−3). För linjär regression med MSE är gradienten m.a.p. k: (2/n)Σ(kxᵢ+m−yᵢ)xᵢ och m.a.p. m: (2/n)Σ(kxᵢ+m−yᵢ).
Deluppgifter
- steg —
gd_1d(w0, eta, steg)returnerar w eftersteguppdateringar på L(w) = (w−3)². - gradient för linjen —
grad_linje(k, m, xs, ys)returnerar (dL/dk, dL/dm) för MSE. - träna linjen —
trana_linje(xs, ys, eta, steg)returnerar (k, m) efter gradient descent från (0, 0).
Godkänt när: mse <= 1
Startkoden
körs i din webbläsaredef gd_1d(w0, eta, steg):
# TODO: L(w) = (w-3)^2, L'(w) = 2(w-3)
...
def grad_linje(k, m, xs, ys):
# TODO: MSE-gradient: (2/n) sum(e*x), (2/n) sum(e) med e = k*x + m - y
...
def trana_linje(xs, ys, eta=0.002, steg=20000):
# TODO: starta i k = m = 0, uppdatera med grad_linje
...
Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.
Prova diagnosenSkapa konto gratisFörväntade resultat
gd_1d(0, 0.25, 3) ≈ 2.625; gd_1d(0, 0.5, 1) = 3.0; tränad linje på glassdatan ger MSE < 1 (facit k=3, m=−25 ger 0).
Vanliga fel
- Tecknet: w − η·grad, inte plus.
- Glömmer faktorn 2/n i MSE-gradienten (fungerar ändå med annan η, men testet kräver exakt gradient).
- För stor η på glassdatan (x ≈ 20) exploderar — normalisera eller använd liten η (≈0,002).