التحسين2017متوسط10 دقيقة قراءة

SGDR: النزول الاشتقاقي العشوائي مع إعادة التشغيل الدافئة

SGDR: Stochastic Gradient Descent with Warm Restarts

Loshchilov, I. · Hutter, F. — ICLR

المشكلة

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

الإسهام

يستبدل SGDR الجدول الجامد بتلدين جيبي مع إعادة تشغيل دافئة تتكرّر دورياً. في كل دورة ينزل معدّل التعلّم بمنحنى جيب التمام من η_max إلى η_min، ثم يقفز مباشرةً إلى η_max — إعادة تشغيل «دافئة» لأن الأوزان تبقى كما هي ولا يُعاد تهيئتها. يمكن أيضاً مضاعفة طول الدورة بعد كل إعادة تشغيل (T_mult=2) بحيث يصبح الاستكشاف أدقّ مع الوقت. على مجموعتي CIFAR-10 وCIFAR-100، وصل SGDR إلى نتائج مكافئة أو أفضل بسرعة تفوق الجداول التقليدية 2 إلى 4 مرات. فوق ذلك، يمكن أخذ لقطات من النموذج عند نهاية كل دورة ودمجها في تجميعة تُحسّن الأداء بلا تكلفة إضافية.

الأثر

تحوّل إلى الجدول الافتراضي لمعدّل التعلّم في كل مكان تقريباً — من GPT وBERT إلى محوِّلات الرؤية وعملياً كل نموذج أساسي حديث. المؤلفان نفسهما عادا لاحقاً ودمجا مع فكّ الارتباط في تناقص الأوزان فأنتجا AdamW، وهو المُحسِّن الذي تعتمد عليه معظم النماذج اللغوية الكبيرة اليوم. وقد أثبت SGDR أيضاً أن جولة تدريب واحدة يمكن أن تُنتج عدّة نماذج متنوعة عبر .

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

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

المشكلة: الجداول الجامدة تُقيّد المُحسِّن

حين تدرّب شبكة عميقة باستخدام ، فإن هو ما يحدّد حجم الخطوة التي يتحرّك بها في كل تحديث: إذا كان كبيراً جداً يتذبذب التدريب، وإذا كان صغيراً جداً يزحف ببطء شديد. الطريقة السائدة عام 2016 كانت ما يُعرف بـ****: تبدأ بمعدّل تعلّم ثابت، ثم تقسمه على 5 أو 10 عند تختارها يدوياً (مثلاً الحقبة 60 ثم 120 ثم 160 من أصل 200).

هذا الأسلوب يعاني من مشكلتين أساسيتين:

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

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

افتح في المختبر
قارن بين الخفض المتدرّج (الأزرق) والتلدين الجيبي مع إعادة التشغيل الدافئة (الأخضر). لاحظ كيف يقفز SGDR دورياً إلى الأعلى فيمنح المُحسِّن طاقة جديدة للاستكشاف.
تستيقظ التجربة عند وصولك…

الفكرة: التلدين الجيبي مع إعادة تشغيل دورية

الفكرة الأساسية في SGDR هي استبدال الخفض المتدرّج بجدول سلس يتكرّر دورياً. في كل دورة طولها TiT_i حقبة، ينزل معدّل التعلّم على شكل منحنى تلدين جيبي من قيمته العليا ηmax\eta_{max} حتى يصل إلى ηmin\eta_{min} (عادةً صفر). وعند نهاية الدورة، يقفز مباشرةً إلى ηmax\eta_{max} — وهذه هي إعادة التشغيل الدافئة.

لماذا نختار شكل جيب التمام تحديداً؟ الفرق بينه وبين الانحدار الخطي البسيط أن المنحنى الجيبي يقضي وقتاً أطول عند القيم العالية (وهذا يساعد على الاستكشاف) ووقتاً أطول قرب الصفر (وهذا يساعد على الدقيق)، مع انتقال ناعم بين المرحلتين. تخيّل الفرق بين أن تضغط الفرامل بالتدريج وأن تدوس عليها فجأة.

وكلمة «دافئة» هنا جوهرية: النموذج يحتفظ بكل أوزانه المُتعلَّمة، والشيء الوحيد الذي يتغيّر هو معدّل التعلّم. هذا يعني أن كل إعادة تشغيل تنطلق من منطقة يعرفها النموذج ويراها واعدة، وليس من نقطة عشوائية لا علاقة لها بما تعلّمه.

