Learning Rate
Öğrenme oranı, eğitim sırasında yapılan her ağırlık güncellemesini ölçeklendirir. Değerlerin neden çok yüksek olduğunda sapmaya, çok düşük olduğunda duraklamaya yol açtığı; ayrıca ısınma, azaltma çizelgeleri ve ayarlama.
Öğrenme oranı, her eğitim adımında bir modelin ağırlıklarının ne kadar değişeceğini belirleyen hiperparametredir. Gradyan inişi, kayıp fonksiyonunun gradyanını hesaplar. Gradyan, kaybın en hızlı arttığı yönü gösterir; her ağırlık da w ← w − η × gradyan kuralına göre güncellenir. Burada η (eta), öğrenme oranıdır. Adım büyüklüğü de aynı kavram için kullanılan başka bir addır; kodda genellikle lr olarak adlandırılır. İyi seçilmiş bir oran, sinir ağının iyi bir çözüme hızla yakınsamasını sağlar; kötü seçilmiş bir oran ise eğitimin ıraksamasına veya ağır ilerlemesine yol açar. Bu nedenle Leslie Smith'in döngüsel öğrenme oranları makalesi, öğrenme oranını ayarlanması gereken en önemli hiperparametre olarak niteler derin ağlar için.
Çok Yüksek, Çok Düşük ve Tam Kararında#
Öğrenme oranı, hız ile kararlılık arasında denge kurar:
- Çok yüksek: Her adım minimum noktayı aşar. Kayıp salınır, sıçrar veya NaN olana kadar artar; eğitim ıraksar.
- Çok düşük: Her adım ağırlıkları neredeyse hiç değiştirmez. Kayıp yavaş düşer, yakınsama için çok daha fazla epoch gerekir ve sabit bütçeli bir çalıştırma yetersiz öğrenmeyle sona erer.
- İyi seçilmiş: Kayıp düzenli biçimde düşer ve bir minimumun yakınında dengelenir.
Aşağıdaki PyTorch betiği, aynı başlangıç noktasından dört öğrenme oranı kullanarak w² kaybını en aza indirir:
import torch
# Minimize loss = w**2 (lowest at w = 0) from the same start with four learning rates
for lr in (0.01, 0.1, 0.9, 1.1):
w = torch.tensor(5.0, requires_grad=True)
optimizer = torch.optim.SGD([w], lr=lr)
path = []
for step in range(20):
optimizer.zero_grad()
loss = w**2
loss.backward()
optimizer.step() # w = w - lr * gradient
path.append(w.item())
print(f"lr={lr}: first steps {[round(v, 2) for v in path[:3]]}, after 20 steps w={path[-1]:.3f}")0.01'de ağırlık 20 adımda 5'ten yalnızca 3.338'e iner; 0.1'de ise 0.058'e ulaşır. 0.9'da işareti her adımda değişir (−4.0, 3.2, −2.56), ancak yine de 0.058'e yakınsar. 1.1'de ise her adım daha fazla aşar ve ağırlık 191.688'e çıkar. İkinci dereceden bir fonksiyonda gradyan inişi, yalnızca öğrenme oranı kaybın eğriliğinin, yani ikinci türevinin, 2'ye bölümünden küçük olduğunda kararlı kalır. w²'nin eğriliği 2 olduğundan buradaki sınır tam olarak 1.0'dır; 0.5 oranı minimuma tek adımda ulaşır. Gerçek bir ağda kaybın en keskin yönü aynı türden sınırı belirler. Bu nedenle bir model veya toplu iş boyutu için işe yarayan oran, başka birinde ıraksamaya neden olabilir.
Öğrenme Oranı Zamanlamaları#
Eğitimde başlangıçtan bitişe kadar tek bir oran nadiren kullanılır. Zamanlama, oranı zaman içinde değiştirir:
- Isınma: Küçük bir oranla başlar ve ilk birkaç epoch veya yineleme boyunca oranı kademeli olarak artırır; böylece ilk yinelemelerdeki büyük ve düzensiz gradyanların eğitimi istikrarsızlaştırmasını önler.
- Basamaklı azaltma: Oranı belirli epoch'larda veya doğrulama kaybı plato yaptığında, genellikle 10 gibi sabit bir katsayıya böler.
- Doğrusal ve kosinüs azaltma: Oranı, küçük bir son değere doğru yumuşakça düşürür. Kosinüs tavlaması yarım kosinüs dalgasını izler; sıcak başlangıçlı yeniden başlatma varyantı ise her yeni döngünün başında oranı yeniden yüksek değere çıkarır.
- Döngüsel ve tek döngülü politikalar: Eğitim sırasında oranı alt ve üst sınırlar arasında değiştir.
Büyük başlangıç adımları ağırlıkları hızla iyi bir bölgeye taşır; küçük son adımlar ise ağırlıkların etrafında zıplamak yerine minimum noktaya yerleşmesini sağlar. YOLO26 Ultralytics'te eğitim lr0 ile başlar, warmup_epochs boyunca (varsayılan olarak 3) ısınır ve doğrusal olarak lr0 * lrf değerine ya da cos_lr=True ile kosinüs eğrisi boyunca azalır. Varsayılan optimizer="auto" ile eğitici hem iyileştiriciyi hem de başlangıç oranını kendi seçer; 10.000 iterasyondan uzun çalıştırmalarda 0.01 değerinde MuSGD, diğer durumlarda ise sınıf sayısına göre ayarlanmış oranla AdamW kullanır. Bu nedenle lr0 yalnızca iyileştirici açıkça ayarlandığında geçerlidir:
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26 nano modeli yükle
model = YOLO("yolo26n.pt")
# Açıkça bir iyileştirici belirtmek lr0'ın uygulanmasını sağlar; oran kosinüs boyunca lr0 * lrf değerine düşer
results = model.train(data="coco8.yaml", epochs=10, optimizer="SGD", lr0=0.01, lrf=0.01, cos_lr=True)Başlangıç Değeri Seçme#
Yaygın başlangıç değerleri, momentumlu stokastik gradyan inişi (SGD) için 0.01 ile 0.1 arası ve Adam iyileştiricisi için 0.001'dir; bu değer Adam makalesinde önerilen varsayılan değerdir. Önceden eğitilmiş bir modeli ince ayarlarken, sıfırdan eğitime kıyasla daha küçük bir oran kullanılır; çünkü büyük adımlar, aktarımı öğrenmenin işe yaramasını sağlayan özelliklerin üzerine yazabilir.
Aynı döngüsel öğrenme oranları makalesindeki ve fastai'de öğrenme oranı bulucu olarak sunulan öğrenme oranı aralığı testi, kısa bir çalıştırmayla iyi bir değer bulur. Kayıp değerini kaydederken her mini yığından sonra oranı artırır; kullanışlı aralık, kaybın patlamaya başlamasından önce en hızlı düştüğü bölgedir.
Öğrenme Oranı ve İlişkili Terimler#
- Optimizasyon algoritması: Öğrenme oranını kullanan güncelleme kuralı. Adam gibi uyarlamalı iyileştiriciler, her ağırlığın adımını kendi gradyan geçmişine göre ölçeklendirir; ancak her adımı yine de tek bir genel öğrenme oranıyla çarpar.
- Momentum: Önceki güncellemenin bir kısmını mevcut güncellemeye ekleyen ayrı bir hiperparametre; yolu yumuşatır ve tutarlı yönlerde etkin adım boyutunu artırır.
- Ağırlık çürümesi: Ağırlıkları her adımda sıfıra doğru küçülten bir düzenlileştirme terimi; öğrenme oranı azalması ise adım boyutunu zaman içinde küçültür.
- Yığın boyutu: Her gradyanın ortalamasının alındığı örnek sayısı. Daha büyük yığınlar daha az gürültülü gradyanlar üretir ve daha yüksek oranları tolere eder; doğrusal ölçekleme kuralı, yığın boyutu k kat arttığında öğrenme oranını da k ile çarpar.










