Batch Size
حجم الدفعة هو عدد أمثلة التدريب التي يعالجها النموذج في كل تحديث للأوزان. ويحدد استهلاك ذاكرة GPU وسرعة التدريب وضجيج التدرج.
حجم الدفعة هو عدد أمثلة التدريب التي يعالجها النموذج معًا قبل تحديث أوزان النموذج. وبدلًا من تمرير مجموعة بيانات التدريب كاملة عبر شبكة عصبية دفعة واحدة، يقسمها التدريب إلى دفعات. ولكل دفعة، ينتج النموذج تنبؤات، وتقيّمها دالة الخسارة، وتحسب الانتشار العكسي التدرجات، ثم يتخذ المحسّن خطوة واحدة. حجم الدفعة هو معلمة فائقة تتحكم في ثلاثة أمور معًا: مقدار ذاكرة GPU التي يحتاج إليها التدريب، وسرعة تنفيذ كل حقبة، ومدى تشوش تقدير كل تدرج.
تأثير حجم الدفعة في التدريب#
تمنح كل دفعة خوارزمية التحسين تقديرًا للتدرج على مجموعة البيانات كاملة، ويزداد هذا التقدير دقةً كلما كبرت الدفعة. ويقيس مقتطف PyTorch أدناه هذه الدقة مباشرةً عبر حساب متوسط التدرجات لكل عينة على دفعات عشوائية عديدة بأحجام مختلفة:
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}")ينخفض تشتت تقدير التدرج من 2.248 عند حجم دفعة 8 إلى 0.771 عند 64 و0.267 عند 512. ويخفض كل ازدياد في حجم الدفعة بمقدار 8 أضعاف الضوضاء بنحو 2.9 ضعف، وهو قريب من الجذر التربيعي لـ8، كما يحدث عند حساب متوسط عينات مستقلة.
تشكل هذه الضوضاء الموازنة بين الدفعات الصغيرة والكبيرة:
- الدفعات الصغيرة (مثلًا من 8 إلى 32): تحديثات مشوشة وخطوات كثيرة في كل حقبة. تعمل الضوضاء بمثابة منظّم خفيف يساعد غالبًا الانحدار المتدرج العشوائي (SGD) على التعميم، وتناسب الدفعات الصغيرة الأجهزة محدودة الإمكانات، لكن كل حقبة تستغرق وقتًا أطول لأن GPU لا يعمل بكامل طاقته.
- الدفعات الكبيرة (مثلًا 256 فأكثر): تدرجات سلسة، وخطوات أقل في كل حقبة، واستفادة عالية من العتاد. تميل الدفعات الكبيرة جدًا إلى التقارب عند نقاط دنيا حادة تُعمّم بصورة أسوأ، كما وجد Keskar وآخرون، ولأنها تتطلب خطوات أقل في كل حقبة، تحتاج إلى معدل تعلم أكبر بصورة متناسبة مع فترة إحماء. وباستخدام قاعدة التحجيم الخطي هذه، درّب Goyal وآخرون ResNet-50 على ImageNet بحجم دفعة 8,192 موزع على 256 وحدة GPU خلال ساعة واحدة، مع مطابقة دقة التدريب بالدفعات الصغيرة.
حدود الذاكرة وتراكم التدرجات#
يجب أن تستوعب ذاكرة GPU أوزان النموذج وحالة المحسّن والتنشيطات الوسيطة التي يحتاج إليها الانتشار العكسي، كما تزداد ذاكرة التنشيطات خطيًا مع حجم الدفعة ودقة الصورة. وتوقف الدفعة التي لا تتسع لها الذاكرة التدريب بخطأ نفاد الذاكرة (OOM). ويخفض التدريب بـدقة مختلطة ذاكرة التنشيطات إلى النصف تقريبًا، بينما يتيح تراكم التدرجات الوصول إلى دفعة فعالة أكبر عبر جمع التدرجات على عدة دفعات صغيرة قبل كل تحديث للأوزان.
يتضمن التدريب باستخدام Ultralytics YOLO هذه الآلية: إذ يراكم التدرجات حتى يعالج نحو 64 صورة، وهو حجم الدفعة الاسمي nbs، لذا يُجري batch=16 الافتراضي تحديثًا واحدًا للأوزان كل أربع دفعات بعد الإحماء. ويؤدي ضبط batch=-1 إلى تشغيل AutoBatch، الذي يختار أكبر دفعة تتسع لنحو 60% من ذاكرة CUDA الحرة، ويستخدم حجم دفعة 16 احتياطيًا على أجهزة CPU وApple MPS.
from ultralytics import YOLO
# حمّل نموذج YOLO26n مدرّبًا مسبقًا
model = YOLO("yolo26n.pt")
# batch=-1 يتيح لـAutoBatch اختيار حجم الدفعة استنادًا إلى ذاكرة GPU المتاحة
# استخدم عددًا صحيحًا (batch=16) لتحديد حجم ثابت أو عددًا عشريًا (batch=0.70) لتحديد نسبة من الذاكرة
results = model.train(data="coco8.yaml", epochs=5, batch=-1)قبل بدء التدريب، يشغّل AutoBatch نموذج YOLO26 بأحجام دفعات تتراوح من 1 إلى 16 (وحتى 64 على وحدات GPU ذات ذاكرة 16 GB أو أكثر)، ويلائم خطًا مستقيمًا مع استخدام الذاكرة المقاس، ثم يحل المعادلة لإيجاد حجم الدفعة الذي يحقق النسبة المستهدفة.
حجم الدفعة ومصطلحات ذات صلة#
- الحقبة والتكرار: الحقبة مرور واحد على مجموعة البيانات كاملة، والتكرار تحديث واحد للأوزان. يساوي عدد التكرارات في الحقبة حجم مجموعة البيانات مقسومًا على حجم الدفعة، مع التقريب للأعلى؛ لذا تستغرق معالجة 1,000 صورة بحجم دفعة 100 عشرة تكرارات.
- الدفعة المصغرة: مرادف للدفعة في معظم الكتابات عن التعلم العميق. وبالمعنى الدقيق، يستخدم الانحدار المتدرج بالدفعة مجموعة البيانات كاملةً في كل تحديث، ويستخدم الانحدار المتدرج العشوائي مثالًا واحدًا، بينما يقع انحدار الدفعات المصغرة بينهما، وهو أسلوب تدريب جميع الشبكات الحديثة تقريبًا.
- تطبيع الدفعات: طبقة تطبّع التنشيطات باستخدام متوسط الدفعة الحالية وتباينها، لذا تصبح إحصاءاتها غير موثوقة جدًا عند أحجام الدفعات الصغيرة للغاية. ويتجنب تطبيع المجموعات هذا الاعتماد، وقد سجل خطأ أقل بنسبة 10.6% من تطبيع الدفعات في ResNet-50 على ImageNet عند حجم دفعة 2.
- حجم دفعة الاستدلال: أثناء النشر، توازن معالجة الدفعات بين زمن استجابة الاستدلال ومعدل الإنتاجية. إذ يؤدي تجميع إطارات من عدة كاميرات إلى زيادة عدد الصور المعالجة في الثانية، بينما ينتظر كل إطار اكتمال دفعته.










