Batch Size
Yığın boyutu, bir modelin her ağırlık güncellemesinde işlediği eğitim örneği sayısıdır. GPU bellek kullanımını, eğitim hızını ve gradyan gürültüsünü belirler.
Yığın boyutu, bir modelin model ağırlıklarını güncellemeden önce birlikte işlediği eğitim örneği sayısıdır. Eğitim veri kümesinin tamamını bir kerede sinir ağına vermek yerine eğitim, verileri yığınlara böler. Her yığında model tahminler üretir, kayıp işlevi bu tahminleri puanlar, geri yayılım gradyanları hesaplar ve optimizasyon algoritması bir adım atar. Yığın boyutu, aynı anda üç şeyi belirleyen bir hiperparametredir: eğitimin ne kadar GPU belleğine ihtiyaç duyduğunu, her epoch süresini ve her gradyan tahmininin ne kadar gürültülü olduğunu.
Yığın Boyutu Eğitimi Nasıl Etkiler#
Her yığın, optimizasyon algoritmasına tüm veri kümesi üzerindeki gradyan için bir tahmin sunar; yığın büyüdükçe bu tahmin daha kesin hâle gelir. Aşağıdaki PyTorch kod parçacığı, farklı boyutlardaki çok sayıda rastgele yığının örnek başına gradyanlarının ortalamasını alarak bu kesinliği doğrudan ölçer:
import torch
torch.manual_seed(0)
# Per-sample gradients of a squared-error loss for 10,000 samples
x = torch.randn(10_000)
y = 2 * x + torch.randn(10_000)
w = torch.tensor(0.0)
per_sample_grads = 2 * (w * x - y) * x
# Estimate the gradient from 1,000 random batches at each batch size
for batch_size in (8, 64, 512):
idx = torch.randint(0, len(x), (1000, batch_size))
batch_grads = per_sample_grads[idx].mean(dim=1)
print(f"batch {batch_size:3d}: gradient std {batch_grads.std():.3f}")Gradyan tahmininin yayılımı, yığın boyutu 8 iken 2.248'den, 64'te 0.771'e ve 512'de 0.267'ye düşer. Yığın boyutundaki her 8 katlık artış gürültüyü yaklaşık 2,9 kat azaltır; bu, bağımsız örneklerin ortalamasının nasıl davrandığını gösteren √8 değerine yakındır.
Bu gürültü, küçük ve büyük yığınlar arasındaki ödünleşimi belirler:
- Küçük yığınlar (örneğin 8-32): Gürültülü güncellemeler ve epoch başına çok sayıda adım. Gürültü, stokastik gradyan inişinin (SGD) genelleme yapmasına çoğu zaman yardımcı olan hafif bir düzenlileştirici görevi görür ve küçük yığınlar mütevazı donanımlara sığar; ancak GPU kısmen boşta kaldığından her epoch daha uzun sürer.
- Büyük yığınlar (örneğin 256 ve üzeri): Daha düzgün gradyanlar, epoch başına daha az adım ve yüksek donanım kullanımı. Keskar ve arkadaşlarının bulduğu gibi, çok büyük yığınlar genelleme performansı daha kötü olan keskin minimumlarda yakınsama eğilimindedir. Ayrıca epoch başına daha az adım attıkları için ısınma süresiyle birlikte orantılı olarak daha yüksek bir öğrenme oranına ihtiyaç duyarlar. Goyal ve arkadaşları, bu doğrusal ölçekleme kuralını kullanarak ResNet-50'yi ImageNet üzerinde 256 GPU'ya dağıtılmış 8.192 yığın boyutuyla bir saatte eğitti ve küçük yığınlı eğitimin doğruluğuna ulaştı.
Bellek Sınırları ve Gradyan Biriktirme#
GPU belleği, modelin ağırlıklarını, optimizasyon durumu değerlerini ve geri yayılımın ihtiyaç duyduğu ara aktivasyonları tutmalıdır; aktivasyon belleği yığın boyutu ve görüntü çözünürlüğüyle doğrusal olarak artar. Sığmayan bir yığın, eğitimi bellek yetersizliği (OOM) hatasıyla durdurur. Karma hassasiyetli eğitim aktivasyon belleğini yaklaşık yarıya indirir; gradyan biriktirme ise her ağırlık güncellemesinden önce birkaç küçük yığının gradyanlarını toplayarak daha büyük bir etkin yığın boyutuna ulaşır.
Ultralytics YOLO eğitimi bu özelliği yerleşik olarak sunar: yaklaşık 64 görüntü, yani nominal yığın boyutu nbs görülene kadar gradyanları biriktirir. Böylece ısınma sonrasında varsayılan batch=16 her dört yığında bir ağırlık güncellemesi yapar. batch=-1 ayarı, kullanılabilir CUDA belleğinin yaklaşık %60'ına sığan en büyük yığın boyutunu seçen AutoBatch özelliğini çalıştırır ve CPU ile Apple MPS aygıtlarında yığın boyutunu 16'ya düşürür.
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26n modeli yükle
model = YOLO("yolo26n.pt")
# batch=-1, AutoBatch'in yığın boyutunu kullanılabilir GPU belleğine göre seçmesini sağlar
# Sabit bir boyut için bir tamsayı (batch=16), bellek oranı içinse bir ondalık sayı (batch=0.70) kullan
results = model.train(data="coco8.yaml", epochs=5, batch=-1)Eğitim başlamadan önce AutoBatch, YOLO26 modelini 1'den 16'ya kadar yığın boyutlarında (16 GB veya daha fazla belleğe sahip GPU'larda 64'e kadar) çalıştırır, ölçülen bellek kullanımı için doğrusal bir doğru uydurur ve hedef orana ulaşan yığın boyutunu bu doğruyu çözerek bulur.
Yığın Boyutu ve İlgili Terimler#
- Epoch ve iterasyon: Epoch, tüm veri kümesi üzerinde yapılan tek bir geçiştir; iterasyon ise tek bir ağırlık güncellemesidir. Epoch başına iterasyon sayısı, veri kümesi boyutunun yığın boyutuna bölünüp yukarı yuvarlanmasına eşittir; dolayısıyla 1.000 görüntü, yığın boyutu 100 iken 10 iterasyon sürer.
- Mini yığın: Derin öğrenme kaynaklarının çoğunda yığınla eş anlamlı kullanılır. Kesin tanımıyla yığın gradyan inişi her güncellemede tüm veri kümesini, stokastik gradyan inişi tek bir örneği kullanır; mini yığın gradyan inişi ise bu ikisinin arasında kalır ve neredeyse tüm modern ağlar bu şekilde eğitilir.
- Yığın normalizasyonu: Aktivasyonları geçerli yığının ortalaması ve varyansıyla normalleştiren bir katmandır; bu nedenle çok küçük yığın boyutlarında istatistikleri güvenilmez hâle gelir. Grup Normalizasyonu bu bağımlılığı önler ve yığın boyutu 2 iken ResNet-50 için ImageNet üzerinde yığın normalizasyonuna kıyasla %10,6 daha düşük hata bildirmiştir.
- Çıkarım yığın boyutu: Dağıtım sırasında yığınlama, verim karşılığında çıkarım gecikmesinden ödün verir. Birden fazla kameradan gelen kareleri gruplamak saniyede işlenen görüntü sayısını artırırken her kare, yığının dolmasını bekler.