ηt=ηmini+12(ηmaxiηmini)(1+cos(TcurTiπ))\eta_t = \eta_{\min}^{i} + \frac{1}{2}\left(\eta_{\max}^{i} - \eta_{\min}^{i}\right)\left(1 + \cos\left(\frac{T_{cur}}{T_i}\pi\right)\right)
جدول التلدين الجيبي — نبض قلب SGDRη_min وη_max يرسمان حدود معدّل التعلّم · T_cur هو عدد الحقب منذ آخر إعادة تشغيل · T_i طول الدورة الحالية · عند بداية الدورة (T_cur = 0) يكون الخرج 1 فيصبح η = η_max · عند نهايتها (T_cur = T_i) يصبح الخرج −1 فينزل η إلى η_min

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

افتح في المختبر
اسحب المزلاجين لتغيير T₀ (طول الدورة الأولى) وT_mult (مُعامل نمو الدورة). لاحظ كيف يتغيّر شكل الجدول حين تتضاعف الدورات وتستكشف مناطق أدقّ في كل مرة.
تستيقظ التجربة عند وصولك…

لماذا تُفيد إعادة التشغيل: الإفلات من النهايات الصغرى المحلية

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

حين يقفز معدّل التعلّم إلى الأعلى فجأة، تصبح خطوات كبيرة بما يكفي لدفع المعاملات فوق الحواجز المجاورة — تلال في سطح الخسارة كانت مستحيلة العبور بمعدّل تعلّم صغير. النموذج لا ينسى ما تعلّمه (فـالأوزان تبقى كما هي)، لكنه يستعيد القدرة على اتخاذ خطوات جريئة.

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

افتح في المختبر
شاهد كيف يتحرّك المُحسِّن عبر سطح الخسارة. بالخفض المتدرّج يعلق في الحوض (أ)، لكن إعادة تشغيل SGDR تدفعه فوق التلة ليصل إلى الحوض الأعمق (ب).
تستيقظ التجربة عند وصولك…

مضاعفة أطوال الدورات: من مسح واسع إلى تلميع دقيق

الحيلة الثانية في SGDR هي نموّ الدورات بالمضاعفة. بدلاً من أن تكون كل الدورات بنفس الطول، كل دورة جديدة تصبح أطول من سابقتها بمقدار TmultT_{mult} مرة. فمثلاً مع T0=1T_0 = 1 وTmult=2T_{mult} = 2، تكون الدورات: 1، 2، 4، 8، 16، 32، … حقبة.

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

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

تجميعة اللقطات: نماذج متعددة من جولة تدريب واحدة

في كل مرة يصل فيها معدّل التعلّم إلى ηmin\eta_{min} — أي قبل إعادة التشغيل مباشرةً — يكون النموذج قد استقرّ في قاع حوض مختلف عن المرات السابقة. أظهر الباحثان (بناءً على عمل Huang وزملائه) أنه بمجرد حفظ لقطة من النموذج عند كل نقطة من هذه النقاط ثم حساب متوسط تنبؤاتها، تحصل على تجميعة لقطات قوية — بلا أي تكلفة إضافية.

لماذا ينجح هذا الأسلوب؟ لأن كل لقطة جاءت من حوض مختلف في سطح الخسارة، فأخطاء النماذج المختلفة غير مترابطة إلى حدّ كبير. حين يُخطئ أحد النماذج في مثال ما، الأرجح أن البقية ستصيب. على CIFAR-10 مثلاً، نموذج WRN-28-10 وحده سجّل خطأ 4.03%؛ دمج 3 لقطات من جولة واحدة أنزله إلى 3.51%؛ و16 جولة × 3 لقطات وصلت إلى 3.14% — وكانت أفضل نتيجة في حينها.

في التقليدية تحتاج لتدريب N نموذج مستقل، أي N ضعف الحوسبة. أما تجميعة اللقطات فتعطيك M نموذج من جولة تدريب واحدة فقط — أي أنها مجانية فعلياً.

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

الفكرة ذاتها في شيفرة برمجية

التلدين الجيبي مع إعادة التشغيل الدافئة، من الصفرpython

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

import math

def sgdr_lr(epoch, T_0, T_mult=1, eta_max=0.05, eta_min=0):
    """أعد معدّل التعلّم عند حقبة معينة وفق SGDR."""
    # حدّد في أي دورة نحن وكم قطعنا منها
    if T_mult == 1:
        cycle = epoch // T_0
        T_cur = epoch - cycle * T_0
        T_i = T_0
    else:
        # متسلسلة هندسية: أطوال الدورات T_0, T_0*T_mult, T_0*T_mult^2, ...
        cycle = 0
        t_acc = T_0
        while t_acc <= epoch:
            cycle += 1
            t_acc += T_0 * (T_mult ** cycle)
        T_i = T_0 * (T_mult ** cycle)
        T_cur = epoch - (t_acc - T_i)

    # معادلة التلدين الجيبي (المعادلة 5 في الورقة)
    lr = eta_min + 0.5 * (eta_max - eta_min) * (1 + math.cos(math.pi * T_cur / T_i))
    return lr

