الوحدة 6 — النزول التدرّجي ومعدّل التعلّم
أعطت الوحدة 5 الأداة — التدرّج. وتحوّلها هذه الوحدة إلى خوارزمية: النزول التدرّجي، الطريقة التي تدرّب الغالبية العظمى من نماذج التعلّم، من أبسط منحدِرٍ خطّي إلى أكبر الشبكات العصبية.
الخوارزمية، في أربع خطوات تتكرّر
النزول التدرّجي حلقةٌ بسيطة إلى حدّ مربك:
- تنبّأ بالمعاملات الحالية واحسب الكلفة (الخطأ).
- احسب التدرّج للكلفة بالنسبة إلى كلّ معامل.
- حدّث كلّ معامل بالابتعا د عن المنحدر.
- أعد حتى تكفّ الكلفة عن الهبوط.
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. التحديث
هذه الحلقة قلب تعلّم الآلة النابض. وكلّ ما عداها — المعماريات، التنظيم، المُستمثِلات المتطوّرة — ليس إلا صقلاً لها.
معدّل التعلّم: الضبط الذي يقلب كلّ شيء
معدّل التعلّم يحدّد حجم الخطوة. وهو أكثر معاملات التدريب الفائقة حسماً، ويُضبَط ضبطَ بهلوان:
- صغير جداً: يتعلّم النموذج، لكن ببطء مُضنٍ؛ وقد يتجمّد في قاعٍ رديء.
- كبير جداً: تتجاوز الخطوات الهدف، فتتذبذب الكلفة أو تنطلق إلى اللانهاية — يتباعد التدريب.
- مضبوط جيّداً: تهبط الكلفة بانتظام نحو نهاية صغرى.
أوّل منعكس تشخيصيّ، حين يسوء التدريب، دائماً تقريباً: «ماذا لو غيّرتُ معدّل التعلّم؟»
ثلاث نكهات: دفعة كاملة، عشوائي، دفعات صغيرة
على كم من البيانات نحسب التدرّج في كلّ خطوة؟ ثلاثة أجوبة:
| التنويعة | البيانات لكلّ خطوة | الطابع |
|---|---|---|
| دفعة كاملة | المجموعة كلّها | خطوات دقيقة لكن بطيئة وثقيلة على الذاكرة |
| عشوائي (SGD) | ملاحظة واحدة | خطوات ضوضائية لكن سريعة جداً |
| دفعات صغيرة | حزمة صغيرة (32، 64…) | المفاضلة، المعيار في كلّ مكان |
النزول التدرّجي بالدفعات الصغيرة يسود عمليّاً: يجمع استقرار الدفعة الكاملة وسرعة العشوائي، مستثمِراً توازي GPU. حين ترى batch_size=32 في شيفرة تدريب، فهذا الاختيار قائم.