Batch Size (Yığın (Küme) Boyutu)

Batch size, sinir ağı eğitiminde her gradyan güncellemesinde birlikte işlenen eğitim örneği sayısını belirleyen hiperparametredir.

Batch size (yığın boyutu), bir yapay sinir ağının eğitiminde her gradyan güncellemesinde aynı anda işlenen eğitim örneği sayısını belirleyen hiperparametredir. Model tüm veri setini tek seferde hafızaya almak yerine veriyi küçük gruplara böler; batch size 32 ise ağırlıklar her 32 örnekte bir güncellenir. 10.000 örneklik bir veri setinde bu, epoch başına yaklaşık 313 güncelleme adımı demektir. Bu tek sayının önemi iki eksende toplanır: donanım ve öğrenme dinamiği. Donanım tarafında batch; model ağırlıkları, optimizer durumları ve ara aktivasyonlarla birlikte GPU belleğine (VRAM) sığmak zorundadır. Değer büyüdükçe bellek tüketimi yaklaşık orantılı artar, sınır aşıldığında Out of Memory (OOM) hatası alınır. Öğrenme tarafında ise küçük batch'ler gürültülü ama düzenleyici etki yapan gradyan tahminleri üretir ve genellemeyi iyileştirebilir; büyük batch'ler daha kararlı gradyanlar ve yüksek GPU verimliliği sunar ama keskin minimumlara (sharp minima) takılıp test performansını düşürme riski taşır. Pratikte üç yaklaşım ayırt edilir: batch size 1 ile çalışan stochastic gradient descent (SGD), tüm veriyi tek seferde işleyen full batch ve ikisinin ortasındaki mini-batch. Modern derin öğrenmede standart, 32-256 aralığındaki mini-batch değerleridir; "batch size" dendiğinde çoğunlukla bu kastedilir. Batch size tek başına değil, learning rate ile birlikte ayarlanır: batch büyütüldüğünde öğrenme hızı da genellikle orantılı artırılır (linear scaling rule) ve warmup uygulanır. Ölçek büyüdükçe kavram şekil değiştirir: büyük dil modeli ön eğitiminde global batch örnek sayısıyla değil token sayısıyla ifade edilir. Llama 3 405B'nin ön eğitiminde global batch 16 milyon token'a kadar çıkarılmıştır; bu ölçek tek GPU'ya sığmadığı için gradient accumulation ve data parallel dağıtım zorunludur. Günlük pratikte ise VRAM yetmediğinde gradient accumulation ile büyük sanal batch simüle edilir, bf16 mixed precision ve gradient checkpointing bellek ihtiyacını ciddi ölçüde azaltır. Doğru batch size veri setine, mimariye ve donanıma göre deneysel seçilir; 32 veya 64 ile başlayıp validation loss izleyerek ayarlamak en yaygın yöntemdir.

Lokma Büyüklüğü Metaforu