# مثال: T_0=10, T_mult=2 ← دورات بأطوال 10, 20, 40, 80, ...
for epoch in range(160):
    lr = sgdr_lr(epoch, T_0=10, T_mult=2, eta_max=0.05)
    # استخدم lr في مُحسِّنك: optimizer.param_groups[0]['lr'] = lr

النتائج — أسرع وأفضل

جرّب الباحثان SGDR على شبكات متبقية عريضة (WRN-28-10 بـ 36.5 مليون معامل) على مجموعتي CIFAR-10 وCIFAR-100. مع الإعدادات T0=10T_0 = 10 وTmult=2T_{mult} = 2، وصل الخطأ إلى حوالي 4.03% على CIFAR-10 و19.58% على CIFAR-100 — نتائج مكافئة أو أفضل من الجدول التقليدي، لكنها تصل إلى معدّلات خطأ جيدة أسرع بـ 2 إلى 4 مرات.

حين استُخدمت شبكات أعرض (WRN-28-20 بـ 145.8 مليون معامل) تحسّنت النتائج أكثر: 3.74% على CIFAR-10 و18.70% على CIFAR-100 مع SGDR. الجدول السريع أتاح للباحثين تجربة شبكات أكبر دون زيادة وقت الانتظار الفعلي، لأن النموذج يعطي نتيجة جيدة من الدورات القصيرة الأولى.

ولم يقتصر الأمر على تصنيف الصور — فقد حسّن SGDR النتائج أيضاً على تسجيلات تخطيط كهربائية الدماغ ونسخة مصغّرة من ImageNet، مما يُظهر أن الطريقة تعمل بشكل عام عبر مجالات مختلفة.

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

الإرث: من SGDR إلى AdamW والتدريب الحديث

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

أما التلدين الجيبي نفسه فقد انتشر في كل مكان. تقريباً كل وصفة تدريب حديثة تعتمد عليه: GPT-3 وBERT وViT وStable Diffusion وLLaMA — كلها تستخدم ، عادةً مع مرحلة في البداية. وكل ما يُسمّى «الجدول الجيبي» في هذه الأعمال يعود مباشرةً إلى المعادلة (5) في ورقة SGDR.

  1. 2015

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

    أول من اقترح تغيير معدّل التعلّم بشكل دوري أثناء التدريب باستخدام نوافذ مثلثية. الفكرة قريبة من روح SGDR، لكنها لم تستخدم المنحنى الجيبي ولم تطرح مفهوم إعادة التشغيل الدافئة.

  2. 2017

    SGDR (هذه الورقة)

    قدّمت تلديناً جيبياً مع إعادة تشغيل دافئة ودورات تتضاعف أطوالها. حقّقت أفضل النتائج على CIFAR وأثبتت جدوى تجميعة اللقطات.

  3. 2017

    تجميعة اللقطات (هوانغ وزملاؤه)

    أضفى صياغة رسمية على فكرة أخذ لقطات عند نقاط إعادة تشغيل SGDR لبناء تجميعات. الشعار: «درّب مرة واحصل على M نماذج مجاناً».

  4. 2019

    AdamW (لوشتشيلوف وهوتر)

    المؤلفان نفسهما وجدا أن تطبيق إعادة التشغيل الدافئة مع Adam كشف خللاً في طريقة تعامل المُحسِّنات التكيّفية مع تنظيم L2، فطوّرا تناقص الأوزان المفكوك — أي AdamW — المُحسِّن الذي تعتمد عليه GPT وBERT ومعظم النماذج اللغوية الكبيرة.

  5. 2020

    تبنّي الجدول الجيبي عالمياً

    GPT-3 وViT ونماذج بارزة أخرى اعتمدت جميعها جداول التلدين الجيبي. المنحنى الجيبي الذي اقترحه SGDR تحوّل إلى المعيار الصناعي السائد.

المسار من SGDR إلى هو قصة أفكار تتراكم فوق بعضها. التلدين الجيبي حلّ مشكلة الجدول الهشّ. إعادة التشغيل الدافئة كشفت مشكلة تناقص الأوزان. تناقص الأوزان المفكوك أصبح حجر الأساس في أمثَلة الحديثة. وكل هذا بدأ من سؤال بسيط: ماذا لو أعدنا رفع معدّل التعلّم من جديد؟

المرجعLoshchilov, Hutter. SGDR: Stochastic Gradient Descent with Warm Restarts. ICLR, 2017.

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