التحسين2017مبتدئ9 دقيقة قراءة

معدّلات التعلّم الدورية لتدريب الشبكات العصبية

Cyclical Learning Rates for Training Neural Networks

Smith, L. N. — WACV

المشكلة

معدّل التعلّم هو أكثر المعاملات الفائقة تأثيراً في تدريب الشبكات العصبية العميقة، ومع ذلك فإنّ ضبطه يظل عملية مُرهِقة من التجربة والخطأ. النهج السائد يقوم على اختيار قيمة ثابتة ثم إنقاصها تدريجياً أثناء . المشكلة أنّ القيمة المرتفعة جداً تجعل التدريب ينفجر ويتشتّت، والمنخفضة جداً تجعله يزحف ببطء شديد. يقضي الممارسون أياماً في البحث الشبكي عن القيمة المناسبة، ثم يكتشفون أنّ الجدول الذي نجح مع بنية معمارية معيّنة لا يصلح لبنية أخرى.

الإسهام

عائلة من سياسات معدّل التعلّم الدوري تجعل معدّل التعلّم يتأرجح بين حدٍّ أدنى وحدٍّ أعلى طوال التدريب، بدلاً من الاكتفاء بالإنقاص المستمر. إضافةً إلى ذلك، يقدّم سميث اختبار نطاق معدّل التعلّم — تجربة قصيرة واحدة يُرفع فيها المعدّل خطياً — لتحديد الحدود المناسبة تلقائياً. الجمع بين الأسلوبين يُغني عن الضبط اليدوي، ويؤدي في الغالب إلى تقارب أسرع، بل أحياناً إلى دقة أعلى ممّا يحققه أفضل جدول ثابت.

الأثر

تحوّل معدّل التعلّم الدوري إلى أداة عملية يعتمدها الممارسون يومياً، بدءاً من دورات fast.ai وصولاً إلى آلاف المشاريع البحثية والتطبيقية. اختبار نطاق معدّل التعلّم بالتحديد أصبح خطوة شبه إلزامية قبل أي عملية تدريب. الرؤية الجوهرية للورقة — أنّ رفع معدّل التعلّم مؤقتاً قد يكون مفيداً — ألهمت مباشرةً أسلوب SGDR (إعادة التشغيل بجيب التمام) وسياسة الدورة الواحدة، التي أصبحت الخيار الافتراضي في مكتبة جدولة PyTorch. باختصار، غيّرت هذه الورقة عقلية المجال من «أنقِص دائماً» إلى «تأرجَح بذكاء».

تخيّل أنك تقود سيارة عبر سلسلة جبال. التدريب بـ ثابت يتناقص باستمرار يشبه أن ترفع قدمك عن دواسة الوقود ببطء طوال الرحلة — ستمرّ في الوديان بأمان، لكنك ستعلق فوق كل هضبة مسطّحة.

معدّلات التعلّم الدورية تشبه سائقاً يدوس على الوقود فوق الهضاب ليتجاوزها بسرعة، ثم يرفع قدمه في المنحدرات ليهبط بدقة إلى قاع الوادي. دفعات السرعة المتكررة هي السرّ: تبدو متهورة للحظة، لكنها توصلك أسرع وغالباً إلى وادٍ أعمق وأفضل.

المشكلة: لعبة تخمين معدّل التعلّم

في كل خطوة من ، تُحدَّث الشبكة وفق القاعدة: θt=θt1ηL\theta_t = \theta_{t-1} - \eta \cdot \nabla L، حيث η\eta هو معدّل التعلّم. هذا الرقم الواحد يحدّد حجم كل خطوة تحديث:

  • كبير جداً: الخطوات تتجاوز النقطة الدنيا وتنفجر — فيتشتّت التدريب تماماً.
  • صغير جداً: الخطوات تتقدّم ببطء شديد، وغالباً يعلق في ضحلة أو فوق الهضاب المسطّحة عند .
  • مضبوط تماماً: المشكلة أنّ القيمة المثالية تتغيّر أثناء التدريب. في البداية نحتاج خطوات كبيرة لإحراز تقدّم سريع، ولاحقاً نحتاج خطوات صغيرة لصقل الحل.

الأسلوب التقليدي هو جدول إنقاص تدريجي: ابدأ بقيمة معقولة (مثلاً 0.1)، ثم اقسمها على 10 كل NN . لكن تحديد قيمة البداية المناسبة ومُعامل القسمة وتوقيته يتطلّب بحثاً شبكياً مُكلفاً — وما ينجح مع ResNet على CIFAR-10 نادراً ما يصلح مع GoogLeNet على ImageNet.

