Adam
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 71/78
- 5 dk
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.1Bu ö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
import torch
# buraya yazÖrnek çözüm
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.
opt = torch.optim.Adam(params, lr=1e-3, ____=(0.9, 0.999))
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 |