التوقف المبكر واستعادة الأوزان خياران مترابطان لكنهما مختلفان: الأول يقرر متى ينتهي التدريب، والثاني يحدد نسخة الأوزان النهائية. سنقرأ قاعدة قبول التحسن في تنفيذ Keras محدد، لا نستنتجها من اسم «الأفضل» وحده.
الخلاصة السريعة
حدد معيار المراقبة وحد التحسن وعدّاد الصبر وخيار الاستعادة؛ أصغر رقم ظهر في سجل المراقبة قد يختلف عن مرجع التحسن المقبول في التنفيذ الذي ندرسه.
- في Keras 3.13.2 مع mode=min، يقبل التحسن حين تكون القيمة مضافًا إليها min_delta أصغر من المرجع؛ المقارنة صارمة. [2]
- في مثالنا: حد التحسن 0.05 والصبر 2، بلا baseline وبلا تأخير بداية؛ القيم 0.8 و 0.7 و 0.68 و 0.69 توقف التدريب بعد الدورة الرابعة، ويبقى المرجع 0.7.
- مع restore_best_weights=true تعاد نسخة التحسن المقبول من الدورة الثانية؛ ومع false تبقى نسخة النهاية. تحت قاعدة مثالنا لا تختار الاستعادة مجرد أصغر قيمة خام. [1]
- تحتاج قيمة المراقبة إلى الوجود في السجل، ويؤخر start_from_epoch بدء المراقبة؛ لا يثبت انتهاء العدّاد أن النموذج مناسب لمهمة خارج هذا السجل. [1]
اقرأ قاعدة قبول التحسن قبل ترتيب الأرقام
يعرف التنفيذ min_delta بقيمته المطلقة ثم يغير إشارته في وضع التقليل؛ تفحص دالة التحسن القيمة بعد طرح هذا الحد المعدل بمقارنة أصغر من المرجع. أي إنها تقارن القيمة زائد الحد الموجب بالمرجع. [2]
نختار مراقبة خسارة تحقق، ووضع التقليل صراحة، وحدًا 0.05. لا نترك استنتاج اتجاه التحسن من اسم مقياس غير معروف. نحن نقرأ نسخة شفرة معلنة، فلا نحول وصفًا عامًا إلى ضمان لكل مكتبة وإصدار.
ولأن المقارنة صارمة، فإن قيمة تقع بالضبط عند المرجع ناقص 0.05 لا تتجاوزه وفق القاعدة. هذه ملاحظة عن القرار البرمجي، لا حكم بأن فرقًا صغيرًا لا يهم القارئ في مهمته.
اتبع الصبر بعد كل دورة
نفترض أربع قيم مراقبة مكتملة ومتتابعة: 0.8 ثم 0.7 ثم 0.68 ثم 0.69. نختار patience=2 وbaseline=None وstart_from_epoch=0. نسمي الدورات هنا من الأولى إلى الرابعة، رغم أن فهرس الشفرة يبدأ بصفر.
الأولى تؤسس المرجع 0.8. الثانية تحسن مقبول لأن 0.7 + 0.05 = 0.75 أصغر من 0.8، فيصبح المرجع 0.7 والعدّاد صفرًا. الثالثة تعطي 0.73 بعد إضافة الحد؛ لا تتجاوز المرجع، فالعدّاد واحد.
الرابعة تعطي 0.74 بالمقارنة نفسها، فيبلغ العدّاد اثنين ويحدث التوقف بعد إتمامها. لا تعني كلمة الصبر السماح بدورتين إضافيتين بعد الرابعة في هذا التمرين.
| الدورة | الخسارة الخام | المرجع المقبول | عدّاد الانتظار |
|---|---|---|---|
| 1 | 0.8 | 0.8 | 0 |
| 2 | 0.7 | 0.7 | 0 |
| 3 | 0.68 | 0.7 | 1 |
| 4 | 0.69 | 0.7 | 2؛ توقف |
استعادة الأوزان ليست فرزًا مستقلًا للسجل
يحفظ التنفيذ الأوزان عند قبول تحسن، ويعيد المحفوظ عند نهاية التدريب إذا فعل خيار الاستعادة؛ خيار false لا يطلب هذه الإعادة. [1]
نسمي ملفاتنا التوضيحية «نسخة الدورة الثانية» و«نسخة الرابعة». مع الاستعادة نرجع إلى الثانية، ومع تعطيلها تبقى الرابعة. القيمة الخام الأصغر كانت 0.68 في الثالثة، لكن التحسن المطلوب بالنسبة إلى المرجع المقبول لم يتحقق.
لا نستنتج أوزان النسخ من قيم الخسارة؛ أعطينا القيم كفرض تعليمي لقراءة القرارات. كذلك لا نزعم أن الثانية ستتفوق على الثالثة في اختبار مستقل؛ موضوعنا النسخة التي تختارها القاعدة المحددة.
ما الذي يجب تسجيله مع النتيجة؟
يلزم وجود المقياس في سجل الاستدعاء؛ وفي الدورات السابقة إلى start_from_epoch لا تجري المراقبة. [1]
احفظ اسم المقياس واتجاهه والحد والصبر وبداية المراقبة ووجود خط أساس وخيار الاستعادة والإصدار. تغيير أي منها يغير السؤال؛ لا تنقل جدولنا إلى إعداد بخط أساس مختلف وتحتفظ بالعدّاد نفسه دون إعادة الحساب.
لم ندرب نموذجًا أو نشغل الاستدعاء؛ قرأنا الشفرة وحسبنا حالة افتراضية. راجع النسخة المستعادة وظروف التحقق قبل تقييمها، وأبق تفسير النجاح منفصلًا عن مجرد انقضاء انتظار برمجي.
المصادر ومتابعة القراءة
- Keras 3.13.2: EarlyStopping acceptance, wait and restore (يفتح في نافذة جديدة)raw.githubusercontent.com
- Keras 3.13.2: MonitorCallback min mode and strict improvement (يفتح في نافذة جديدة)raw.githubusercontent.com
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
