Sıradaki

Gradyan inişi adımı

Zorluk: Kolay

optimizasyon

L(w)=w2L(w) = w^2 kaybı (loss) için tek bir gradyan inişi (gradient descent) adımı atan step(w, lr) fonksiyonunu yaz. Adım şudur:

w←w−η⋅∇L(w),∇L(w)=2ww \leftarrow w - \eta \cdot \nabla L(w), \qquad \nabla L(w) = 2w

Formüldeki simgeler:

  • ww: ağırlık (weight).
  • ∇L(w)\nabla L(w): loss’un gradyanı (gradient).
  • η\eta: öğrenme oranı (learning rate). Kodda lr olarak geçer.

Yeni weight’i döndür.

Örnekler

Girdi: w = 4.0, lr = 0.1
Çıktı: 3.2

Girdi: w = 0.0, lr = 0.5
Çıktı: 0.0

Girdi: w = -2.0, lr = 0.25
Çıktı: -1.0

İpucu 1

Önce gradyanı hesapla. L(w)=w2L(w) = w^2 için ∇L(w)=2w\nabla L(w) = 2w.

İpucu 2

Loss’u azaltmak için weight’i gradyanın tersine taşı. Learning rate ile çarptığın gradyanı weight’ten çıkar.

Gereksinimler

  • w ve lr birer float’tır.
  • Yeni weight’i float olarak döndür.
  • Döngü kullanma: tek bir adım yeter.

Gradyan, loss’un en hızlı arttığı yönü gösterir. Loss’u azaltmak için ters yöne gidersin. Adımın büyüklüğünü learning rate belirler.

w=4w = 4 ve η=0,1\eta = 0{,}1 için:

  1. Gradyan 88 olur.
  2. Adım 0,80{,}8 olur.
  3. Yeni weight 3,23{,}2‘dir.

Daha fazlası için Gradyan inişi dersine bak.

Çözüm, gradyan adımını sırayla uygular:

  1. Gradyanı hesapla.
  2. Learning rate ile çarp.
  3. Sonucu weight’ten çıkar.
def step(w: float, lr: float) -> float:    grad = 2 * w    return w - lr * grad

Sık yapılan hata, gradyanı eklemektir (w + lr * grad). Bu, loss’u her adımda büyütür.

Bu problemde bir sorun mu var?

solution.py
def step(w: float, lr: float) -> float:    """L(w) = w**2 kaybı için bir gradyan inişi adımı atar ve yeni ağırlığı döndürür."""    # Kodunu buraya yaz.    return w

İçindekiler

Geri bildirim

Tür