Batch Normalization
Yığın normalizasyonu, her kanalı mini yığın boyunca standartlaştırır ve ardından öğrenilmiş parametrelerle yeniden ölçeklendirir. Matematiği, çıkarım sırasındaki davranışı ve sınırları.
Yığın normalizasyonu veya BatchNorm, girdisinin her kanalını geçerli mini yığının ortalaması ve varyansıyla normalleştiren, ardından sonucu öğrenilen iki parametreyle yeniden ölçeklendiren bir sinir ağı katmanıdır. Sergey Ioffe ve Christian Szegedy bu yöntemi 2015'te tanıttı ve yöntem, Inception görüntü sınıflandırıcısının aynı doğruluğa 14 kat daha az eğitim adımında ulaşmasını sağladı. BatchNorm daha yüksek öğrenme oranlarına olanak tanır, eğitimi ağırlık başlatmaya daha az duyarlı hâle getirir ve ResNet gibi evrişimli sinir ağlarının (CNNs) standart bir bileşeni hâline gelmiştir.
Batch Normalization Nasıl Çalışır#
Bir evrişim katmanı için BatchNorm, her kanal başına bir ortalama μ ve bir varyans σ² hesaplar; bunun için yığındaki her görüntü ve her uzamsal konum üzerinden toplama yapar. Her x aktivasyonu ardından iki adımdan geçer:
- Normalleştirme: x̂ = (x − μ) / √(σ² + ε); PyTorch'ta varsayılan olarak 1e-5 olan küçük ε değeri sıfıra bölmeyi önler.
- Ölçekleme ve kaydırma: y = γ·x̂ + β; burada γ ve β, kanal başına öğrenilir. Bu parametreler, bir sonraki katmana uygun ortalama ve yayılımı ağın yeniden oluşturmasına, normalleştirmeyi tamamen geri almasına bile olanak tanır.
BatchNorm genellikle bir evrişim katmanı ile aktivasyon işlevi arasına yerleştirilir. β zaten kanal başına bir ofset eklediğinden, önceki evrişim katmanının bias değeri gereksizdir ve normalde devre dışı bırakılır.
Eğitim ve Çıkarım#
Eğitim sırasında her ileri geçiş, yığın istatistiklerinin üstel hareketli ortalamaları olarak bir hareketli ortalama ve hareketli varyansı da günceller. PyTorch'un BatchNorm2d katmanı, varsayılan olarak bunları her yeni yığına doğru %10 ilerletir (momentum=0.1). Çıkarım sırasında katman bunun yerine bu hareketli ortalamalarla normalleştirme yapar; böylece tek bir görüntünün tahmini artık aynı yığındaki diğer görüntülere bağlı olmaz. model.train() ve model.eval() iki davranış arasında geçiş yapar:
import torch
torch.manual_seed(0)
bn = torch.nn.BatchNorm2d(num_features=3)
# A batch of 8 three-channel feature maps with mean 5 and standard deviation 2
x = 5 + 2 * torch.randn(8, 3, 16, 16)
# Training mode normalizes with this batch's per-channel mean and variance
out = bn(x)
print(f"train mode: output mean {out.mean():.3f}, std {out.std():.3f}")
# The same call nudges the running averages 10% of the way toward the batch statistics
print(f"running mean {bn.running_mean[0]:.3f}, running var {bn.running_var[0]:.3f}")
# Eval mode normalizes with the running averages instead of the batch statistics
bn.eval()
out = bn(x)
print(f"eval mode: output mean {out.mean():.3f}, std {out.std():.3f}")Eğitim modunda, girdinin ortalaması 5 olmasına rağmen çıktının ortalaması 0.000, standart sapması 1.000 olur. Bir yığından sonra hareketli ortalama yalnızca 0'dan 0.496'ya, hareketli varyans ise 1'den 1.294'e yükselir; bu nedenle değerlendirme modu 3.920 ortalamalı çıktılar üretir. Hareketli ortalamaların yakınsaması için birkaç düzine yığın gerekir. Yanlış modda veya istatistikleri henüz oturmadan değerlendirilen bir model, gerçek doğruluğunun çok altında puan alır.
Çıkarım sırasında BatchNorm, sabit ve kanal başına doğrusal bir dönüşümdür; bu nedenle önceki evrişim katmanına katlanabilir: evrişim ağırlıkları γ/√(σ² + ε) ile çarpılır ve bias değeri β − γμ/√(σ² + ε) olur. YOLO26 içindeki standart evrişim bloğu, bias içermeyen bir evrişim katmanının ardından BatchNorm ve SiLU aktivasyonundan oluşur. Ultralytics, aynı çıktıları üretirken katmanı ortadan kaldırmak için tahmin ve dışa aktarma öncesinde bu BatchNorm katmanlarının her birini evrişim katmanıyla birleştirir.
Yığın Normalizasyonu Neden Yararlıdır#
İlk makale, BatchNorm'un faydasını, önceki katmanlar güncellendikçe her katmanın girdi dağılımının değişmesi olan iç kovaryat kaymasının azalmasına bağladı. Daha sonraki BatchNorm katmanlarından sonra rastgele dağılım kaymaları ekleyen deneyler, eğitimin neredeyse hiç etkilenmediğini gösterdi ve faydayı daha öngörülebilir gradyanlara sahip, daha düzgün bir kayıp yüzeyine bağladı; bu da optimizasyon algoritmasının daha büyük ve kararlı adımlar atmasını sağlar. Ön aktivasyonların ortalamasını sıfıra, varyansını bire yakın tutmak, doygun aktivasyonların düz bölgelerine girmesini de önleyerek kaybolan gradyanlara karşı yardımcı olur.
Her örnek, rastgele seçilmiş bir yığının istatistikleriyle normalleştirildiğinden BatchNorm, hafif bir düzenlileştirici görevi gören gürültü de ekler. İlk makale, bunun bazı durumlarda dropout ihtiyacını ortadan kaldırabileceğini bildirmiştir.
Sınırlamalar#
- Küçük yığınlar: Her cihazda az sayıda görüntü bulunduğunda yığın istatistikleri gürültülü olur. GPU başına 2 görüntü kullanıldığında, her görüntü içindeki kanal gruplarının istatistiklerini hesaplayan Grup Normalizasyonu, ResNet-50 üzerinde BatchNorm'a kıyasla ImageNet hatasını %10,6 azaltmıştır.
- Çoklu GPU eğitimi: Katmanlar, istatistikleri cihazlar arasında toplayan SyncBatchNorm biçimine dönüştürülmedikçe her GPU yığının kendi payıyla normalleştirme yapar; bu dönüşüm ek iletişim maliyeti getirir.
- Dizi modelleri: Değişken uzunluktaki diziler ve yığına bağlı istatistikler birbiriyle pek uyuşmadığından transformer'lar bunun yerine katman normalizasyonu kullanır.
Yığın Normalizasyonu ve İlgili Terimler#
- Veri normalizasyonu: Ön işleme sırasında ham girdileri, örneğin piksel değerlerini 255'e bölerek bir kez yeniden ölçeklendirir. BatchNorm ise her katmanda ve her eğitim adımında ara aktivasyonları normalleştirir.
- Katman normalizasyonu: Her örneği kendi özellikleri üzerinden normalleştirir; bu nedenle eğitim ve çıkarım sırasında aynı şekilde çalışır ve yığın boyutuna bağlı değildir. Ortalamayı çıkarmayan daha basit bir tür olan RMSNorm, büyük dil modellerinde yaygındır.
- Grup normalizasyonu: Her görüntünün kanallarını gruplara ayırır ve her grup içinde normalleştirme yapar; küçük yığınlarla eğitilen tespit ve segmentasyon modelleri için uygundur.
- Örnek normalizasyonu: Her görüntünün her kanalını ayrı ayrı normalleştirerek görüntü başına kontrastı ortadan kaldırır. Hem eğitimde hem de test sırasında BatchNorm'un örnek normalizasyonuyla değiştirilmesi, hızlı sinirsel stil aktarımının kalitesini belirgin biçimde artırmıştır.










