SGD, Momentum, Adam, AdamW — hangisi ne zaman?
Önce bunlara göz at
30 saniyede özet · Ne öğreneceksin
Bir dağın zirvesinden vadiye inmeye çalıştığını düşün. Gözlerin bağlı, sadece ayağının altındaki eğimi hissedebiliyorsun. Hangi adımları atmalısın ki en hızlı ve güvenli şekilde vadiye ulaşasın? İşte optimizasyon algoritmaları tam da bu soruya cevap veriyor — kayıp yüzeyinde en dik iniş yolunu bulmak için.
Tek mini-batch üzerinden gradyan hesaplar ve parametre günceller.
Geçmiş gradyanların üstel hareketli ortalamasını mevcut güncellemeye ekler.
vₜ = β·vₜ₋₁ + (1-β)·∇L
θₜ = θₜ₋₁ - α·vₜv hız vektörü, β momentum katsayısı. Gradyanlar aynı yönü gösterirse hız birikir, zıt yönlerde ise frenlenir.
Her parametre için ayrı öğrenme oranı tutar.
AdaGrad'ın ölü öğrenme oranı sorununu çözer.
sₜ = ρ·sₜ₋₁ + (1-ρ)·(∇L)²
θₜ = θₜ₋₁ - α·∇L / √(sₜ + ε)ρ genelde 0.99. ε (1e-8) sıfıra bölmeyi önler. s biriken gradyan karesi — yakın geçmişe daha fazla ağırlık verir.
Momentum + RMSProp birleşimi.
mₜ = β₁·mₜ₋₁ + (1-β₁)·∇L
vₜ = β₂·vₜ₋₁ + (1-β₂)·(∇L)²
m̂ₜ = mₜ/(1-β₁ᵗ), v̂ₜ = vₜ/(1-β₂ᵗ)
θₜ = θₜ₋₁ - α·m̂ₜ/√(v̂ₜ + ε)β₁=0.9, β₂=0.999 varsayılan. Bias correction (1-βᵗ) ilk adımlardaki düşük tahminleri düzeltir.
Formül → Kod Karşılığı
∇L→param.gradloss'un gradyanıβ₁→betas[0]=0.91. momentum katsayısıβ₂→betas[1]=0.9992. momentum katsayısıα→lröğrenme hızıε→eps=1e-8sıfıra bölünme korumasıθₜ→param.data (güncellendi)yeni parametre değeriAdam'da L2 regularization gradyana eklenir — bu yanlış bir uygulama.
💡Başlangıç için Adam veya AdamW kullan. Eğer model overfit yapıyorsa ve daha iyi genelleme istiyorsan, SGD + Momentum'a geç. Kaggle yarışmalarında son fine-tuning genelde SGD ile yapılır.
SGD + Momentum
Adam / AdamW
PyTorch optimizör karşılaştırması
| 1 | import torch |
| 2 | import torch.nn as nn |
| 3 | import torch.optim as optim |
| 4 | |
| 5 | model = nn.Linear(10, 1) |
| 6 | criterion = nn.MSELoss() |
| 7 | |
| 8 | # Farklı optimizörler |
| 9 | opt_sgd = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) |
| 10 | opt_adam = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999)) |
| 11 | opt_adamw = optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01) |
| 12 | |
| 13 | # Eğitim döngüsü (örnek) |
| 14 | optimizer = opt_adamw # tercihini seç |
| 15 | for epoch in range(100): |
| 16 | x = torch.randn(32, 10) |
| 17 | y = torch.randn(32, 1) |
| 18 | |
| 19 | optimizer.zero_grad() |
| 20 | loss = criterion(model(x), y) |
| 21 | loss.backward() |
| 22 | optimizer.step() |
⚠️Adam'ın β₂ değerini değiştirmeden önce iki kez düşün. 0.999'dan küçük değerler (örn. 0.99) bazı durumlarda eğitimi bozabilir. Transformer'larda warm-up + cosine annealing scheduler kullanmak genelde daha etkili.
⛷️Kayak Pisti Analojisi
SGD: Gözleri bağlı kayakçı, her adımda sadece ayağının altını hisseder. Momentum: Kayakçı hız kazanır, virajlarda savrulmaz. Adam: Kayakçının hem pusulası (momentum) hem altimetre (adaptif LR) var — her koşula uyum sağlar.
✦ Quiz
AdaGrad'ın ana dezavantajı nedir?
✦ Quiz
AdamW'nin Adam'dan temel farkı nedir?
Bu konunun pratiği
Bu konuyu interaktif dene
Az önce okuduğun kavramın parametrelerini değiştir, etkisini canlı gör