خطوات الاستخدام
الخطوة الأولى: فهم مفهوم تخفيض جيب التمام (Cosine Decay). هذا الأسلوب يُستخدم في تدريب الشبكات العصبية العميقة لضبط معدل التعلم بشكل ديناميكي. بدلاً من استخدام معدل تعلم ثابت، يقوم تخفيض جيب التمام بتقليل معدل التعلم تدريجياً عبر الزمن وفقاً لدالة جيب التمام. الصيغة الأساسية: learning_rate = final_lr + 0.5 * (initial_lr - final_lr) * (1 + cos(π * current_step / total_steps)). في حالتنا، نفترض أن final_lr = 0، لذا تصبح الصيغة: lr = 0.5 * initial_lr * (1 + cos(π * current_step / total_steps)). هذا يؤدي إلى تقليل سلس لمعدل التعلم من قيمته الأولية إلى الصفر.
الخطوة الثانية: إدخال القيم المطلوبة. ستحتاج إلى ثلاثة مدخلات: معدل التعلم الأولي (initial_lr) وهو القيمة التي تبدأ منها، الخطوة الحالية (current_step) وهي عدد مرات التحديث التي تمت حتى الآن، وإجمالي الخطوات (total_steps) وهو العدد الكلي لخطوات التدريب. تأكد من أن current_step لا تتجاوز total_steps، وإلا فإن معدل التعلم يصبح صفراً أو يتم التعامل معه بشكل مختلف اعتماداً على التنفيذ.
الخطوة الثالثة: تطبيق الصيغة. باستخدام القيم المدخلة، احسب قيمة جيب التمام للزاوية π * (current_step / total_steps). ثم أضف 1، واضرب في 0.5 * initial_lr. الناتج هو معدل التعلم في تلك الخطوة. على سبيل المثال، إذا كان initial_lr = 0.1، current_step = 50، total_steps = 100، فستكون قيمة جيب التمام cos(π * 0.5) = 0، وبالتالي lr = 0.5 * 0.1 * (1+0) = 0.05.
الخطوة الرابعة: فهم السلوك. في بداية التدريب (current_step=0)، يكون cos(0)=1، لذا lr = initial_lr. في منتصف التدريب (current_step = total_steps/2)، cos(π/2)=0، lr = half of initial. في نهاية التدريب (current_step = total_steps)، cos(π)= -1، lr = 0. هذا يضمن تقليلاً سلساً لمعدل التعلم، مما يساعد في استقرار التقارب وتجنب التذبذبات.
الخطوة الخامسة: اعتبارات عملية. في الممارسة، قد لا نصل إلى الصفر تماماً بل نثبت عند قيمة صغيرة جداً. بعض التطبيقات تستخدم مقياساً مثل 'decay_steps' لتمديد المنحنى. تأكد من أن الخطوة الحالية تحسب من الصفر. إذا كان current_step > total_steps، فغالباً ما يتم ضبط lr = final_lr (صفر في حالتنا). هذه الآلية شائعة في نماذج مثل BERT و GPT.
أمثلة محلولة
تطبيقات عملية على معدل التعلم بتخفيض جيب التمام بخطوات الحل كاملة.
الحل
لحساب معدل التعلم، نستخدم الصيغة: lr = 0.5 * initial_lr * (1 + cos(π * current_step / total_steps)). في هذا المثال: initial_lr = 0.01, total_steps = 1000. للخطوة 250: النسبة = 250/1000 = 0.25، الزاوية = π * 0.25 = π/4، cos(π/4) ≈ 0.7071، لذا lr = 0.5 * 0.01 * (1 + 0.7071) = 0.005 * 1.7071 = 0.0085355. وبالتالي معدل التعلم ≈ 0.00854. للخطوة 750: النسبة = 0.75، الزاوية = 0.75π = 3π/4، cos(3π/4) = -0.7071، lr = 0.5 * 0.01 * (1 - 0.7071) = 0.005 * 0.2929 = 0.0014645. نلاحظ أن معدل التعلم يتناقص بشكل متماثل حول نقطة المنتصف. في البداية ينخفض ببطء ثم يسارع ثم يبطئ مرة أخرى نحو النهاية، مشكلاً منحنى جيب تمام كلاسيكي.
الحل
لنحدد المتغيرات: after warmup، total_steps للتخفيض = 20000، initial_lr للتخفيض = 0.001. إذا كانت الخطوة الحالية (بعد الإحماء) هي 10000، فهذا يعني أننا في منتصف مرحلة التخفيض. نحسب lr = 0.5 * 0.001 * (1 + cos(π * 10000/20000)) = 0.5 * 0.001 * (1 + cos(π/2)) = 0.0005 * (1 + 0) = 0.0005. إذاً معدل التعلم = 0.0005. هذا مفيد لأن النموذج قد مر بمرحلة الإحماء ثم بدأ في التخفيض. لاحظ أن التخفيض يبدأ من 0.001 وينتهي عند 0. في الممارسة، غالباً ما يُستخدم final_lr صغير جداً (مثل 1e-7) بدلاً من الصفر التام.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة معدل التعلم بتخفيض جيب التمام.
منتصف الجدول (50 من 100): المعدل 0.05 أي نصف الابتدائي
- معدل التعلم الابتدائي
- 0.1
- الخطوة الحالية
- 50
- إجمالي الخطوات
- 100
عند الخطوة صفر: المعدل يساوي الابتدائي 0.1 بالضبط
- معدل التعلم الابتدائي
- 0.1
- الخطوة الحالية
- 0
- إجمالي الخطوات
- 100
نهاية الجدول: المعدل 0 كما في خطوة التفسير الرابعة
- معدل التعلم الابتدائي
- 0.1
- الخطوة الحالية
- 100
- إجمالي الخطوات
- 100
ربع الطريق (25 من 100): 0.000853553 أي 85.4% من الابتدائي
- معدل التعلم الابتدائي
- 0.001
- الخطوة الحالية
- 25
- إجمالي الخطوات
- 100