Adam Optimizer
Adam, momentumu parametre başına adım boyutlarıyla birleştirir ve bu boyutları yakın geçmişteki gradyan büyüklüklerine göre ölçekler. Güncelleme kuralı, varsayılan değerler, AdamW ve Adam ile SGD karşılaştırması.
Uyarlamalı Moment Tahmini'nin kısaltması olan Adam optimize edicisi, sinir ağlarını eğitmek için kullanılan ve her parametreye kendi uyarlamalı adım büyüklüğünü veren bir optimizasyon algoritmasıdır. Kingma ve Ba'nın Adam: Stokastik Optimizasyon için Bir Yöntem adlı çalışmasında tanıtılan yöntem, geçmiş gradyanların ve karelerinin hareketli ortalamalarını kullanarak stokastik gradyan inişini (SGD) geliştirir. İlk aşamalarda hızlı ilerlemesi ve esnek varsayılan ayarları, Adam'ı derin öğrenmede en yaygın başlangıç optimize edicisi hâline getirmiştir; AdamW varyantı ise dönüştürücüleri ve büyük dil modellerini eğitmek için standart tercihtir.
Adam Nasıl Çalışır#
Eğitim, her ağırlığın gradyanına göre tekrar tekrar adım atarak bir kayıp fonksiyonunu en aza indirir. Standart SGD, her gradyanı aynı öğrenme oranıyla çarpar. Adam, her parametre için iki ek değer tutar ve her adımda bu değerleri mevcut gradyandan günceller: t ve g.
- Birinci moment (momentum):
m = β1·m + (1 − β1)·g; güncellemenin tutarlı bir yönde ilerlemesini sağlayan, üstel olarak azalan gradyan ortalaması. - İkinci moment:
v = β2·v + (1 − β2)·g²; her parametrenin gradyanlarının genellikle ne kadar büyük olduğunu izleyen, karelenmiş gradyanların azalan ortalaması. - Yanlılık düzeltmesi:
m̂ = m / (1 − β1^t)vev̂ = v / (1 − β2^t); her iki ortalamanın da sıfırdan başlamasını telafi eder. - Güncelleme:
θ = θ − lr · m̂ / (√v̂ + ε).
Çalışmanın varsayılan değerleri, PyTorch'un torch.optim.Adam uygulamasında da kullanılır: lr = 0.001, β1 = 0.9, β2 = 0.999 ve ε = 1e-8. √v̂ ile bölmek, her adımı parametrenin tipik gradyan büyüklüğüne göre normalleştirir; böylece gradyanlar ister çok küçük ister çok büyük olsun adımlar öğrenme oranına yakın kalır. Ayrıca m̂ içinde pozitif ve negatif gradyanların birbirini götürdüğü gürültülü yönlerde adımlar küçülür. Aşağıdaki kod parçası, gradyan ölçekleri 1.000 kat farklı olan iki parametrede SGD ve Adam'ın ilk adımını karşılaştırır:
import torch
# Two parameters whose gradients differ in scale by 1,000x
scale = torch.tensor([1000.0, 1.0])
for name, optimizer_cls in [("SGD", torch.optim.SGD), ("Adam", torch.optim.Adam)]:
w = torch.zeros(2, requires_grad=True)
optimizer = optimizer_cls([w], lr=0.001)
loss = (scale * w).sum() # gradient is [1000, 1]
loss.backward()
optimizer.step()
print(f"{name} first step: {[round(v, 4) for v in w.tolist()]}")SGD, birinci parametreyi -1,0'a, ikinciyi -0,001'e taşır; gradyanları izleyen bu fark 1.000 kattır. Adam ise normalleştirilmiş adımı ham büyüklüğü yerine gradyanın yönüne ve tutarlılığına bağlı olduğundan her iki parametreyi de tam olarak öğrenme oranı olan -0,001 kadar hareket ettirir.
Adam ve AdamW#
Yaygın uygulamasında Adam, bir düzenlileştirme türü olan ağırlık çürümesini gradyana eklenen bir L2 cezası olarak uygular. Bu ceza da diğer her şeyle birlikte √v̂ değerine bölündüğünden, büyük gradyanlı ağırlıklar çok az düzenlileştirilir. Loshchilov ve Hutter'ın ayrıştırılmış ağırlık çürümesi yöntemi, uyarlamalı güncellemeden bağımsız olarak her adımda ağırlıkları doğrudan küçülterek bu sorunu çözer. Makalenin deneylerinde ortaya çıkan AdamW, görüntü sınıflandırmada Adam'dan daha iyi genelleme sağladı ve torch.optim.AdamW olarak kullanılabilir.
Adam ve SGD Karşılaştırması#
Momentumlu SGD, tek bir genel öğrenme oranı kullanır ve her parametre için bir arabellek saklar; Adam ise 32 bit duyarlıkta parametre başına iki değer, yani 8 bayt saklar. Bu da 7 milyar parametreli bir model için 56 GB optimize edici durumu demektir. Adam genellikle başlangıçta daha hızlı ilerler, öğrenme oranına daha az duyarlıdır ve dönüştürücüleri SGD'den çok daha güvenilir biçimde eğitir. İyi ayarlanmış SGD, evrişimli görüntü modellerinde çoğu zaman aynı veya daha iyi son doğruluğa ulaşır. Wilson ve diğerleri, test ettikleri görüntü sınıflandırma ve dil görevlerinde uyarlamalı yöntemlerin çoğu zaman SGD'den daha kötü genelleme yaptığını buldu.
Ultralytics YOLO eğitimi bu dengeyi yansıtır: Varsayılan optimizer="auto", sınıf sayısına göre ayarlanmış bir başlangıç öğrenme oranıyla, 10.000 iterasyona kadar olan çalışmalarda AdamW'yi seçer; daha uzun programlarda ise SGD ile Muon'un hibriti olan MuSGD'ye geçer. Optimize ediciyi açıkça ayarlarken öğrenme oranını da ayarlaman gerekir; çünkü varsayılan lr0=0.01, SGD için uygundur ve olağan Adam oranının on katıdır.
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26n modeli yükle
model = YOLO("yolo26n.pt")
# AdamW ile ve Adam'a uygun bir başlangıç öğrenme oranı kullanarak eğit
results = model.train(data="coco8.yaml", epochs=5, optimizer="AdamW", lr0=0.001)YOLO26 Adam ailesinden bir optimize ediciyle eğitildiğinde, momentum argümanı (varsayılan 0.937) β1 değerini belirler; β2 ise 0.999 değerinde sabit kalır.
Adam ve İlgili Optimize Ediciler#
- AdaGrad: Her adımı geçmiş tüm gradyanların kareleri toplamının kareköküne böler; dolayısıyla adım büyüklükleri yalnızca küçülür. Bu yöntem seyrek özellikler için uygundur ancak uzun eğitim çalışmalarını yavaşlatır.
- RMSProp: AdaGrad'ın hareketli toplamını, karelenmiş gradyanların üstel olarak azalan ortalamasıyla değiştirir. Adam, esasen momentum ve yanlılık düzeltmesi eklenmiş RMSProp'tur.
- Muon: Gizli katmanların 2B ağırlık matrisleri için kullanılan bu optimize edici, her momentum güncellemesini Newton–Schulz iterasyonlarıyla ortogonalleştirir ve parametre başına tek bir durum arabelleği tutar; bu, Adam'ın optimize edici durumunun yarısıdır.










