كما رأينا كيف تتغير هذه القيمة عندما نغيّر قيمة w أو b أو كليهما. لذلك، يتوقف الوصول إلى أقل خطأ ممكن على اختيار أفضل قيمتين لهما. لكن كيف نصل إلى هاتين القيمتين؟
سنتعرف في هذا المقال على نزول التدرج (Gradient Descent)، وهي خوارزمية تعدّل w وb خطوةً بعد خطوة، بهدف الوصول إلى قيم تجعل دالة التكلفة أصغر ما يمكن.
ما هو نزول التدرج؟
نبدأ بقيمتين اختياريتين للمعاملين w وb، كما فعلنا في النموذجين السابقين. غالبًا ما تكون دالة التكلفة عندهما كبيرة، فلا تكون هاتان القيمتان الأنسب للبيانات.
لذلك نستخدم نزول التدرج، وهو لا يعطينا القيمتين المطلوبتين دفعة واحدة، بل نغيّر w وb تغييرًا صغيرًا، ثم نعيد الحساب من القيمتين الجديدتين. فنحتاج أن نعرف في أي اتجاه نغيّرهما: أنزيد قيمتيهما أم ننقصهما؟
لنفهم الفكرة، نرى أولًا كيف يتحرك نزول التدرج على رسم ثنائي الأبعاد.
هذا هو المنحنى نفسه الذي رأيناه في المقال السابق، حين ثبّتنا b = 0 وغيّرنا w وحدها. نعتمده هنا لأنه أسهل للقراءةً.
في المنحنى نرى النقطة الحمراء، وهي أدنى قيمة لدالة التكلفة عند b = 0. لكن النموذج لا يرى القاع، بل المحيط القريب منه فقط.
دور المشتقة الجزئية في تحديد الاتجاه
ليعرف النموذج الاتجاه المناسب لتغيير المعاملين، يحسب انحدار المنحنى عند موقعه الحالي، أي عند العلامة X. نغيّر في هذا الرسم w وحدها لتسهيل الفهم فقط، أما في الحقيقة فنغيّر w وb معًا بعد كل خطوة.
يسمى هذا الانحدار في الرياضيات المشتقة الجزئية. تخبرنا مشتقة كل معامل في أي اتجاه تزداد دالة التكلفة عند تغييره، فنتحرك في الاتجاه المعاكس لأن هدفنا إنقاصها.
لكل معامل مشتقته الخاصة، فقد يلزمنا أن نزيد w وننقص b، أو العكس.
عند X المنحنى صاعد نحو اليمين، أي أن المشتقة موجبة، فننقص w، وإن كان هابطًا فنزيد w. لكن النموذج يجري عمليات رياضية لمعرفة ذلك، إذ يملك كل معامل طريقة لحساب مشتقته في موقعه الحالي.
عند X المنحنى صاعد نحو اليمين، أي أن المشتقة موجبة، فننقص w، وإن كان هابطًا فنزيد w. لكن النموذج يجري عمليات رياضية لمعرفة ذلك، إذ يملك كل معامل طريقة لحساب مشتقته في موقعه الحالي.
يمكننا أن نرى شبهًا بين معادلة دالة التكلفة ومعادلتي المشتقتين، فمعظم الرموز هي نفسها التي شرحناها في المقال السابق. لكن هناك فروق بينهما:
لا يوجد تربيع في المعادلتين، لأن الاشتقاق يزيل التربيع ويضرب الحد في 2.
كما رأينا في المقال السابق، قسمنا دالة التكلفة على 2m لإلغاء العدد 2 الذي يظهر عند حساب المشتقة، فيصبح الكسر واحدًا على m كما يظهر في الصورة.
الفرق الثاني هو بين المشتقتين، فكما نرى في الصورتين تُضرب مشتقة w في xᵢ بعكس مشتقة b.
(نقصد بـ xᵢ مدخل النقطة رقم i)
عرفنا الآن في أي اتجاه نغيّر w وb، لكن يبقى سؤال: بأي مقدار نغيّرهما في كل خطوة؟ هذا ما سنتعرف عليه في القسم التالي.
معادلة تحديث المعاملين في نزول التدرج
بعد أن عرفنا الاتجاه الذي يغيّر فيه النموذج المعاملين بعد كل خطوة، يجب أن نعرف حجم هذه الخطوة التي يأخذها في كل مرة.
يتحكم في حجم الخطوة رقم صغير نختاره بأنفسنا قبل بدء الخوارزمية، ويسمى ألفا (α) أو معدل التعلم (Learning Rate).
بذلك يمكننا تعديل المعاملين كل مرة في الاتجاه الصحيح، بمعادلتين رياضيتين بسيطتين هما:
يمكننا فهم المعادلتين مباشرة. فبعد حصولنا على مشتقة كل معامل واختيارنا معدل التعلم (α)، يصبح تغيير المعاملين نحو الأفضل في كل خطوة سهلًا. فمثلًا:
w الجديدة = w القديمة ناقص α مضروبة في المشتقة، ونحدَّث b بالطريقة نفسها.
هنا تعني علامة «=» استبدال القيمة القديمة بالجديدة.
نضع علامة الناقص بدل الجمع لأننا نتحرك عكس المشتقة. فإذا كانت موجبة أصبحت w الجديدة أقل من القديمة. وإذا كانت سالبة تحولت الإشارة إلى موجبة، فتزداد w.
لكن يجب أن نعرف شيئًا مهمًا: بعد حساب مشتقة كل معامل واستخدامها لإيجاد القيمتين الجديدتين لـ w وb، يجب إعادة حساب المشتقة من جديد باستخدام هاتين القيمتين. السبب أن قيمة المشتقة تتغير بتغير قيمتي w وb في معادلة التنبؤ.
أي أننا نحسب مشتقتي w وb معًا بالقيمتين الحاليتين، ثم نحدّثهما معًا، فلا نحدّث إحداهما قبل حساب مشتقة الأخرى. لذلك يكرر النموذج هذه الخطوات نفسها في كل خطوة.
مثال رقمي على خطوة من نزول التدرج
لفهم الطريقة الحسابية أكثر، نعدّل المعاملين w وb اللذين استخدمناهما في النموذج الأول في المقال السابق، وهما w = 0 وb = 5. كانت قيمة دالة التكلفة عندهما 3. نحتاج أيضًا إلى معدل التعلم، فنختار α = 0.1، ونطبق خطوة واحدة فقط.
أولًا، نحسب المشتقتين dw وdb عند القيمتين الحاليتين w = 0 وb = 5.
لحساب dw، نحتاج إلى خطأ النموذج في كل نقطة مضروبًا في مدخلها xᵢ. حسبنا الأخطاء في المقال السابق، فيبقى ضربها في المدخلات:
- النقطة 1: 3- = 1 × (3-)
- النقطة 2: 6 = 2 × 3
- النقطة 3: 0 = 3 × 0
نجمع نتائج النقاط الثلاث، فنحصل على 3. نقسم المجموع على عدد الأمثلة (3)، فنجد dw = 1.
الآن نحسب db، نحتاج فقط إلى مجموع الأخطاء مقسومًا على عدد الأمثلة، دون ضربها في xᵢ. الأخطاء هي:
- النقطة 1: 3-
- النقطة 2: 3
- النقطة 3: 0
مجموعها 0، وقسمته على 3 يعطي 0، إذن db = 0.
نبدأ بـ w:
- w = w − α * dw
- 1 * 0.1 − 0 = w
- 0.1- = w
ثم b:
- b = b − α * db
- 0 * 0.1 − 5 = b
- 5 = b
إذن w الجديدة هي 0.1−، وتبقى b كما هي (5) لأن db = 0.
هذه خطوة واحدة فقط من نزول التدرج، نعيد الخطوات نفسها بالقيمتين الجديدتين w = −0.1 وb = 5، فتنخفض دالة التكلفة تدريجيًا.
نحسب دالة التكلفة من جديد عند w = −0.1 وb = 5، بالخطوات نفسها التي استعملناها في المقال السابق:
التنبؤات:
- لنقطة 1: F(1) = 4.9
- النقطة 2: F(2) = 4.8
- النقطة 3: F(3) = 4.7
الأخطاء (التنبؤ − القيمة الحقيقية):
- النقطة 1: 3.1- = 8 - 4.9
- النقطة 2: 2.8 = 2 - 4.8
- النقطة 3: 0.3- = 5 - 4.7
مربعات الأخطاء:
- النقطة 1: 9.61
- النقطة 2: 7.84
- النقطة 3: 0.09
مجموع المربعات هو 17.54، ونقسمه على 2m = 6، فنحصل على: J ≈ 2.92.
انخفضت دالة التكلفة من 3 إلى 2.92. الانخفاض صغير لأننا طبقنا خطوة واحدة فقط بمعدل تعلم α = 0.1. لكن ماذا لو غيّرنا معدل التعلم؟
أثر معدل التعلم في نزول التدرج
يؤثر معدل التعلم في عدد الخطوات اللازمة للوصول إلى أدنى نقطة. فكلما صغر المعدل صغرت الخطوات وطالت مدة الوصول، وكلما كبُر المعدل كبُرت الخطوات وقلّ عددها. لكن للمعدل الكبير جدًا نتائج سلبية:
الخطوات الكبيرة قد تكون أطول من المسافة إلى القاع، فيتجاوزه النموذج إلى الجانب الآخر، فترتفع دالة التكلفة بدل أن تنخفض. لذلك نتجنب المعدل الكبير جدًا والصغير جدًا. نجرّب عدة قيم، مثل 0.001 و0.01 و0.1، ونراقب دالة التكلفة: إن ارتفعت فالمعدل كبير جدًا.
الخطوات الكبيرة قد تكون أطول من المسافة إلى القاع، فيتجاوزه النموذج إلى الجانب الآخر، فترتفع دالة التكلفة بدل أن تنخفض. لذلك نتجنب المعدل الكبير جدًا والصغير جدًا. نجرّب عدة قيم، مثل 0.001 و0.01 و0.1، ونراقب دالة التكلفة: إن ارتفعت فالمعدل كبير جدًا.
![]() |
| معدل تعلم صغير: خطوات صغيرة تقترب من القاع ببطء |
![]() |
| معدل تعلم كبير: خطوات تتجاوز القاع فترتفع دالة التكلفة |
متى يتوقف نزول التدرج؟
لا ننتظر في نزول التدرج حتى نصل إلى أدنى قيمة لدالة التكلفة، لأننا لا نصلها بدقة تامة. عند أدنى نقطة يكون الخط الذي يلامس المنحنى أفقيًا، فتساوي المشتقة صفرًا.
كلما اقتربنا من هذه النقطة اقتربت المشتقة من الصفر. بما أننا نضربها في معدل التعلم α، تصغر الخطوة في كل مرة.
لذلك نتوقف عندما يصبح الفرق بين قيمتي دالة التكلفة في خطوتين متتاليتين أصغر من عدد صغير جدًا نحدده، مثل 0.001.
لكن قد لا يصل الفرق إلى القيمة التي حددناها، فتستمر الخوارزمية إلى ما لا نهاية. فنحدد أيضًا عددًا أقصى من الخطوات، مثل 1000، وقد يبلغ آلافًا أو ملايين، ويختلف حسب المسألة.
تتوقف الخوارزمية عند أيهما أسبق: الفرق الصغير أو العدد الأقصى.
هل قد يعلق نزول التدرج؟
نسمي أدنى نقطة في دالة التكلفة للبيانات المستخدمة القيمة الصغرى العامة (Global Minimum). لكن قد يكون في بعض المنحنيات أكثر من قاع، وواحد منها فقط هو الأدنى في الدالة كلها.أما القيعان الأخرى فهي أدنى من النقاط المحيطة بها فقط، ولكنها ليست أدنى نقطة في الدالة ككل، وتسمى القيمة الصغرى المحلية (Local Minimum).لماذا نسميها محلية إذًا؟ لأنها الأدنى في محيطها القريب فقط.
تظهر المشكلة لأن المشتقة تساوي صفرًا عند أي قاع، سواء كان محليًا أو عامًا. فإذا وصلنا إلى قاع محلي، تصغر الخطوات ونتوقف عنده. نظن حينها أننا بلغنا أدنى قيمة، مع أن هناك قيمة أصغر منها.
هل يحدث هذا في الانحدار الخطي؟ لا. دالة التكلفة فيه على شكل وعاء، وله قاع واحد فقط، فهو القاع العام.
تظهر الصورة التالية شكل هذا الوعاء بالأبعاد الثلاثة:
![]() |
| سطح دالة التكلفة في الانحدار الخطي: وعاء له قاع واحد |
لذلك نصل إلى القاع نفسه مهما كانت نقطة البداية، بشرط أن يكون معدل التعلم مناسبًا.
تعرفنا في هذا المقال على نزول التدرج، وهو خوارزمية تعدّل المعاملين w وb بعد كل خطوة، لنقترب من أفضل قيمتين لهما للبيانات المستخدمة.
نبدأ بحساب مشتقة كل معامل واختيار معدل التعلم α، ثم نستخدم معادلة التحديث. نعيد هذه الخطوات بمعدل التعلم نفسه حتى يصبح تغيّر دالة التكلفة ضئيلًا.
في الواقع، نحن لا نقوم بحساب هذه الخطوات يدوياً؛ فذلك أمرٌ شبه مستحيل عندما تكون البيانات ضخمة، بل نترجم هذه المعادلات إلى أكواد بايثون (Python) لتقوم الآلة بتنفيذها وتكرارها آلاف المرات في ثوانٍ معدودة. ومقالنا القادم سيكون أول مقال في سلاسلنا العملية، حيث سنغطي الأكواد الأساسية في لغة بايثون، ثم ننتقل فوراً لترجمة هذه الخطوات الحسابية إلى أكواد برمجية.
المصادر
دورة «Machine Learning Specialization» للمعلم أندرو نج، تقدمها DeepLearning.AI وStanford Online على منصة Coursera.الشرح والصياغة والكتابة في هذا المقال من فهمنا الشخصي للدورة.


.png)
.png)
.png)
.png)



أكتب تعليق لتشجيعنا على العمل أكثر