افتح في المختبر
اضغط «تدريب!» لتشاهد سباقاً بين معدّل تعلّم ثابت وآخر دوري. لاحظ كيف يصل الدوري إلى الدقة نفسها في وقت أقصر بكثير.
تستيقظ التجربة عند وصولك…

الفكرة: دع معدّل التعلّم يتنفّس

الملاحظة الجوهرية لسميث تبدو غير بديهية: رفع معدّل التعلّم مؤقتاً قد يُسيء للأداء لحظياً، لكنه يُفيد التدريب على المدى البعيد. لماذا؟

تخيّل سطح الخسارة كتضاريس جبلية وعرة. معدّل التعلّم الثابت يجعل المُحسِّن يستقرّ في أقرب وادٍ — لكن ذلك الوادي قد يكون ضحلاً. دفعة مؤقتة بمعدّل أعلى تتيح للمُحسِّن أن يقفز فوق التلال المنخفضة ويستكشف وديان مجاورة قد تكون أعمق (خسارة أقل) وأعرض ( أفضل).

وبشكل أدقّ، أظهر Dauphin وزملاؤه أنّ العقبة الحقيقية في ليست النقاط الصُّغرى المحلية السيئة — بل نقاط السرج: مناطق مسطّحة يقترب فيها من الصفر فيتوقّف التقدّم. معدّل التعلّم الأعلى يمنح المُحسِّن الكافي لتجاوز هذه الهضاب.

من هنا تأتي الوصفة البسيطة: بدلاً من إنقاص η\eta فحسب، اجعله يتأرجح في دورات بين حدٍّ أدنى ηmin\eta_{min} وحدٍّ أعلى ηmax\eta_{max}. أبسط صيغة — السياسة المثلثية — ترفع القيمة خطياً من ηmin\eta_{min} إلى ηmax\eta_{max} خلال نصف دورة، ثم تخفضها خطياً في النصف الآخر.

افتح في المختبر
شاهد كيف يعلق المعدّل الثابت فوق هضبة نقطة السرج، بينما يتجاوزها المعدّل الدوري ويكمل طريقه.
تستيقظ التجربة عند وصولك…

سياسات معدّل التعلّم الدوري الثلاث

يقترح سميث ثلاث سياسات، تشترك جميعها في مبدأ التأرجح لكنها تختلف في طريقة تغيّر السعة مع مرور الوقت:

  • المثلثية (triangular): معدّل التعلّم يصعد خطياً ثم يهبط خطياً بين حدّين ثابتين، ويتكرر باستمرار. هذا هو الخيار الأبسط والأكثر متانة.
  • المثلثية2 (triangular2): الشكل المثلثي ذاته، لكنّ سعة التأرجح (الفرق بين الحدّ الأعلى والأدنى) تنخفض إلى النصف مع نهاية كل دورة. الفائدة أنّ الدورات الأولى تستكشف بجرأة، والدورات اللاحقة تُنقّح بدقة.
  • النطاق الأُسّي (exp_range): الحدود نفسها تتقلّص أُسّياً بمعامل γiteration\gamma^{\text{iteration}}. هذا الخيار مفيد حين تريد تقلّصاً سلساً ومستمراً بدلاً من قفزات مفاجئة.

النتيجة واحدة في الحالات الثلاث: معدّل التعلّم يقضي معظم وقته في منطقة بين الحدّين، فإذا كانت القيمة المثلى تقع ضمن هذا النطاق، فإنّ المُحسِّن يمرّ عليها بانتظام.

افتح في المختبر
جرّب التبديل بين السياسات الثلاث مع تعديل الحدود وحجم الخطوة. لاحظ كيف تتضيّق تأرجحات المثلثية2 دورة بعد دورة.
تستيقظ التجربة عند وصولك…

الصياغة الرياضية: حساب المعدّل الدوري

قبل أن نرى الصيغة، لنبنِ الصورة الذهنية أولاً. تخيّل خطاً زمنياً مقسّماً إلى دورات متساوية، وكل دورة فيها نصف صاعد ونصف هابط. في أي لحظة أثناء التدريب نسأل: أين أنا داخل الدورة الحالية؟ الجواب هو رقم xx بين 0 و1 يُعبّر عن مقدار ما قطعناه من الصعود أو الهبوط. نضرب هذا الرقم في سعة التأرجح ونضيف الحدّ الأدنى — وهذا كل ما في الأمر.

