التحسين2017مبتدئ9 دقيقة قراءة
معدّلات التعلّم الدورية لتدريب الشبكات العصبية
Cyclical Learning Rates for Training Neural Networks
Smith, L. N. — WACV
المشكلة
معدّل التعلّم هو أكثر المعاملات الفائقة تأثيراً في تدريب الشبكات العصبية العميقة، ومع ذلك فإنّ ضبطه يظل عملية مُرهِقة من التجربة والخطأ. النهج السائد يقوم على اختيار قيمة ثابتة ثم إنقاصها تدريجياً أثناء . المشكلة أنّ القيمة المرتفعة جداً تجعل التدريب ينفجر ويتشتّت، والمنخفضة جداً تجعله يزحف ببطء شديد. يقضي الممارسون أياماً في البحث الشبكي عن القيمة المناسبة، ثم يكتشفون أنّ الجدول الذي نجح مع بنية معمارية معيّنة لا يصلح لبنية أخرى.
الإسهام
عائلة من سياسات معدّل التعلّم الدوري تجعل معدّل التعلّم يتأرجح بين حدٍّ أدنى وحدٍّ أعلى طوال التدريب، بدلاً من الاكتفاء بالإنقاص المستمر. إضافةً إلى ذلك، يقدّم سميث اختبار نطاق معدّل التعلّم — تجربة قصيرة واحدة يُرفع فيها المعدّل خطياً — لتحديد الحدود المناسبة تلقائياً. الجمع بين الأسلوبين يُغني عن الضبط اليدوي، ويؤدي في الغالب إلى تقارب أسرع، بل أحياناً إلى دقة أعلى ممّا يحققه أفضل جدول ثابت.
الأثر
تحوّل معدّل التعلّم الدوري إلى أداة عملية يعتمدها الممارسون يومياً، بدءاً من دورات fast.ai وصولاً إلى آلاف المشاريع البحثية والتطبيقية. اختبار نطاق معدّل التعلّم بالتحديد أصبح خطوة شبه إلزامية قبل أي عملية تدريب. الرؤية الجوهرية للورقة — أنّ رفع معدّل التعلّم مؤقتاً قد يكون مفيداً — ألهمت مباشرةً أسلوب SGDR (إعادة التشغيل بجيب التمام) وسياسة الدورة الواحدة، التي أصبحت الخيار الافتراضي في مكتبة جدولة PyTorch. باختصار، غيّرت هذه الورقة عقلية المجال من «أنقِص دائماً» إلى «تأرجَح بذكاء».
تخيّل أنك تقود سيارة عبر سلسلة جبال. التدريب بـ ثابت يتناقص باستمرار يشبه أن ترفع قدمك عن دواسة الوقود ببطء طوال الرحلة — ستمرّ في الوديان بأمان، لكنك ستعلق فوق كل هضبة مسطّحة.
معدّلات التعلّم الدورية تشبه سائقاً يدوس على الوقود فوق الهضاب ليتجاوزها بسرعة، ثم يرفع قدمه في المنحدرات ليهبط بدقة إلى قاع الوادي. دفعات السرعة المتكررة هي السرّ: تبدو متهورة للحظة، لكنها توصلك أسرع وغالباً إلى وادٍ أعمق وأفضل.
المشكلة: لعبة تخمين معدّل التعلّم
في كل خطوة من ، تُحدَّث الشبكة وفق القاعدة: ، حيث هو معدّل التعلّم. هذا الرقم الواحد يحدّد حجم كل خطوة تحديث:
- كبير جداً: الخطوات تتجاوز النقطة الدنيا وتنفجر — فيتشتّت التدريب تماماً.
- صغير جداً: الخطوات تتقدّم ببطء شديد، وغالباً يعلق في ضحلة أو فوق الهضاب المسطّحة عند .
- مضبوط تماماً: المشكلة أنّ القيمة المثالية تتغيّر أثناء التدريب. في البداية نحتاج خطوات كبيرة لإحراز تقدّم سريع، ولاحقاً نحتاج خطوات صغيرة لصقل الحل.
الأسلوب التقليدي هو جدول إنقاص تدريجي: ابدأ بقيمة معقولة (مثلاً 0.1)، ثم اقسمها على 10 كل . لكن تحديد قيمة البداية المناسبة ومُعامل القسمة وتوقيته يتطلّب بحثاً شبكياً مُكلفاً — وما ينجح مع ResNet على CIFAR-10 نادراً ما يصلح مع GoogLeNet على ImageNet.
الفكرة: دع معدّل التعلّم يتنفّس
الملاحظة الجوهرية لسميث تبدو غير بديهية: رفع معدّل التعلّم مؤقتاً قد يُسيء للأداء لحظياً، لكنه يُفيد التدريب على المدى البعيد. لماذا؟
تخيّل سطح الخسارة كتضاريس جبلية وعرة. معدّل التعلّم الثابت يجعل المُحسِّن يستقرّ في أقرب وادٍ — لكن ذلك الوادي قد يكون ضحلاً. دفعة مؤقتة بمعدّل أعلى تتيح للمُحسِّن أن يقفز فوق التلال المنخفضة ويستكشف وديان مجاورة قد تكون أعمق (خسارة أقل) وأعرض ( أفضل).
وبشكل أدقّ، أظهر Dauphin وزملاؤه أنّ العقبة الحقيقية في ليست النقاط الصُّغرى المحلية السيئة — بل نقاط السرج: مناطق مسطّحة يقترب فيها من الصفر فيتوقّف التقدّم. معدّل التعلّم الأعلى يمنح المُحسِّن الكافي لتجاوز هذه الهضاب.
من هنا تأتي الوصفة البسيطة: بدلاً من إنقاص فحسب، اجعله يتأرجح في دورات بين حدٍّ أدنى وحدٍّ أعلى . أبسط صيغة — السياسة المثلثية — ترفع القيمة خطياً من إلى خلال نصف دورة، ثم تخفضها خطياً في النصف الآخر.
سياسات معدّل التعلّم الدوري الثلاث
يقترح سميث ثلاث سياسات، تشترك جميعها في مبدأ التأرجح لكنها تختلف في طريقة تغيّر السعة مع مرور الوقت:
- المثلثية (triangular): معدّل التعلّم يصعد خطياً ثم يهبط خطياً بين حدّين ثابتين، ويتكرر باستمرار. هذا هو الخيار الأبسط والأكثر متانة.
- المثلثية2 (triangular2): الشكل المثلثي ذاته، لكنّ سعة التأرجح (الفرق بين الحدّ الأعلى والأدنى) تنخفض إلى النصف مع نهاية كل دورة. الفائدة أنّ الدورات الأولى تستكشف بجرأة، والدورات اللاحقة تُنقّح بدقة.
- النطاق الأُسّي (exp_range): الحدود نفسها تتقلّص أُسّياً بمعامل . هذا الخيار مفيد حين تريد تقلّصاً سلساً ومستمراً بدلاً من قفزات مفاجئة.
النتيجة واحدة في الحالات الثلاث: معدّل التعلّم يقضي معظم وقته في منطقة بين الحدّين، فإذا كانت القيمة المثلى تقع ضمن هذا النطاق، فإنّ المُحسِّن يمرّ عليها بانتظام.
الصياغة الرياضية: حساب المعدّل الدوري
قبل أن نرى الصيغة، لنبنِ الصورة الذهنية أولاً. تخيّل خطاً زمنياً مقسّماً إلى دورات متساوية، وكل دورة فيها نصف صاعد ونصف هابط. في أي لحظة أثناء التدريب نسأل: أين أنا داخل الدورة الحالية؟ الجواب هو رقم بين 0 و1 يُعبّر عن مقدار ما قطعناه من الصعود أو الهبوط. نضرب هذا الرقم في سعة التأرجح ونضيف الحدّ الأدنى — وهذا كل ما في الأمر.
في حالة المثلثية2: اقسم السعة على فتنخفض إلى النصف مع كل دورة جديدة. أمّا في النطاق الأُسّي: اضرب السعة في حيث قريبة من 1 (مثلاً 0.99994).
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
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.اختبار نطاق معدّل التعلّم: اكتشاف الحدود تلقائياً
معدّل التعلّم الدوري يحتاج إلى رقمين: و. السؤال: كيف نحدّدهما؟ هنا يأتي ابتكار سميث الذكي — اختبار نطاق معدّل التعلّم:
- ابدأ بمعدّل تعلّم صغير جداً (مثلاً ).
- درِّب لبضع حقب مع رفع خطّي لـمعدّل التعلّم بعد كل حتى يبلغ قيمة كبيرة (مثلاً 1.0).
- ارسم الخسارة (أو الدقة) مقابل معدّل التعلّم.
الرسم الناتج يُخبرك بكل شيء. النقطة التي تبدأ عندها الخسارة بالانخفاض هي المناسب. والنقطة التي تتوقف فيها عن الانخفاض وتبدأ بالصعود أو التذبذب العنيف هي المناسب. الاختبار لا يحتاج إلا تشغيلاً قصيراً واحداً — عادةً من 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 إمّا يُطابق أفضل جدول ثابت أو متناقص، أو يتفوّق عليه — وغالباً بعدد تكرارات أقل.
لماذا غيّر الممارسة العملية
2015
ورقة CLR (على arXiv)
نشر سميث النسخة الأولى التي قدّمت السياسة المثلثية واختبار نطاق معدّل التعلّم. فكرة بسيطة، عملية، وجاهزة للاستخدام مباشرة.
2017
نُشرت في مؤتمر WACV
النسخة النهائية أضافت تجارب على ResNets وDenseNets وStochastic Depth وImageNet، ممّا أكّد فاعلية CLR عبر بنى معمارية متنوعة.
2017
SGDR — إعادة التشغيل الدافئ
استبدل لوشيلوف وهَتر الشكل المثلثي بتلاشي جيب التمام مع إعادة تشغيل دورية. المبدأ مطابق لـ CLR: تأرجَح ولا تكتفِ بالإنقاص.
2018
التقارب الفائق وسياسة الدورة الواحدة
اكتشف سميث وتوبين أنّ اختيار نطاق CLR المناسب قد يُسرّع التدريب حتى 10 أضعاف. سياسة الدورة الواحدة أصبحت الإعداد الافتراضي في مكتبة fast.ai.
2019
CyclicLR وOneCycleLR في PyTorch
أضافت PyTorch مُجدوِلَي CyclicLR وOneCycleLR كمكوّنين مدمجين، فأصبح تفعيل CLR يتطلّب سطراً واحداً فقط في أي حلقة تدريب.
اختبار نطاق معدّل التعلّم وحده كان كافياً لجعل هذه الورقة مرجعاً أساسياً. ومع إضافة السياسات الدورية، حصل الممارسون على سير عمل متكامل ومنهجي: اختبر مرة واحدة، حدّد الحدود، شغّل الدورات، وانتهيت. لا تخمين، لا بحث شبكي، لا ساعات GPU مُهدَرة.
المرجعSmith, L. N.. Cyclical Learning Rates for Training Neural Networks. WACV, 2017.
مصطلحات هذه الورقة
- معدل التعلمLearning Rate
- جدول معدل التعلمLearning Rate Schedule
- التقارب الحسابيConvergence
- النقطة السرجيةSaddle Point
- المعلمة الفائقةHyperparameter
- الانحدار التدريجي العشوائيStochastic Gradient Descent (SGD)
- الزخمMomentum
- حجم الدفعة الحسابيةBatch Size
- الدورة التدريبية الشاملةEpoch
- خوارزمية آدامAdam
- الفقدLoss
- الـمُحسِّنOptimizer