10.000 fotoğraflı bir veri setiniz var. Ekran kartınız (örneğin 12 GB VRAM'li bir RTX 4070) 10.000 resmi aktivasyonlarıyla birlikte aynı anda hafızasına sığdıramaz; denerseniz Out of Memory hatası alırsınız. Bu yüzden batch size = 32 yaparsınız: model fotoğrafları 32'li lokmalar halinde alır, ileri geçişte tahmin üretir, hatasını hesaplar, ağırlıklarını günceller ve sonraki 32'ye geçer. Bir epoch bu örnekte 313 güncelleme adımı sürer. Lokma büyüklüğü hem sistemin hızını hem de öğrenme karakterini değiştirir: küçük lokmalar sık ama gürültülü güncellemeler, büyük lokmalar seyrek ama kararlı güncellemeler üretir. Aynı model, aynı veri ve aynı epoch sayısıyla sırf bu sayı değişti diye bambaşka eğitim eğrileri ve farklı test doğrulukları ortaya çıkabilir. Batch size bu yüzden learning rate ile birlikte, derin öğrenmenin en çok kurcalanan iki hiperparametresinden biridir.

Üç Yaklaşım: SGD, Mini-Batch, Full Batch

looks-one Stochastic Gradient Descent (Batch = 1)

Verileri tek tek okur, her örnekten sonra ağırlıkları günceller. Çok gürültülü ve GPU açısından verimsizdir; buna karşılık gürültü, sığ lokal minimumlardan kaçmaya yardımcı olabilir. Saf haliyle modern pratikte nadiren kullanılır.

grid-view Mini-Batch (32-256)

Gradyan tahmini yeterince kararlı, bellek kullanımı yönetilebilir, GPU paralelliği iyi değerlendirilir. Modern derin öğrenmenin fiili standardıdır; PyTorch DataLoader ve Keras fit varsayılanı olan 32 buradan gelir.

storage Full Batch

Tüm veri seti tek seferde işlenir, epoch başına tek güncelleme yapılır. Gradyan matematiksel olarak en kesin haliyle hesaplanır ama büyük veri setlerinde VRAM'e sığmaz ve güncelleme sayısı azaldığı için öğrenme verimsizleşir. Yalnızca çok küçük veri setlerinde pratiktir.

layers Sanal Batch (Gradient Accumulation)

Fiziksel batch küçükken gradyanlar N adım biriktirilip tek güncelleme yapılır: 4 adım × 16 örnek = etkin batch 64. LLM fine-tuning'inin (LoRA/QLoRA dahil) standart bellek tekniğidir.

Batch Büyüklüğü Öğrenmeyi Nasıl Etkiler? Flat ve Sharp Minima

Batch büyüklüğü, gradyan gürültüsü ile hesaplama verimliliği arasındaki dengeyi belirler. Küçük batch (8-64) her adımda gürültülü gradyan üretir; kayıp eğrisi dalgalanır ama bu gürültü istemeden bir düzenleyici (regularizer) gibi çalışır. Keskin ve dar vadiler yerine düz minimum (flat minima) bölgelerine yönelen model, görülmemiş verilere daha iyi genelleme yapar — Keskar ve arkadaşlarının 2017'de gösterdiği, bugün de geçerliliğini koruyan bulgu budur. Büyük batch (512-8192) ise kesin ve kararlı gradyanlarla pürüzsüz bir loss inişi verir, GPU paralelliğinden maksimum fayda alır; ancak sharp minima bölgelerine sıkışıp test doğruluğunu düşürme riski taşır. Bu riski dengelemek için learning rate warmup, linear scaling rule ve LARS/LAMB gibi katman bazlı optimizer'lar geliştirilmiştir. Batch size ayrıca batch normalization istatistiklerini etkiler: batch 8'in altına indiğinde bu istatistikler güvenilmezleşir; group normalization veya layer normalization (Transformer'ların tercihi) bu yüzden yaygınlaşmıştır.

Pratik Seçim Kuralları

  • check_circle 32 veya 64 ile başla, 2'nin kuvvetlerinde tara: 8'den başlayıp iki katına çıkararak (8, 16, 32, 64, 128, 256) kısa eğitimler koş; her denemede validation loss ve epoch süresini not et. Amaç en büyük batch değil, birim zamanda en iyi doğrulama performansını veren değerdir.
  • check_circle OOM alırsan yarıya indir veya biriktir: Out of Memory hatasında ilk hamle batch'i yarılamaktır; etkin batch'i korumak istiyorsan gradient accumulation ekle. bf16/fp16 mixed precision ve gradient checkpointing, aynı VRAM'de 2-4 kat büyük batch'e izin verebilir.
  • check_circle Learning rate'i birlikte ölçekle: Batch 2 kat artınca learning rate'i de 2 kat artırmak (linear scaling rule) yaygın başlangıçtır; Adam ailesinde karekök ölçekleme çoğu zaman daha kararlıdır. Büyük batch + büyük LR kombinasyonu mutlaka warmup ister. İki hiperparametreyi bağımsız taramak yanıltıcı sonuç verir.
  • check_circle Görev tipine göre kalibre et: Görüntü sınıflandırmada 64-256, BERT tarzı fine-tuning'de 16-32 (LR ≈ 2e-5), 7-8B LLM'lerin LoRA fine-tuning'inde fiziksel 1-4 + accumulation ile etkin 16-64 tipik aralıklardır. ResNet-50 için klasik reçete 256 batch + 0.1 SGD learning rate'tir.
  • check_circle Batch normalization sınırına dikkat et: Fiziksel batch 8'in altına düşüyorsa BN istatistikleri bozulur; group norm'a geçmek veya BN katmanlarını dondurmak gerekir. Transformer mimarileri layer norm kullandığı için bu sorundan etkilenmez.