η(t)=ηmin+(ηmaxηmin)max ⁣(0,  1tstepsize2cycle+1)\eta(t) = \eta_{min} + (\eta_{max} - \eta_{min}) \cdot \max\!\bigl(0,\; 1 - \bigl| \tfrac{t}{\text{stepsize}} - 2\,\text{cycle} + 1 \bigr|\bigr)
سياسة معدّل التعلّم الدوري المثلثيةcycle = ⌊1 + t/(2·stepsize)⌋ · stepsize = نصف الدورة (بعدد التكرارات) · η يتأرجح خطياً بين η_min وη_max كل 2·stepsize تكرار.

في حالة المثلثية2: اقسم السعة على 2cycle12^{\text{cycle}-1} فتنخفض إلى النصف مع كل دورة جديدة. أمّا في النطاق الأُسّي: اضرب السعة في γt\gamma^t حيث γ\gamma قريبة من 1 (مثلاً 0.99994).

معدّل التعلّم الدوري المثلثي في 5 أسطر بايثونpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import math

def triangular_clr(iteration, base_lr=0.001, max_lr=0.006, stepsize=2000):
    """أعد معدّل التعلّم عند تكرار معيّن."""
    cycle = math.floor(1 + iteration / (2 * stepsize))
    x = abs(iteration / stepsize - 2 * cycle + 1)
    return base_lr + (max_lr - base_lr) * max(0, 1 - x)

# مثال: stepsize=2000 يعني أن الدورة الكاملة = 4000 تكرار.
# عند التكرار 0 ← lr=0.001؛ عند 2000 ← lr=0.006؛ عند 4000 ← lr=0.001.

اختبار نطاق معدّل التعلّم: اكتشاف الحدود تلقائياً

معدّل التعلّم الدوري يحتاج إلى رقمين: ηmin\eta_{min} وηmax\eta_{max}. السؤال: كيف نحدّدهما؟ هنا يأتي ابتكار سميث الذكي — اختبار نطاق معدّل التعلّم:

  1. ابدأ بمعدّل تعلّم صغير جداً (مثلاً 10710^{-7}).
  2. درِّب لبضع حقب مع رفع خطّي لـمعدّل التعلّم بعد كل حتى يبلغ قيمة كبيرة (مثلاً 1.0).
  3. ارسم الخسارة (أو الدقة) مقابل معدّل التعلّم.

الرسم الناتج يُخبرك بكل شيء. النقطة التي تبدأ عندها الخسارة بالانخفاض هي ηmin\eta_{min} المناسب. والنقطة التي تتوقف فيها عن الانخفاض وتبدأ بالصعود أو التذبذب العنيف هي ηmax\eta_{max} المناسب. الاختبار لا يحتاج إلا تشغيلاً قصيراً واحداً — عادةً من 1 إلى 3 حقب — ويُغنيك عن أيام من البحث الشبكي.

افتح في المختبر
محاكاة لاختبار نطاق معدّل التعلّم. المنحنى يكشف النطاق المفيد بين الخطين العموديين — وهذه هي الحدود التي ستستخدمها في سياستك الدورية.
تستيقظ التجربة عند وصولك…

اختيار طول الدورة

المُعامل الثالث هو حجم الخطوة (stepsize) — أي عدد التكرارات في نصف دورة. توصية سميث هي ضبطه بين 2 إلى 10 أضعاف عدد التكرارات في حقبة تدريبية واحدة. على سبيل المثال: مجموعة CIFAR-10 تحتوي 50,000 صورة مع يساوي 100، أي أنّ الحقبة = 500 تكرار. حجم خطوة بين 2,000 و5,000 يؤدي الغرض.

من التجارب تبرز قاعدتان عمليتان:

  • نفّذ 3 دورات كاملة على الأقل حتى يستكشف معدّل التعلّم سطح الخسارة استكشافاً كافياً. أربع دورات فأكثر تعطي نتائج أفضل.
  • أوقف التدريب في نهاية دورة — أي عندما يكون معدّل التعلّم عند حدّه الأدنى والدقة في ذروتها. إيقاف التدريب في منتصف دورة يعني إهدار مرحلة الاستكشاف التي أجراها المعدّل العالي دون حصاد نتائجها.
افتح في المختبر
أدخل حجم مجموعة البيانات وحجم الدفعة وعدد الدورات المطلوبة، وسيُحسب لك حجم الخطوة المناسب تلقائياً.
تستيقظ التجربة عند وصولك…

معدّل التعلّم الدوري يعمل مع المُحسِّنات التكيّفية أيضاً

