Optimization Algorithm
Bir optimizasyon algoritması, eğitim sırasında kaybı en aza indirmek için modelin ağırlıklarını günceller. Gradyan inişi, momentum, Adam, AdamW, Muon ve kod örneği.
Optimizasyon algoritması ya da optimize edici, bir eğitim sürecinin kayıp fonksiyonunu azaltmak için model parametrelerini nasıl değiştirdiğini belirleyen kuraldır. Derin öğrenmede optimize edici, geri yayılım aracılığıyla kaybın her model ağırlığına göre gradyanını alır ve her ağırlığın ne kadar, hangi yönde değişeceğine karar verir. Optimize edici, öğrenme hızıyla birlikte eğitimin ne kadar hızlı yakınsayacağını, ne kadar kararlı olacağını, ne kadar bellek gerektireceğini ve çoğu zaman son modelin ne kadar iyi genelleyeceğini belirler.
Optimize Ediciler Nasıl Çalışır#
Neredeyse her derin öğrenme optimize edicisi, gradyan inişinin bir çeşididir: mini yığın üzerindeki kaybın gradyanı g hesaplanır, ardından ağırlıklar buna ters yönde küçük bir adım atar: w ← w − η·g. Optimize ediciler, adım atmadan önce g ile ne yaptıkları bakımından farklılaşır. Momentum yöntemleri, tutarlı kalan yönlerde hız kazanmak için gradyanların zaman içindeki ortalamasını alır. Uyarlamalı yöntemler, her parametrenin adımını gradyan büyüklüğünün hareketli tahminine böler. Muon, her ağırlık matrisinin güncellemesini bir bütün olarak dikleştirir. İkinci dereceden yöntemler eğriliği de kullanır; bu da her adım için daha iyi bilgi sağlar, ancak hesaplama maliyetini çok artırır. Evrimsel algoritmalar ve rastgele arama gibi hiç gradyan gerektirmeyen yöntemler, adayları deneyip en iyisini tutarak optimizasyon yapar:
Kayıp yüzeyi bazı yönlerde dik, bazılarında ise yumuşak kıvrımlara sahip olduğunda, güncelleme kuralı en çok önem kazanır. Dar bir vadide aynı başlangıç noktasından üç optimize edici çalıştırmak aradaki farkı gösterir:
import torch
# A long, narrow valley: f(w) = w1^2 + 50 * w2^2, with its minimum at (0, 0)
scale = torch.tensor([1.0, 50.0])
optimizers = {
"SGD": lambda p: torch.optim.SGD(p, lr=0.015),
"SGD + momentum": lambda p: torch.optim.SGD(p, lr=0.015, momentum=0.9),
"Adam": lambda p: torch.optim.Adam(p, lr=0.1),
}
for name, make_optimizer in optimizers.items():
w = torch.tensor([5.0, 1.0], requires_grad=True)
optimizer = make_optimizer([w])
# Same loss and starting point for every optimizer; only the update rule differs
for step in range(100):
loss = (scale * w**2).sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"{name:15s} f(w) after 100 steps: {(scale * w**2).sum().item():.6f}")Düz SGD, 0.056531 değerinde durur; çünkü dik w2 yönü öğrenme hızını sınırlar: 0.02'nin üzerindeki herhangi bir hız, w2'nin her adımda daha fazla aşmasına neden olur ve 0.021'de kayıp 100 adım içinde yaklaşık 9,5 milyara yükselir. Bu sınır altında, yumuşak w1 yönündeki ilerleme yavaştır. Momentum, w1 boyunca hız kazanarak 0.000216 değerine ulaşır; Adam ise her koordinata kendi adım boyutunu vererek 0.001953 değerine ulaşır.
Yaygın Optimizasyon Algoritmaları#
- Stokastik gradyan inişi (SGD): Mini yığın gradyanının ters yönünde adım atar. 0.9 momentumla, önemli evrişimli ağların çoğunu eğitmiştir ve parametre başına bir ek değer depolar.
- AdaGrad ve RMSProp: Her parametrenin adımını, gradyan karelerinin geçmişine göre ölçeklendirir. AdaGrad, adımı gradyan karelerinin sürekli büyüyen hareketli toplamının kareköküne böler; bu yüzden adımları eğitim boyunca küçülür. RMSProp ise üstel olarak azalan bir ortalama kullanır ve bu sayede adım boyutları değişimlere duyarlı kalır.
- Adam: Momentumu RMSProp tarzı ölçeklendirmeyle birleştirir ve her iki hareketli ortalamayı da sıfırdan başlamalarına göre düzeltir. Varsayılan değerleri olan β1 = 0.9 ve β2 = 0.999 ile 0.001 öğrenme hızı birçok problemde işe yarar.
- AdamW: Ağırlıkları uyarlamalı gradyan ölçeklendirmesiyle değil, doğrudan küçülten ayrıştırılmış ağırlık azalması kullanan Adam'dır. Transformer'lar ve büyük dil modelleri (LLM) için standart optimize edicidir.
- Muon: Her 2B ağırlık matrisinin momentum güncellemesini Newton–Schulz yinelemeleriyle dikleştirir ve parametre başına tek bir durum arabelleği tutar. Moonshot AI, yöntemi LLM ön eğitiminde ölçeklendirdi.
- L-BFGS: Yakın geçmişteki gradyanlardan bir eğrilik tahmini oluşturan yarı Newton yöntemidir. Düzgün, tam yığınlı problemlerde birkaç adımda yakınsar; gürültülü mini yığın gradyanları ise bu yöntemi büyük ağlar için uygun olmaktan çıkarır.
PyTorch'un optimize edici paketi, torch.optim.Muon dahil tüm bu yöntemleri ve bunlardan herhangi biriyle çalışan öğrenme hızı zamanlayıcılarını uygular.
Optimize Edici ve İlgili Terimler#
- Kayıp fonksiyonu: Optimize edicinin en aza indirdiği amaçtır; örneğin sınıflandırmada çapraz entropi, regresyonda ortalama karesel hata.
- Öğrenme hızı zamanlayıcısı: Herhangi bir optimize edicinin üzerine eklenerek ısınma, adım adım azaltma veya kosinüs tavlamasıyla eğitim boyunca η adım boyutunu ayarlar.
- Hiperparametre ayarı: Optimize edici, öğrenme hızı ve yığın boyutu gibi ayarların dıştan yürütülen aramasıdır; her aday tam ya da kısmi bir eğitim çalıştırması gerektirir. Bayesçi optimizasyon ve evrimsel arama gibi gradyansız yöntemler bu işi yapar; çünkü doğrulama puanının optimize edici gibi tercihlere göre gradyanı alınamaz.
Optimize Edici Seçimi#
Optimize edici ve öğrenme hızı birlikte seçilir; çünkü her optimize edicinin kendi çalışma aralığı vardır: momentumlu SGD genellikle 0.01 ile 0.1 arasında, Adam ailesindeki optimize ediciler ise yaklaşık 0.001 ile başlar. Ultralytics YOLO eğitimi bu seçimi otomatik yapar: Varsayılan optimizer="auto", lr0 değerini yok sayar ve 10.000 iterasyona kadar süren çalıştırmalarda sınıf sayısına göre ayarlanmış öğrenme hızıyla AdamW'yi; daha uzun zamanlamalarda ise yayımlanan YOLO26 ağırlıklarını eğitmek için kullanılan SGD ve Muon hibriti MuSGD'yi seçer. Optimize edicinin adını belirtmek lr0 değerini etkinleştirir:
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26n modeli yükle
model = YOLO("yolo26n.pt")
# SGD'yi açıkça seç; lr0 yalnızca optimizer değeri "auto" olmadığında uygulanır
results = model.train(data="coco8.yaml", epochs=5, optimizer="SGD", lr0=0.01)optimizer="SGD" kullanıldığında eğitici, Nesterov momentumunu da etkinleştirir ve katsayı olarak varsayılan değeri 0.937 olan momentum bağımsız değişkenini kullanır.










