كيف يمكن تصحيح أخطاء التحسين والحدّ منها؟
ملخص: إذا كان النموذج يواجه صعوبات في التحسين، فمن المهم إصلاحها قبل تجربة أشياء أخرى. يعد تشخيص وتصحيح حالات فشل التدريب مجالاً نشطًا من البحث.
![رسم بياني يقارن بين Standard BaseResNet وStride 1x1wideResNet
المحور ص هو معدل أخطاء الاختبار؛ والمحور س هو معدل التعلم الأساسي.
تشهد شركة UIResNet العادية انخفاضًا تدريجيًا في TestErrorRate
مع زيادة معدّل التعلّم الأساسي. في المقابل، تواجه StridewideResNet تقلّبات حادة مع زيادة معدّل التعلّم الأساسي.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/stride_instability.png?authuser=7&hl=ar)
لاحظ ما يلي حول الشكل 4:
- لا يؤدي تغيير الخطوات إلى خفض مستوى الأداء عند انخفاض معدلات التعلُّم.
- لم تعد معدّلات التعلُّم العالية تدريبًا جيدًا بسبب عدم الاستقرار.
- يؤدي تطبيق 1000 خطوة من إحماء معدل التعلم إلى حل هذه المشكلة المحددة لعدم الاستقرار، مما يسمح بالتدريب الثابت على أقصى معدل تعلم يبلغ 0.1.
تحديد أعباء العمل غير المستقرة
يصبح أي عبء عمل غير مستقر إذا كان معدّل التعلّم كبيرًا جدًا. مشكلة عدم الاستقرار هي فقط عندما تجبرك على استخدام معدل تعلم صغير جدًا. هناك نوعان على الأقل من عدم استقرار التدريب يستحقان التمييز بينهما:
- عدم الثبات عند الإعداد أو في وقت مبكر من التدريب.
- عدم استقرار مفاجئ في منتصف التدريب.
يمكنك اتّباع نهج منظم لتحديد مشاكل الثبات ضمن عبء العمل من خلال تنفيذ ما يلي:
- قم بإجراء مسح لمعدل التعلم واعثر على أفضل معدل تعلم lr*.
- وارسم منحنيات لخسارة التطبيق لمعدلات التعلُّم أعلى من تلك التي تزيد عن lr*.
- إذا أظهرت معدلات التعلم > lr* عدم استقرار الخسارة (ارتفعت نسبة الخسارة أثناء فترات التدريب)، فسيؤدي إصلاح عدم الاستقرار عادةً إلى تحسين التدريب.
تسجيل معيار L2 لتدرج الخسارة الكاملة أثناء التدريب، نظرًا لأن القيم الاستثنائية يمكن أن تتسبب في عدم استقرار زائف في منتصف التدريب. قد يوضح هذا مدى قوة قص التدرجات أو تحديثات الوزن.
ملاحظة: تُظهر بعض النماذج عدم استقرار مبكّر جدًا متبوعًا باسترداد يؤدي إلى تدريب بطيء ولكن ثابت. يمكن أن تفوت جداول التقييم الشائعة هذه المشكلات من خلال عدم التقييم بشكل متكرر بما فيه الكفاية!
للتأكد من ذلك، يمكنك التدرّب على عملية تشغيل مختصرة لحوالي 500 خطوة فقط
باستخدام lr = 2 * current best
، ولكن مع تقييم كل خطوة.
![هناك رسمان بيانيان: المحور س في كلا الرسمَين البيانيين هو "الخطوة العالمية"، والمحور ص في الرسمَين البيانيين هو "خسارة القطار". يقارن كلا الرسمَين البيانيَين بين "خطوة الإحالة الناجحة" البالغة (2,2) و"خطوة الإحالة الناجحة" البالغة (1,1). يعرض الرسم البياني الأول التقييمات
كل 1,000 خطوة. في هذا الرسم البياني الأول، تُظهر "خطوات الإحالة الناجحة"
انحدارًا ثابتًا تدريجيًا مع مزيد من الخطوات الشاملة. ويعرض الرسم البياني الثاني تقييمات متكررة في أول 25 خطوة. في هذا الرسم البياني الثاني، تُظهر خطوة "الإحالة الناجحة" (2,2) تقلبات كبيرة في معدّل "فقدان القطار" خلال الخطوات العالمية القليلة الأولى قبل أن تصبح انخفاضًا أكثر اتساقًا
بمقدار 20 خطوة عالمية. تشير خطوة الإحالة الناجحة (1,1) إلى انخفاض معدّل خسارة القطار بشكل مستمر حتى بعد الخطوة العالمية الأولى.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/more_frequent_evals.png?authuser=7&hl=ar)
الإصلاحات المحتمَلة لأنماط عدم الاستقرار الشائعة
يمكنك تجربة الإصلاحات التالية المحتملة لأنماط عدم الاستقرار الشائعة:
- تطبيق إحماء معدّل التعلّم هذا هو الأفضل لعدم استقرار التدريب المبكر.
- تطبيق اقتصاص التدرج. يُعد هذا أمرًا جيدًا لكل من عدم الاستقرار المبكر والمنتصف، وقد يؤدي إلى إصلاح بعض عمليات الإعداد السيئة التي لا يمكن لعملية الإحماء.
- جرّب محسنًا جديدًا. يستطيع آدم أحيانًا التعامل مع حالات عدم الاستقرار التي لا يستطيع الزخم القيام بها. هذا مجال بحث نشط.
- تأكّد من أنّك تستخدِم أفضل الممارسات وأفضل عمليات الإعداد لبنية النموذج (ستأتي الأمثلة التالية). أضف الاتصالات المتبقية والتسويات إذا لم يكن النموذج يحتوي عليها بالفعل.
- احرص على أن تكون العملية الأخيرة قبل القيمة المتبقية. مثلاً:
x + Norm(f(x))
. يُرجى العِلم أنّNorm(x + f(x))
قد يتسبب في حدوث مشاكل. - جرِّب إعداد الفروع المتبقية لتصبح 0. (يمكنك الاطّلاع على مقالة ReZero هي كل ما تحتاج إليه: تقارب سريع وتفصيلي على نطاق واسع.)
- خفض معدّل التعلّم هذا هو الخيار الأخير.
مرحلة إحماء معدّل التعلّم
![رسمان بيانيان يوضحان التجربة نفسها. في الرسم البياني الأول، يمثّل المحور س "الخطوة الشاملة" والمحور ص هو "فقدان القطار". بسبب انخفاض معدّل
التعلّم، كان معدّل خسارة القطارات غير مستقر على الإطلاق.
ومع ارتفاع معدّلات التعلّم، كان معدّل "فقدان القطار"
أكثر ثباتًا.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/instability_during_warmup.png?authuser=7&hl=ar)
متى يجب إحماء معدّل التعلّم؟
![رسم بياني لخسارة القصور المتقاطع على مجموعة التحقق (المحور ص) مقابل معدّل التعلّم الأساسي (المحور السيني). يعرض الرسم البياني ست تجارب عملية،
ولكل تجاربها معدّل تعلُّم أساسي منخفض نسبيًا. تنخفض معدّل التحقق من الصحة مع زيادة معدّل التعلّم الأساسي، ثم يصل إلى نقطة منخفضة قبل البدء في الزيادة. يعرض الرسم البياني أيضًا أربع تجارب غير قابلة للتنفيذ، ولكل منها معدّل تعلُّم أساسي مرتفع نسبيًا.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/axis_model_with_instability.png?authuser=7&hl=ar)
![رسم بياني لخسارة القصور المتقاطع على مجموعة التطبيق (المحور ص) مقابل الخطوة العالمية (المحور السيني). ينخفض عدد الخسائر بسرعة كبيرة في الخطوات العالمية الأولية. بعد ذلك، يزداد عدد الخسارة بشكل كبير عند حوالي 10,000 خطوة. وبعد ذلك،
ينخفض عدد الخسارة تدريجيًا إلى حوالي 15,000 خطوة.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/loss_model_with_instability.png?authuser=7&hl=ar)
يوضّح الشكل 7أ مخططًا لمحور المعلَمة الفائقة، يشير إلى أنّ النموذج يعاني من حالات عدم استقرار في التحسين، لأنّ أفضل معدّل للتعلّم يقع في حافة عدم الاستقرار.
يوضح الشكل 7ب كيف يمكن التحقق مرة أخرى من ذلك عن طريق فحص فقدان التدريب لنموذج تم تدريبه بمعدل تعلم إما 5 أضعاف أو 10 مرات أكبر من هذه الذروة. إذا أظهر هذا المخطط ارتفاعًا مفاجئًا في الخسارة بعد انخفاض ثابت (على سبيل المثال، عند الخطوة 10 آلاف تقريبًا في الشكل أعلاه)، فمن المحتمل أن يعاني النموذج من عدم استقرار التحسين.
كيفية تطبيق مرحلة إحماء معدّل التعلّم
![رسم بياني لمقدار فقدان التحقق من الصحة في الخطوة 76619 (المحور ص) مقابل معدّل التعلّم الأساسي (المحور س). يقارن الرسم البياني بين نتائج أربع أوضاع مختلفة حول محوِّل LayerNorm على WMT14 EN-De. أدّى معدّل التعلّم إلى انخفاض في معدّل فقدان ميزة التحقّق من الصحة عند انخفاض معدّل التعلّم.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/beneficial_effect_warmup.png?authuser=7&hl=ar)
دع unstable_base_learning_rate
يمثّل معدّل التعلّم الذي يصبح عنده النموذج غير مستقر، وذلك باستخدام الإجراء السابق.
تشمل مرحلة الإحماء إضافة جدول زمني لمعدّل التعلّم يرفع معدّل التعلّم من 0 إلى قيمة base_learning_rate
الثابتة التي تزيد قيمتها عن unstable_base_learning_rate
على الأقل.
سيكون الإعداد التلقائي تجربة base_learning_rate
بحجم 10x
unstable_base_learning_rate
. يُرجى العِلم أنّه يمكن تشغيل هذا الإجراء بالكامل مرة أخرى على مقياس 100xunstable_base_learning_rate
. الجدول الزمني المحدد هو:
- يمكنك زيادة القيمة من 0 إلى base_learning_rate خلال Rushup_steps.
- تدرَّب بمعدل ثابت في post_warmup_steps.
ويكمن هدفك في العثور على أقصر عدد من warmup_steps
يتيح لك الوصول إلى معدلات التعلّم القصوى التي تزيد عن unstable_base_learning_rate
.
لذلك، يجب ضبط warmup_steps
وpost_warmup_steps
لكل base_learning_rate
. يمكنك عادةً ضبط post_warmup_steps
على 2*warmup_steps
.
يمكن ضبط ميزة "التدرب" بشكل مستقل عن الجدول الزمني الحالي لتوقيت نقاط الاتصال. warmup_steps
يجب الاجتياح بعدة مستويات مختلفة من حيث الحجم. على سبيل المثال، يمكن لدراسة نموذجية تجربة [10, 1000, 10,000, 100,000]
. يجب ألا تكون أكبر نقطة ممكنة
أكثر من% 10 من max_train_steps
.
بعد إنشاء دالة warmup_steps
التي لا تؤدي إلى إيقاف التدريب في base_learning_rate
،
يجب تطبيقها على النموذج الأساسي.
بشكل أساسي، أضِف هذا الجدول الزمني في البداية على الجدول الزمني الحالي، واستخدِم نقطة المراجعة المثلى التي تمت مناقشتها أعلاه لمقارنة هذه التجربة بالمرجع. على سبيل المثال، إذا كان لدينا في الأصل 10,000 خطوة max_train_steps
وأجرينا warmup_steps
لـ 1,000 خطوة، يجب تنفيذ إجراء التدريب الجديد
لإجمالي 11,000 خطوة.
إذا كانت مدّة warmup_steps
طويلة مطلوبة للتدريب الثابت (أكثر من 5% من
max_train_steps
)، قد تحتاج إلى زيادة max_train_steps
لتفسير
هذا الإجراء.
لا توجد حقًا قيمة "نموذجية" عبر النطاق الكامل لأعباء العمل. لا تحتاج بعض النماذج سوى إلى 100 خطوة، في حين قد تحتاج نماذج أخرى (خاصة المحولات) إلى أكثر من 40 ألف خطوة.
قص متدرج
![رسم بياني لقاعدة Grad l2 (المحور y) مقابل الخطوة العامة (المحور x). كان التدريب
"النموذجي" لقواعد التدرج غير مستقر على الإطلاق في الخطوات العالمية الأولى. أدى الحد الأدنى للمقاطع التي كانت شديدة القوة إلى خفض
معدل التعلم وإبطاء التدريب. وقد أدى استخدام حدّ أفضل للمقاطع (أعلى بقليل من معيار التدرّج المعتاد) إلى تثبيت التدريب المبكر.](https://developers.google.cn/static/machine-learning/guides/deep-learning-tuning-playbook/images/gradient_clipping.png?authuser=7&hl=ar)
يكون اقتصاص التدرج مفيدًا للغاية عند حدوث مشكلات في التدرج الكبيرة أو المتطرفة. يمكن للقص المتدرج حل أي من المشكلتين التاليتين:
- عدم استقرار التدريب المبكر (قاعدة التدرج الكبير في وقت مبكر)
- حالات عدم انتظام التدريب في منتصف التدريب (ارتفاع مفاجئ في التدرج في منتصف التدريب)
قد تصحح فترات الإحماء الطويلة أحيانًا حالات عدم التطابق التي لا ينجح بها الاقتصاص. للاطّلاع على التفاصيل، راجع عملية إحماء معدّل التعلّم.
🤖 ماذا عن قص الشعر أثناء الإحماء؟
الحدود المثالية للمقاطع أعلى من قاعدة التدرج "النموذجية" مباشرة.
إليك مثال على كيفية عمل اقتصاص التدرج:
- إذا كان معيار التدرج $\left | g\right |$ أكبر من حدّ اقتصاص التدرج $\lambda$، إذًا افعل ${g}'= \lambda\times \frac{g}{\left | g\right |}$ حيث يكون ${g}'$ هو التدرج الجديد.
تسجيل معيار التدرج غير المتدرج أثناء التدريب. بشكل تلقائي، يمكنك إنشاء ما يلي:
- مخطط قاعدة التدرج مقابل الخطوة
- مدرج تكراري لقواعد التدرج مجمّعة في كل الخطوات
اختيار حد اقتصاص التدرج بناءً على 90 بالمائة من معايير التدرج. يعتمد الحد الأدنى على عبء العمل، لكن% 90 هي نقطة انطلاق جيدة. إذا لم ينجح% 90، يمكنك ضبط هذا الحد.
🤖 ماذا عن نوع ما من الاستراتيجية التكيّفية؟
إذا جربت اقتصاص التدرج وبقيت مشكلات عدم الثبات، يمكنك أن تبذل قصارى جهدك؛ أي يمكنك تصغير العتبة.
إنّ اقتصاص التدرّج الشديد (أي >50% من التعديلات التي يتم اقتصاصها)، يُعدّ في الأساس طريقة غريبة لخفض معدّل التعلّم. فإذا وجدت نفسك تستخدم الاقتصاص القوي للغاية، فربما لا يكون عليك سوى خفض معدل التعلم بدلاً من ذلك.
لماذا يتم استدعاء المعلَمات الفائقة لمعدَّل التعلّم ومَعلمات التحسين الأخرى؟ وهي ليست معلمات لأي توزيع سابق.
إنّ مصطلح "المعلَمات الفائقة" له معنى دقيق في تعلُّم الآلة من بايز، لذلك يمكن القول أنّ الإشارة إلى معدّل التعلّم ومعظم معلَمات التعلُّم المعمّق الأخرى القابلة للضبط باسم "المعلَمات الفائقة" هي إساءة استخدام للمصطلحات. نفضّل استخدام المصطلح "metaparameter" لمعدلات التعلُّم، والمعلَمات المعمارية، وجميع الأمور القابلة للضبط الأخرى. هذا لأن المعلَمة الوصفية تتجنب احتمال الالتباس الذي ينشأ عن إساءة استخدام كلمة "المعلمة الفائقة". وغالبًا ما يكون هذا الالتباس عند مناقشة تحسين بايز، حيث تحتوي نماذج سطح الاستجابة الاحتمالية على مُعلِّمات فائقة حقيقية خاصة بها.
للأسف، على الرغم من أن مصطلح "المعلمة الفائقة" قد يكون مربكًا، إلا أنه أصبح شائعًا للغاية في مجتمع التعليم المتعمق. لذلك، بالنسبة إلى هذا المستند الموجّه لجمهور عريض يضم العديد من الأشخاص الذين من غير المحتمل أن يكونوا على دراية بهذه التقنية، اخترنا المساهمة في إحداث مصدر من الارتباك في المجال أملاً في تجنب مصدر آخر. مع ذلك، قد نتخذ خيارًا مختلفًا عند نشر ورقة بحثية، وننصح الآخرين باستخدام "المَعلمة الوصفية" بدلاً من ذلك في معظم السياقات.
لماذا يجب عدم ضبط حجم الدفعة لتحسين أداء مجموعة عمليات التحقق بشكل مباشر؟
غالبًا ما يؤثر تغيير حجم الدفعة بدون تغيير أي تفاصيل أخرى لمسار التدريب في أداء مجموعة التحقّق. ومع ذلك، يختفي الفرق في أداء مجموعة التحقق بين حجمي الدفعة عادةً إذا تم تحسين مسار التدريب بشكل مستقل لكل حجم دفعة.
المعلمات الفائقة التي تتفاعل بقوة مع حجم الدفعة، وبالتالي الأكثر أهمية لضبطها بشكل منفصل لكل حجم مجموعة، هي المعلَمات الفائقة للمحسّن (على سبيل المثال، معدل التعلم، الزخم) والمعلَمات الفائقة للضبط. تقدم الأحجام الأصغر حجمًا مزيدًا من الضوضاء في خوارزمية التدريب بسبب تباين العينة. يمكن أن يكون لهذا التشويش تأثير منتظم. وبالتالي، فإن أحجام الدُفعات الأكبر يمكن أن تكون أكثر عرضة لفرط التخصيص وقد تتطلب تنظيمًا أقوى و/أو أساليب تنظيم إضافية. بالإضافة إلى ذلك، قد تحتاج إلى تعديل عدد خطوات التدريب عند تغيير حجم الدفعة.
وبعد أخذ جميع هذه التأثيرات في الاعتبار، ليس هناك دليل مقنع على أن حجم الدفعة يؤثر على الحد الأقصى لأداء التحقق القابل للتحقيق. وللحصول على التفاصيل، يُرجى الاطّلاع على Shallue et al. 2018.
ما هي قواعد التحديث لجميع خوارزميات التحسين الشائعة؟
يقدم هذا القسم قواعد تحديثات للعديد من خوارزميات التحسين الشائعة.
انحدار التدرج العشوائي (SGD)
\[\theta_{t+1} = \theta_{t} - \eta_t \nabla \mathcal{l}(\theta_t)\]
حيث $\eta_t$ هو معدل التعلم في الخطوة $t$.
الزخم
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t v_{t+1}\]
حيث يكون $\eta_t$ هو معدل التعلم في الخطوة $t$ و $\gamma$ هو معامل الزخم.
نيستيروف
\[v_0 = 0\]
\[v_{t+1} = \gamma v_{t} + \nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - \eta_t ( \gamma v_{t+1} + \nabla \mathcal{l}(\theta_{t}) )\]
حيث يكون $\eta_t$ هو معدل التعلم في الخطوة $t$ و $\gamma$ هو معامل الزخم.
RMSProp
\[v_0 = 1 \text{, } m_0 = 0\]
\[v_{t+1} = \rho v_{t} + (1 - \rho) \nabla \mathcal{l}(\theta_t)^2\]
\[m_{t+1} = \gamma m_{t} + \frac{\eta_t}{\sqrt{v_{t+1} + \epsilon}}\nabla \mathcal{l}(\theta_t)\]
\[\theta_{t+1} = \theta_{t} - m_{t+1}\]
ADAM
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l}(\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{m_{t+1}}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]
الأكاديمية الوطنية للطب (NADAM)
\[m_0 = 0 \text{, } v_0 = 0\]
\[m_{t+1} = \beta_1 m_{t} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)\]
\[v_{t+1} = \beta_2 v_{t} + (1 - \beta_2) \nabla \mathcal{l} (\theta_t)^2\]
\[b_{t+1} = \frac{\sqrt{1 - \beta_2^{t+1}}}{1 - \beta_1^{t+1}}\]
\[\theta_{t+1} = \theta_{t} - \alpha_t \frac{\beta_1 m_{t+1} + (1 - \beta_1) \nabla \mathcal{l} (\theta_t)}{\sqrt{v_{t+1}} + \epsilon} b_{t+1}\]