Garfield
YZF Admin
Adam optimizasyonu, yapay sinir ağlarını eğitirken ağırlıkları kayıp değerini azaltacak yönde güncelleyen bir optimizasyon algoritmasıdır. Gradyanın yalnızca anlık değerini değil, geçmiş gradyanların ortalamasını ve karelerinin ortalamasını da izlediği için öğrenme hızını otomatik olarak ayarlayabilir. Bu nedenle özellikle derin öğrenme modellerinde iyi bir başlangıç seçeneğidir; ancak her veri kümesinde en iyi sonucu vereceği garanti edilmez. Kullanımda temel yaklaşım, uygun bir öğrenme oranıyla Adam’ı başlatmak, eğitim ve doğrulama kaybını izlemek, ardından gerekirse öğrenme oranını veya düzenlileştirme ayarlarını değiştirmektir.
Bir modelin ağırlıkları
Adam iki hareketli ortalama tutar:
İlk adımlarda hareketli ortalamalar sıfıra yakın başladığı için Adam bunları yanlılık düzeltmesiyle düzenler:
Son güncelleme genel olarak şu biçimdedir:
Burada
Varsayımsal olarak tek bir ağırlığın gradyanı ilk eğitim adımında
İlk moment:
İkinci moment:
İlk adımdaki yanlılık düzeltmesi, bu değerleri başlangıçtaki sıfır etkisinden arındırır. Böylece Adam gradyanın yönünü kullanırken güncelleme büyüklüğünü de gradyanın geçmiş ölçeğine göre ayarlar. Bu ilk adımda pozitif gradyan ağırlığı azaltır. Sonraki adımlarda yön, geçmişi içeren düzeltilmiş birinci momente bağlıdır; anlık gradyanın işareti değişse de güncelleme yönü hemen değişmeyebilir. Bu işlem bütün ağırlıklar için tekrarlanır.
Bu örnek, Adam’ın kayıp fonksiyonunu kendi başına değiştirmediğini gösterir. Algoritma yalnızca model ağırlıklarının nasıl güncelleneceğini belirler; model mimarisi, veri kalitesi, kayıp fonksiyonu ve mini yığın büyüklüğü hâlâ sonucu etkiler.
Aşağıdaki örnek, PyTorch kullanan varsayımsal bir sınıflandırma modelinde Adam’ın en küçük kullanımını gösterir. Model, kaybı hesaplar, gradyanları temizler, geriye yayılım yapar ve ağırlıkları günceller:
Bu kod çalıştırıldığında çıktı, o mini yığın için hesaplanan kayıp değeridir. Tek bir adımda kaybın azalması modelin genelleme yaptığını kanıtlamaz; eğitim boyunca eğitim kaybı ve daha önce görülmemiş doğrulama verisindeki kayıp birlikte izlenmelidir.
Adam, gradyanların ölçekleri parametreler arasında farklı olduğunda ve eğitim sürecinde hızlı bir başlangıç gerektiğinde kullanışlıdır. Özellikle seyrek gradyanlar, değişken özellik ölçekleri veya derin ağlarda başlangıç optimizasyonu için pratik olabilir.
Buna karşılık Adam’ın eğitim kaybını hızlı düşürmesi, doğrulama başarımının da en iyi olacağı anlamına gelmez. Bazı görevlerde SGD ve momentum, özellikle son aşamadaki genelleme bakımından daha iyi sonuç verebilir. Bu nedenle seçim yalnızca eğitim kaybının ilk birkaç adımına göre yapılmamalıdır.
Tablodaki ayrım, Adam’ın iyi veya kötü diye kesin sınıflandırılamayacağını gösterir. Sonuç; veri kümesine, model yapısına, öğrenme oranına, yığın büyüklüğüne ve düzenlileştirme yöntemlerine bağlıdır. Başlangıçta sık kullanılan bir öğrenme oranı 0,001 olsa da bu değer evrensel bir kural değildir; kayıp eğrisi ve doğrulama başarımıyla kontrol edilmelidir.
Eğitim kaybı düzenli biçimde azalıyor, doğrulama kaybı da azalıyor ve doğrulama başarımı iyileşiyorsa Adam’ın mevcut ayarları görev için işe yarıyor olabilir. Eğitim kaybı azalırken doğrulama kaybı artıyorsa model eğitim verisine fazla uyuyor olabilir; daha erken durdurma, düzenlileştirme, veri artırma veya daha küçük bir model değerlendirilmelidir.
Kayıp baştan itibaren çok dalgalıysa öğrenme oranını azaltmak ilk denenecek değişikliklerden biridir. Kayıp neredeyse hiç değişmiyorsa öğrenme oranı çok düşük olabilir; bunun yanında gradyanların sıfıra yaklaşması, hatalı etiketler, uygun olmayan veri ölçekleri veya modelin ileri geçişindeki bir hata da kontrol edilmelidir. Yalnızca optimizer’ı değiştirmek bu sorunların hepsini çözmez.
Adam kullanırken öğrenme oranı çizelgeleme, ağırlık çürümesi ve erken durdurma gibi yöntemler ayrıca uygulanabilir. Ancak her değişikliği aynı anda yapmak yerine bir ayarı değiştirip doğrulama sonucunu karşılaştırmak, hangi değişikliğin etkili olduğunu anlamayı kolaylaştırır.
Adam nasıl çalışır?
Bir modelin ağırlıkları
θ, kayıp fonksiyonunun gradyanına göre güncellenir. Klasik gradyan inişinde her ağırlık için aynı öğrenme oranı kullanılırken Adam, her parametre için ayrı bir güncelleme büyüklüğü hesaplar.Adam iki hareketli ortalama tutar:
- Birinci moment: Gradyanların yönünü ve ortalama büyüklüğünü izler. Bu, momentum gibi davranarak güncellemelerin daha kararlı olmasına yardım eder.
- İkinci moment: Gradyanların karelerini izler. Büyük gradyan alan parametrelerde adımın küçülmesini, küçük gradyan alanlarda ise göreli olarak daha etkili güncelleme yapılmasını sağlar.
g_t olmak üzere Adam’ın temel hesaplaması şöyledir:m_t = β_1 m_(t-1) + (1-β_1)g_tv_t = β_2 v_(t-1) + (1-β_2)g_t^2İlk adımlarda hareketli ortalamalar sıfıra yakın başladığı için Adam bunları yanlılık düzeltmesiyle düzenler:
m_hat_t = m_t/(1-β_1^t)v_hat_t = v_t/(1-β_2^t)Son güncelleme genel olarak şu biçimdedir:
θ_t = θ_(t-1) - α × m_hat_t/(sqrt(v_hat_t)+ε)Burada
α öğrenme oranı, β_1 ve β_2 hareketli ortalamaların etkisini, ε ise sıfıra bölme riskini azaltan küçük sabiti belirtir.Küçük bir sayısal örnek
Varsayımsal olarak tek bir ağırlığın gradyanı ilk eğitim adımında
g_1=0,8, öğrenme oranı α=0,001, β_1=0,9 ve β_2=0,999 olsun. Başlangıçta m_0=0 ve v_0=0 kabul edilir.İlk moment:
m_1 = 0,9×0 + 0,1×0,8 = 0,08İkinci moment:
v_1 = 0,999×0 + 0,001×0,8^2 = 0,00064İlk adımdaki yanlılık düzeltmesi, bu değerleri başlangıçtaki sıfır etkisinden arındırır. Böylece Adam gradyanın yönünü kullanırken güncelleme büyüklüğünü de gradyanın geçmiş ölçeğine göre ayarlar. Bu ilk adımda pozitif gradyan ağırlığı azaltır. Sonraki adımlarda yön, geçmişi içeren düzeltilmiş birinci momente bağlıdır; anlık gradyanın işareti değişse de güncelleme yönü hemen değişmeyebilir. Bu işlem bütün ağırlıklar için tekrarlanır.
Bu örnek, Adam’ın kayıp fonksiyonunu kendi başına değiştirmediğini gösterir. Algoritma yalnızca model ağırlıklarının nasıl güncelleneceğini belirler; model mimarisi, veri kalitesi, kayıp fonksiyonu ve mini yığın büyüklüğü hâlâ sonucu etkiler.
Kod içinde temel kullanım
Aşağıdaki örnek, PyTorch kullanan varsayımsal bir sınıflandırma modelinde Adam’ın en küçük kullanımını gösterir. Model, kaybı hesaplar, gradyanları temizler, geriye yayılım yapar ve ağırlıkları günceller:
Python:
import torch
import torch.nn as nn
model = nn.Linear(4, 2)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
inputs = torch.randn(8, 4)
targets = torch.randint(0, 2, (8,))
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()
print("Kayıp:", loss.item())
Bu kod çalıştırıldığında çıktı, o mini yığın için hesaplanan kayıp değeridir. Tek bir adımda kaybın azalması modelin genelleme yaptığını kanıtlamaz; eğitim boyunca eğitim kaybı ve daha önce görülmemiş doğrulama verisindeki kayıp birlikte izlenmelidir.
Adam ne zaman tercih edilir?
Adam, gradyanların ölçekleri parametreler arasında farklı olduğunda ve eğitim sürecinde hızlı bir başlangıç gerektiğinde kullanışlıdır. Özellikle seyrek gradyanlar, değişken özellik ölçekleri veya derin ağlarda başlangıç optimizasyonu için pratik olabilir.
Buna karşılık Adam’ın eğitim kaybını hızlı düşürmesi, doğrulama başarımının da en iyi olacağı anlamına gelmez. Bazı görevlerde SGD ve momentum, özellikle son aşamadaki genelleme bakımından daha iyi sonuç verebilir. Bu nedenle seçim yalnızca eğitim kaybının ilk birkaç adımına göre yapılmamalıdır.
| Durum | İlk tercih için yorum |
|---|---|
| Hızlı ve pratik başlangıç | Adam genellikle uygun bir başlangıç seçeneğidir. |
| Genelleme başarımı kritik | Adam ile SGD veya momentumlu SGD doğrulama verisinde karşılaştırılmalıdır. |
| Eğitim kaybı dalgalanıyor | Öğrenme oranı fazla yüksek olabilir; önce bu değer azaltılmalıdır. |
| Eğitim kaybı düşüyor, doğrulama kaybı yükseliyor | Aşırı öğrenme, veri farkı veya yetersiz düzenlileştirme incelenmelidir. |
Öğrenme sırasında sonucu nasıl yorumlamalısınız?
Eğitim kaybı düzenli biçimde azalıyor, doğrulama kaybı da azalıyor ve doğrulama başarımı iyileşiyorsa Adam’ın mevcut ayarları görev için işe yarıyor olabilir. Eğitim kaybı azalırken doğrulama kaybı artıyorsa model eğitim verisine fazla uyuyor olabilir; daha erken durdurma, düzenlileştirme, veri artırma veya daha küçük bir model değerlendirilmelidir.
Kayıp baştan itibaren çok dalgalıysa öğrenme oranını azaltmak ilk denenecek değişikliklerden biridir. Kayıp neredeyse hiç değişmiyorsa öğrenme oranı çok düşük olabilir; bunun yanında gradyanların sıfıra yaklaşması, hatalı etiketler, uygun olmayan veri ölçekleri veya modelin ileri geçişindeki bir hata da kontrol edilmelidir. Yalnızca optimizer’ı değiştirmek bu sorunların hepsini çözmez.
Adam kullanırken öğrenme oranı çizelgeleme, ağırlık çürümesi ve erken durdurma gibi yöntemler ayrıca uygulanabilir. Ancak her değişikliği aynı anda yapmak yerine bir ayarı değiştirip doğrulama sonucunu karşılaştırmak, hangi değişikliğin etkili olduğunu anlamayı kolaylaştırır.