سؤال طبيعي: هل معدّلات التعلّم الدورية تفيد فقط مع الانحدار التدريجي العشوائي العادي؟ اختبر سميث CLR مع عدة مُحسِّنات تكيّفية على CIFAR-10: منها زخم نسترُوف، و، وRMSProp، وAdaGrad، وAdaDelta. النتائج كانت واضحة:

  • مع نسترُوف+CLR: التدريب يصل إلى دقة 81.3% في 25,000 تكرار — بينما يحتاج نسترُوف وحده إلى 70,000 تكرار لتحقيق النتيجة ذاتها.
  • مع Adam: المكاسب متواضعة، لأنّ المعدّل التكيّفي يعالج جزءاً كبيراً من المشكلة بنفسه أصلاً.
  • مع AdaGrad+CLR: الدقة قفزت من 74.6% إلى 76.0% في ثلث عدد التكرارات.

الخلاصة أنّ CLR أداة مُكمِّلة لا مُنافِسة. المُحسِّنات التكيّفية تضبط معدّلات التعلّم لكل على حدة، بينما CLR يضبط جدول المعدّل الشامل. كلاهما يحلّ مشكلة مختلفة، ويمكن استخدامهما معاً.

النتائج عبر بنى معمارية متعددة

اختبر سميث CLR على تشكيلة متنوعة من البنى ومجموعات البيانات عمداً، ليُثبت أنّ الأسلوب ليس خدعة تنفع في حالة واحدة:

  • CIFAR-10 (خط أساس Caffe): المثلثية2 وصلت إلى دقة 81.4% في 25,000 تكرار بدلاً من 70,000 — أي تسريع بمقدار 2.8 ضعف.
  • ResNet-56 على CIFAR-10/100: CLR رفع الدقة من 92.8% إلى 93.6% على CIFAR-10، ومن 71.2% إلى 72.5% على CIFAR-100.
  • DenseNet على CIFAR-10/100: الدقة ارتفعت من 94.5% إلى 94.9% على CIFAR-10، ومن 75.3% إلى 75.9% على CIFAR-100.
  • AlexNet على ImageNet: المثلثية2 حسّنت الدقة من 58.0% إلى 58.4%.
  • GoogLeNet على ImageNet: المثلثية2 حسّنت الدقة من 63.0% إلى 64.4% — وهو فارق ملموس على نطاق ImageNet.

النمط واضح ومتسق: CLR إمّا يُطابق أفضل جدول ثابت أو متناقص، أو يتفوّق عليه — وغالباً بعدد تكرارات أقل.

افتح في المختبر
قارن دقة المعدّل الثابت مع CLR عبر البنى المعمارية المختلفة. مرّر المؤشر فوق أي عمود لرؤية التفاصيل.
تستيقظ التجربة عند وصولك…

لماذا غيّر الممارسة العملية

  1. 2015

    ورقة CLR (على arXiv)

    نشر سميث النسخة الأولى التي قدّمت السياسة المثلثية واختبار نطاق معدّل التعلّم. فكرة بسيطة، عملية، وجاهزة للاستخدام مباشرة.

  2. 2017

    نُشرت في مؤتمر WACV

    النسخة النهائية أضافت تجارب على ResNets وDenseNets وStochastic Depth وImageNet، ممّا أكّد فاعلية CLR عبر بنى معمارية متنوعة.

  3. 2017

    SGDR — إعادة التشغيل الدافئ

    استبدل لوشيلوف وهَتر الشكل المثلثي بتلاشي جيب التمام مع إعادة تشغيل دورية. المبدأ مطابق لـ CLR: تأرجَح ولا تكتفِ بالإنقاص.

  4. 2018

    التقارب الفائق وسياسة الدورة الواحدة

    اكتشف سميث وتوبين أنّ اختيار نطاق CLR المناسب قد يُسرّع التدريب حتى 10 أضعاف. سياسة الدورة الواحدة أصبحت الإعداد الافتراضي في مكتبة fast.ai.

  5. 2019

    CyclicLR وOneCycleLR في PyTorch

    أضافت PyTorch مُجدوِلَي CyclicLR وOneCycleLR كمكوّنين مدمجين، فأصبح تفعيل CLR يتطلّب سطراً واحداً فقط في أي حلقة تدريب.

اختبار نطاق معدّل التعلّم وحده كان كافياً لجعل هذه الورقة مرجعاً أساسياً. ومع إضافة السياسات الدورية، حصل الممارسون على سير عمل متكامل ومنهجي: اختبر مرة واحدة، حدّد الحدود، شغّل الدورات، وانتهيت. لا تخمين، لا بحث شبكي، لا ساعات GPU مُهدَرة.

المرجعSmith, L. N.. Cyclical Learning Rates for Training Neural Networks. WACV, 2017.

مصطلحات هذه الورقة