Learning Rate
يضبط معدل التعلم حجم كل تحديث للأوزان أثناء التدريب. ويتناول هذا المفهوم سبب تباعد القيم المرتفعة جدًا وتعثر القيم المنخفضة جدًا، إلى جانب الإحماء وجداول الاضمحلال والضبط.
معدل التعلّم هو المعامل الفائق الذي يحدّد مقدار تحرّك أوزان النموذج في كل خطوة تدريب. وتحسب طريقة الانحدار المتدرّج تدرّج دالة الخسارة، الذي يشير إلى اتجاه الزيادة الأسرع في الخسارة، ثم تحدّث كل وزن وفقًا للمعادلة w ← w − η × gradient، حيث ترمز η (eta) إلى معدل التعلّم. وحجم الخطوة مرادف لمعدل التعلّم، وغالبًا ما تسمّي الشيفرة معدل التعلّم lr. ويساعد اختيار معدل تعلّم مناسب الشبكة العصبية على التقارب سريعًا إلى حل جيد، بينما يؤدي اختيار معدل تعلّم غير مناسب إلى تباعد التدريب أو تباطئه بشدة؛ ولهذا تصف ورقة معدلات التعلّم الدورية لليزلي سميث معدل التعلّم بأنه أهم معامل فائق ينبغي ضبطه لـالشبكات العميقة.
مرتفع جدًا، منخفض جدًا، ومناسب تمامًا#
يوازن معدل التعلّم بين السرعة والاستقرار:
- مرتفع جدًا: تتجاوز كل خطوة الحد الأدنى. وتتذبذب الخسارة أو تقفز أو تزداد حتى تصبح NaN، ويتباعد التدريب.
- منخفض جدًا: تحرك كل خطوة الأوزان مسافة ضئيلة جدًا. وتنخفض الخسارة ببطء، ويحتاج التدريب إلى عدد أكبر بكثير من العصور ليتقارب، وتنتهي عملية التدريب ذات الميزانية المحددة بـنقص التكيّف.
- مختار جيدًا: تنخفض الخسارة بثبات وتستقر بالقرب من حد أدنى.
يقلل النص البرمجي أدناه باستخدام PyTorch الخسارة w² انطلاقًا من نقطة البداية نفسها وباستخدام أربعة معدلات تعلّم:
import torch
# Minimize loss = w**2 (lowest at w = 0) from the same start with four learning rates
for lr in (0.01, 0.1, 0.9, 1.1):
w = torch.tensor(5.0, requires_grad=True)
optimizer = torch.optim.SGD([w], lr=lr)
path = []
for step in range(20):
optimizer.zero_grad()
loss = w**2
loss.backward()
optimizer.step() # w = w - lr * gradient
path.append(w.item())
print(f"lr={lr}: first steps {[round(v, 2) for v in path[:3]]}, after 20 steps w={path[-1]:.3f}")عند 0.01، لا يتغير الوزن إلا ببطء من 5 إلى 3.338 خلال 20 خطوة، وعند 0.1 يصل إلى 0.058. أما عند 0.9، فتتبدل إشارته في كل خطوة (−4.0، 3.2، −2.56)، ومع ذلك يتقارب إلى 0.058، بينما تتجاوز كل خطوة عند 1.1 القيمة السابقة أكثر، ليصل الوزن إلى 191.688. ولا يظل الانحدار المتدرج على دالة تربيعية مستقرًا إلا عندما يكون معدل التعلّم أقل من 2 مقسومة على انحناء الخسارة، أي مشتقتها الثانية. وانحناء w² يساوي 2، لذا فإن الحد هنا هو 1.0 تمامًا، ويصل معدل قدره 0.5 إلى الحد الأدنى في خطوة واحدة. وفي الشبكات الحقيقية، يحدد أشد اتجاهات الخسارة حدةً حدًا مماثلًا، ولذلك قد يؤدي معدل ينجح مع نموذج أو حجم دفعة إلى التباعد مع نموذج أو حجم دفعة آخر.
جداول معدلات التعلّم#
نادرًا ما يحافظ التدريب على معدل واحد من البداية إلى النهاية. إذ يغيّره الجدول بمرور الوقت:
- الإحماء: يبدأ بمعدل صغير ثم يرفعه تدريجيًا خلال العصور أو التكرارات الأولى، ما يمنع التدرجات الكبيرة والمتقلبة في بداية التدريب من زعزعة استقراره.
- الاضمحلال المرحلي: يقسم المعدل على عامل ثابت، غالبًا 10، عند عصور محددة أو عندما تستقر خسارة التحقق.
- الاضمحلال الخطي والجيبي: يخفض المعدل بسلاسة نحو قيمة نهائية صغيرة. ويتبع التلدين الجيبي نصف موجة جيبية، فيما يعيد متغير إعادة التشغيل الدافئ المعدل إلى قيمته المرتفعة عند بداية كل دورة جديدة.
- السياسات الدورية وسياسات الدورة الواحدة: حرّك المعدل بين حد أدنى وحد أعلى أثناء التدريب.
تُحرّك الخطوات الكبيرة في البداية الأوزان بسرعة نحو منطقة جيدة، وتتيح الخطوات الصغيرة في النهاية استقرارها عند قيمة صغرى بدلًا من التذبذب حولها. يبدأ YOLO26 التدريب في Ultralytics من lr0، ويجري الإحماء على مدى warmup_epochs (3 افتراضيًا)، ثم ينخفض خطيًا إلى lr0 * lrf، أو وفق منحنى جيبي مع cos_lr=True. باستخدام optimizer="auto" الافتراضي، يختار المدرّب المحسّن ومعدله الأولي تلقائيًا؛ فيستخدم MuSGD بمعدل 0.01 للتشغيلات التي تتجاوز 10,000 تكرار، وAdamW بمعدل ملائم لعدد الفئات فيما عدا ذلك، لذا لا ينطبق lr0 إلا عند ضبط المحسّن صراحةً:
from ultralytics import YOLO
# تحميل نموذج YOLO26 nano مُدرَّب مسبقًا
model = YOLO("yolo26n.pt")
# يؤدي تحديد محسّن صراحةً إلى تطبيق lr0؛ وينخفض المعدل إلى lr0 * lrf وفق منحنى جيبي
results = model.train(data="coco8.yaml", epochs=10, optimizer="SGD", lr0=0.01, lrf=0.01, cos_lr=True)اختيار قيمة ابتدائية#
تتراوح القيم الابتدائية الشائعة بين 0.01 و0.1 لـالانحدار التدرجي العشوائي (SGD) مع الزخم، وتبلغ 0.001 لـمحسّن Adam، وهي القيمة الافتراضية المقترحة في ورقة Adam. يستخدم الضبط الدقيق لنموذج مدرّب مسبقًا معدلًا أصغر من التدريب من الصفر، لأن الخطوات الكبيرة قد تمحو السمات التي تجعل التعلّم بالنقل فعالًا.
يجد اختبار نطاق معدل التعلّم الوارد في ورقة معدلات التعلّم الدورية نفسها، والمضمّن في fastai ضمن أداة البحث عن معدل التعلّم، قيمة مناسبة في تشغيل قصير واحد. يرفع الاختبار المعدل بعد كل دفعة مصغّرة مع تسجيل الخسارة، ويقع النطاق المفيد حيث تنخفض الخسارة بأسرع ما يمكن، قبل أن تتفاقم.
معدل التعلّم والمصطلحات المرتبطة به#
- خوارزمية التحسين: قاعدة التحديث التي تستخدم معدل التعلّم. تعدّل المحسّنات التكيفية مثل Adam خطوة كل وزن وفق سجل تدرّجه الخاص، لكنها تظل تضرب كل خطوة في معدل تعلّم عام واحد.
- الزخم: معلمة فائقة منفصلة تضيف جزءًا من التحديث السابق إلى التحديث الحالي، ما ينعّم المسار ويرفع حجم الخطوة الفعلي في الاتجاهات المتسقة.
- اضمحلال الأوزان: حدّ من التنظيم يقلّص الأوزان نفسها نحو الصفر في كل خطوة، بينما يقلّص اضمحلال معدل التعلّم حجم الخطوة بمرور الوقت.
- حجم الدفعة: عدد الأمثلة التي يُحسب متوسطها في كل تدرّج. تنتج الدفعات الأكبر تدرّجات أقل تشويشًا وتتحمل معدلات أعلى، وتضرب قاعدة التحجيم الخطي معدل التعلّم في k عندما يكبر حجم الدفعة بمقدار k.