LLM Ölçeğinde Batch: Token Cinsinden Global Batch

Büyük dil modeli ön eğitiminde batch artık örnek sayısıyla değil token sayısıyla konuşulur. Llama 3 405B eğitimde global batch'i kademeli büyüterek 16 milyon token'a çıkardı; GPT-3'ün raporlanan global batch'i 3,2 milyon token'dı. Bu ölçek tek GPU'ya sığmadığı için etkin batch üç çarpanın ürünüdür: fiziksel micro-batch × gradient accumulation adımı × data parallel GPU sayısı. Örneğin 512 H100 üzerinde micro-batch 2, accumulation 8 ise etkin batch 8.192 dizidir. Eğitim ilerledikçe batch'i büyütme (batch size ramp-up) yaygın pratiktir; erken aşamada küçük batch'in gürültüsü hızlı öğrenmeye yardım eder, geç aşamada büyük batch verimi artırır. OpenAI'nin gradient noise scale çalışması bu geçişin ölçülebilir bir kritik batch boyutu olduğunu gösterdi: o eşiğin üzerinde batch'i büyütmek adım sayısını azaltmaz, sadece maliyeti artırır. Fine-tuning tarafında ise tablo mütevazıdır: QLoRA ile 24 GB'lık tek kartta 13B sınıfı bir modele fiziksel batch 1 ve accumulation 16 tipik bir kurulumdur.

Sık Sorulan Sorular

  • check_circle Batch size nedir?: Batch size, derin öğrenme eğitiminde her bir gradyan güncellemesinde kullanılan örnek sayısıdır. batch_size=64 ise model 64 örnek üzerinden gradyanı hesaplar, parametreleri günceller ve sonraki 64 örneğe geçer. Epoch başına güncelleme sayısı veri_sayısı / batch_size formülüyle bulunur.
  • check_circle Batch size ve epoch arasındaki fark nedir?: Batch size her güncelleme adımındaki örnek sayısı, epoch ise tüm eğitim verisinin bir kez baştan sona işlendiği tam turdur. 1.000 örnekli veri setinde batch_size=100 ile 1 epoch, 10 güncelleme adımına karşılık gelir.
  • check_circle Büyük batch mi küçük batch mi daha iyi?: İkisinin de avantajı var. Küçük batch daha iyi genelleme (flat minima etkisi) ve düşük bellek; büyük batch daha hızlı wall-clock eğitim ve yüksek GPU verimliliği getirir. Çoğu görevde 32-256 dengeli seçimdir; büyük batch kullanılacaksa linear scaling rule ve warmup şarttır.
  • check_circle Batch size GPU belleğini nasıl etkiler?: Batch büyüdükçe bellekte tutulan aktivasyon miktarı ve VRAM tüketimi yaklaşık orantılı artar. OOM hatasında batch yarıya indirilir veya gradient accumulation kullanılır; bf16 mixed precision ve gradient checkpointing bellek ihtiyacını 2-4 kat azaltabilir.
  • check_circle Gradient accumulation nedir, batch size ile ilişkisi nedir?: Sınırlı VRAM ile büyük sanal batch simüle etme tekniğidir: N adım boyunca parametre güncellenmez, gradyanlar biriktirilir, sonra toplu gradyanla tek güncelleme yapılır. Fiziksel batch_size=16 ve 8 accumulation adımıyla etkin batch 128 elde edilir; LLM fine-tuning'inde standarttır.
  • check_circle Batch size değişince learning rate de değişmeli mi?: Evet. Batch 2 kat artırıldığında learning rate'i de 2 kat artırmak (linear scaling rule) yaygın kuraldır; Adam/AdamW ile karekök ölçekleme çoğu zaman daha kararlı çalışır. Büyük batch + yüksek LR kombinasyonu, ilk adımlarda düşük LR ile başlayan warmup dönemi gerektirir.