CodeBlanks Logo Icon CodeBlanks

Adam

Adam, uyarlanır öğrenme hızıyla gradyanları günceller.

Adam

Adam, her parametre için gradyanın hareketli ortalamasını (m, momentum) ve karesinin hareketli ortalamasını (v) tutar; adımı m / √v ile ölçekler. Böylece her parametre kendi ölçeğine uyarlanmış bir adım atar:

# m = β1·m + (1-β1)·g          (β1 = 0.9)
# v = β2·v + (1-β2)·g²         (β2 = 0.999)
# m̂ = m / (1-β1^t),  v̂ = v / (1-β2^t)   sapma düzeltmesi
# p -= lr · m̂ / (√v̂ + ε)

Adam az ayarla çoğu problemde iyi çalıştığı için derin öğrenmede en yaygın varsayılandır.

Ölçekten bağımsızlık

SGD'de adım gradyanla orantılıdır: kaybı 1000 ile çarpmak adımı 1000 kat büyütür. Adam'da ise oran sabit kalır:

for olcek in [1, 1000]:
    w = torch.tensor(0.0, requires_grad=True)
    opt = torch.optim.Adam([w], lr=0.1)
    (olcek * (w - 3) ** 2).backward()
    opt.step()
    print(olcek, round(w.item(), 4))   # ikisinde de 0.1

Bu özellik, farklı katmanların gradyanları çok farklı büyüklükte olduğunda Adam'ı kararlı yapar.

Uygulama Adam'ın ilk adımı

olcek 1 ve 1000 için (olcek * (w - 3) ** 2) kaybıyla tek bir Adam adımı (lr=0.1) at ve w'yi round(..., 4) ile yazdır. Ardından aynı deneyi SGD(lr=0.0001) ile yapıp iki w değerini aynı satırda yazdır.

Başlangıç kodu

model.py
import torch

# buraya yaz

Örnek çözüm

model.py
import torch

for olcek in [1, 1000]:
    w = torch.tensor(0.0, requires_grad=True)
    opt = torch.optim.Adam([w], lr=0.1)
    (olcek * (w - 3) ** 2).backward()
    opt.step()
    print(olcek, round(w.item(), 4))
sgd = []
for olcek in [1, 1000]:
    w = torch.tensor(0.0, requires_grad=True)
    opt = torch.optim.SGD([w], lr=0.0001)
    (olcek * (w - 3) ** 2).backward()
    opt.step()
    sgd.append(round(w.item(), 4))
print(*sgd)

Beklenen çıktı

1 0.1
1000 0.1
0.0006 0.6

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Adam'ın ilk adımının büyüklüğü yaklaşık nedir?

  • Gradyanın kendisi
  • lr (gradyanın ölçeğinden bağımsız) Doğru cevap
  • lr · gradyan
  • Sıfır

Açıklama: İlk adımda m̂ = g ve √v̂ = |g|; oran işarete indirgenir.

2 Adam'ın beta değerlerini ver.

Soru
opt = torch.optim.Adam(params, lr=1e-3, ____=(0.9, 0.999))
Cevap
opt = torch.optim.Adam(params, lr=1e-3, betas=(0.9, 0.999))

Açıklama: betas (β1, β2) ikilisidir.

3 Parçaları eşleştir.

Kavram Anlamı
m Gradyan ortalaması
v Kare ortalaması
sapma düzeltmesi İlk adımları dengeler
ε Sıfıra bölmeyi önler

İleri seviye bölümündeki tüm dersler