Epoch
العصر هو مرور كامل واحد للنموذج على بيانات التدريب. تعرّف على علاقة العصور بالدُفعات والتكرارات، وعدد العصور المناسب للتدريب.
العصر التدريبي هو مرور كامل واحد لنموذج التعلم الآلي على مجموعة بيانات التدريب بأكملها. وخلال العصر، يساهم كل مثال تدريبي مرة واحدة بالضبط في تحديث أوزان النموذج. ونادرًا ما تتعلم نماذج التعلم العميق ما يكفي من مرور واحد، لذا يستمر التدريب لعصور عديدة، وينخفض الخطأ على بيانات التدريب عادةً في كل عصر مع تحسين الشبكة لتنبؤاتها.
العصر مقابل الدفعة مقابل التكرار#
تصف ثلاثة مصطلحات بنية عملية التدريب، ويندرج كل منها ضمن المصطلح الذي يسبقه:
- العصر: مرور كامل واحد على مجموعة بيانات التدريب.
- الدفعة: مجموعة الأمثلة التي تُعالَج معًا في خطوة واحدة. ونادرًا ما تتسع ذاكرة GPU لمجموعات البيانات دفعة واحدة، لذا يُقسّم كل عصر إلى دفعات، عادةً بعد خلط البيانات.
- التكرار: تحديث واحد للأوزان، يُجرى بعد حساب دالة الخسارة على دفعة وانتشار تدرجاتها عكسيًا عبر الانتشار العكسي. و«الخطوة» مرادف له.
يساوي عدد التكرارات في كل عصر حجم مجموعة البيانات مقسومًا على حجم الدفعة، مع التقريب إلى الأعلى. وتتطلب مجموعة بيانات تضم 1,000 صورة وحجم دفعة يبلغ 100 عشرة تكرارات لكل عصر، لذا تنتج 50 عصرًا 500 تحديث للوزن. وفي PyTorch، تظهر هذه البنية في حلقتين متداخلتين: حلقة خارجية للعصور وحلقة داخلية للدفعات التي يخدمها DataLoader.
import torch
from torch.utils.data import DataLoader, TensorDataset
torch.manual_seed(0)
# 1,000 noisy samples of the line y = 3x + 2, served in shuffled batches of 100
x = torch.rand(1000, 1)
y = 3 * x + 2 + 0.1 * torch.randn(1000, 1)
loader = DataLoader(TensorDataset(x, y), batch_size=100, shuffle=True)
model = torch.nn.Linear(1, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=0.5)
for epoch in range(5): # one epoch = one full pass over all 1,000 samples
for xb, yb in loader: # 1,000 / 100 = 10 iterations per epoch
loss = torch.nn.functional.mse_loss(model(xb), yb)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch + 1}: {len(loader)} iterations, last batch loss {loss.item():.4f}")يتضمن كل عصر 10 تكرارات، وينخفض معدل الخسارة في الدفعة الأخيرة من 0.1096 بعد العصر الأول إلى 0.0088 بعد العصر الخامس مع تقارب النموذج نحو الخط الحقيقي. وعند استخدام زيادة البيانات في التدريب، يرى النموذج نسخة محوّلة حديثًا من كل صورة في كل عصر، فتضيف العصور اللاحقة تنوعًا بدلًا من تكرار الصور نفسها حرفيًا.
اختيار عدد العصور#
يُعد عدد العصور أحد الإعدادات الأساسية في ضبط المعلمات الفائقة. فالعصور القليلة جدًا تُبقي النموذج في حالة نقص التعلّم، مع ارتفاع الخطأ في بيانات التدريب والتحقق على حد سواء. أما العصور الكثيرة جدًا فتدفعه نحو فرط التعلّم، حيث يستمر انخفاض خسارة التدريب بينما تتوقف نتيجة التحقق عن التحسن أو تتراجع، لأن النموذج بدأ يحفظ أمثلة التدريب. ويعتمد العدد المناسب على حجم مجموعة البيانات وحجم النموذج وجدول معدل التعلّم، وعلى ما إذا كان التدريب يبدأ بأوزان مدرّبة مسبقًا عبر التعلّم بالنقل. ويؤثر المقياس أيضًا في الاختيار: فكثيرًا ما تُدرّب مجموعات بيانات الرؤية الصغيرة لمئات العصور، بينما لا تمر النماذج اللغوية الكبيرة على معظم بياناتها مرة واحدة، وقد أكمل GPT-3 0.44 عصرًا على بيانات Common Crawl التي خضعت للتصفية.
تؤتمت آلية الإيقاف المبكر عملية الاختيار. إذ يُقيّم النموذج على بيانات التحقق بعد كل عصر، وتُحفظ أفضل نقطة تحقق، وينتهي التدريب عندما لا تتحسن نتيجة التحقق لعدد محدد من العصور يُسمى حد الصبر.
جداول التدريب القائمة على العصور#
إلى جانب نقطة الإيقاف، تتغير كثير من إعدادات التدريب وفق جدول زمني للعصور، مثل الإحماء التدريجي لمعدل التعلّم وخفضه أو شدة زيادة البيانات. وفي تدريب Ultralytics YOLO، تكون القيمتان الافتراضيتان لكل من epochs وpatience هي 100، ويُحمّى معدل التعلّم تدريجيًا خلال العصور الثلاثة الأولى، وتتوقف زيادة بيانات الفسيفساء في العصور العشرة الأخيرة (close_mosaic=10) لينتهي التدريب على صور تشبه المدخلات الحقيقية. وتوضح وصفة تدريب YOLO26 مدى اختلاف العدد باختلاف حجم النموذج: فبعد 150 عصرًا من التدريب المسبق على Objects365، استمر الضبط الدقيق على COCO 245 عصرًا لـ YOLO26n و40 عصرًا لـ YOLO26x.
from ultralytics import YOLO
# حمّل نموذج YOLO26n مدرّبًا مسبقًا
model = YOLO("yolo26n.pt")
# التدريب لمدة 50 عصرًا: 50 مرورًا كاملًا على صور التدريب في COCO8
results = model.train(data="coco8.yaml", epochs=50, imgsz=640)خلال هذه العملية، يتحقق المدرّب من نموذج YOLO26 بعد كل عصر، ويستبدل last.pt في كل مرة، ويحفظ best.pt كلما حققت جودة التحقق، وهي mAP50-95 في مهمة الكشف، قيمةً قياسية جديدة.










