SGD, Momentum, Adam, AdamW — hangisi ne zaman?
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.
Adam'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?
Bağlantılı Konular