انتقل إلى المحتوى الرئيسي

الوحدة 6 — النزول التدرّجي ومعدّل التعلّم

أعطت الوحدة 5 الأداة — التدرّج. وتحوّلها هذه الوحدة إلى خوارزمية: النزول التدرّجي، الطريقة التي تدرّب الغالبية العظمى من نماذج التعلّم، من أبسط منحدِرٍ خطّي إلى أكبر الشبكات العصبية.

الخوارزمية، في أربع خطوات تتكرّر

النزول التدرّجي حلقةٌ بسيطة إلى حدّ مربك:

  1. تنبّأ بالمعاملات الحالية واحسب الكلفة (الخطأ).
  2. احسب التدرّج للكلفة بالنسبة إلى كلّ معامل.
  3. حدّث كلّ معامل بالابتعاد عن المنحدر.
  4. أعد حتى تكفّ الكلفة عن الهبوط.
wwηLw \leftarrow w - \eta \cdot \nabla L
for epoch in range(n_epochs):
y_pred = X @ w # 1. تنبّأ
erreur = y_pred - y
cout = (erreur ** 2).mean() # كلفة تربيعية متوسّطة
gradient = 2 * X.T @ erreur / len(y) # 2. التدرّج
w = w - taux_apprentissage * gradient # 3. التحديث

هذه الحلقة قلب تعلّم الآلة النابض. وكلّ ما عداها — المعماريات، التنظيم، المُستمثِلات المتطوّرة — ليس إلا صقلاً لها.

معدّل التعلّم: الضبط الذي يقلب كلّ شيء

معدّل التعلّم η\eta يحدّد حجم الخطوة. وهو أكثر معاملات التدريب الفائقة حسماً، ويُضبَط ضبطَ بهلوان:

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

أوّل منعكس تشخيصيّ، حين يسوء التدريب، دائماً تقريباً: «ماذا لو غيّرتُ معدّل التعلّم؟»

ثلاث نكهات: دفعة كاملة، عشوائي، دفعات صغيرة

على كم من البيانات نحسب التدرّج في كلّ خطوة؟ ثلاثة أجوبة:

التنويعةالبيانات لكلّ خطوةالطابع
دفعة كاملةالمجموعة كلّهاخطوات دقيقة لكن بطيئة وثقيلة على الذاكرة
عشوائي (SGD)ملاحظة واحدةخطوات ضوضائية لكن سريعة جداً
دفعات صغيرةحزمة صغيرة (32، 64…)المفاضلة، المعيار في كلّ مكان

النزول التدرّجي بالدفعات الصغيرة يسود عمليّاً: يجمع استقرار الدفعة الكاملة وسرعة العشوائي، مستثمِراً توازي GPU. حين ترى batch_size=32 في شيفرة تدريب، فهذا الاختيار قائم.

أبعد من التدرّج الخام: المُستمثِلات الحديثة

الصيغة wwηLw \leftarrow w - \eta \nabla L هي النسخة الأساس. والمُستمثِلات الحديثة تحسّنها: الزخم يبقي اندفاعاً لعبور القيعان الصغيرة، وAdam — الأكثر استعمالاً — يكيّف الخطوة آليّاً لكلّ معامل. لا نبرمجها بأنفسنا؛ نختار Adam في TensorFlow أو PyTorch. لكنها كلّها تستند إلى فكرة هذه الوحدة: اتّبع المنحدر نزولاً.

النهايات الصغرى المحلّية: أقلّ خطورةً ممّا يُخشى

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

الخلاصة

  • النزول التدرّجي يكرّر: تنبّأ، قِس الخطأ، احسب التدرّج، حدّث المعاملات عكس المنحدر.
  • معدّل التعلّم يضبط حجم الخطوة: صغير = بطء، كبير = تباعد؛ وهو أوّل ضبطٍ يُسأَل عنه.
  • ثلاث تنويعات بحسب البيانات لكلّ خطوة؛ والدفعات الصغيرة هي المعيار، جامعةً الاستقرار والسرعة وتوازي GPU.
  • المُستمثِلات الحديثة (الزخم، Adam) تصقل الصيغة الأساس لعبور الهضاب ونقاط السرج.

الوحدة التالية: الاحتمالات — الاستقلال والاحتمال الشرطي، لغة اللايقين في قلب كلّ نموذج تنبّئيّ.