مقدمة
يمكن تقسيم تعلم الآلة إلى قسمين مهمين وهما تعلم بإشراف Supervised Learning و تعلم بدون إشراف Unspervised Learning. التعلم بإشراف ينقسم إلى قسمين وهما التصنيف Classification والتوقع Regression. هنا شرح مفصل عن هذه المفاهيم . في هذا المقال سنقوم بشرح كيفية حل مشكلة الارتباط الخطي Linear regression بإستخدام خوارزمية Gradient Descent.
الارتباط الخطي
افترض أن لدينا الدالة التالية
ولكننا لا نعرف ما هي الدالة f، ولدينا بعض النقاط (x,y). القيمة x تمثل المدخل والقيمة y المخرج وهي القيمة الحقيقية. المشكلة أن هناك عدد لا نهائي من النقاط في خط الأعداد، ونحن نريد من المعادلة توقع y’ لأي قيمة x بإستخدام النقاط المتوفرة لدينا.
سنقوم بافترض الدالة العامة
القيمة ‘y تمثل المخرجات، والقيم W هي عبارة عن متغيرات يتم تحديثها بشكل مستمر.
لنأخذ مثال بسيط، افترض أن لدينا القيم التالية:
ونريد توقع قيم أخرى، مثلاً x = 4 . بالنظر فإن الدالة التي تمثل هذه النقاط هي معادلة المستقيم (لأنها تقع على خط مستقيم)
لكن هل المعادلة بنفس ذكاءنا؟ الإجابة لا. الدالة تقوم فقط بافتراض الحل العام
ثم ستقوم بحساب افضل قيم لw0, w1. لكن السؤال كيف؟ الجواب يكمن في ما يسمى ب cost function وهي تحسب مدى قرب أو بعد القيم المتوقعة ‘y من القيم الحقيقية y. مثلاً ممكن تحسب مربع الفرق
هذا المقياس يمثل مدى القدرة في التعلم، وبالتالي نحتاج هذه القيمة أن تكون أصغر ما يمكن. قيم x,y ثابتة وهي لدينا مسبقاً بالتالي نحتاج تحديث قيم w0 ،w1.
Gradient Descent
ما نحتاجه الآن هو تحديث قيم w0,w1 لكن كيف؟ الحل هو باستخدام الإشتقاق. الإشتقاق يقوم بحساب قيمة مهمة جداً وهي مدى تسارع الدالة عند قيمة معينة وإتجاهها. باستخدام المشتقة بإمكاننا حساب القيم الصغرى لدالة معينة. إذا حسبنا مشتقة دالة عند قيمة معينة وكانت المشتقة موجبة فإن هذا يعني أن الدالة تزايدية، وإذا كانت القيمة سالبة فإن الدالة تناقصية. فبالتالي لحساب القيم الصغرى لدالة معينة نقوم بحساب المشتقة عند نقطة معينة وإذا كانت المشتقة سالبة فإننا يجب أن نتحرك نحو اليمين (نزيد القيمة) وإذا كانت المشتقة موجبة فإننا نحتاج أن (ننقص القيمة) بمعنى آخر لتحديث قيم w1 نحسب
مشكلة حساب المشتقة أنها قد تزداد فجأة، خصوصاً في الدوال التي تتغير بشكل كبير، بالتالي نحتاج نضيف ما يسمى بمعامل التعلم learning rate
وهو يساعدنا في التحكم في مدى تسارع تحديث القيم. فإذا كانت القيمة كبيرة سيتم التعلم بشكل أكبر ولكن قد لا نصل لقيمة الدالة الصغرى.
لاحظ أن قيمة المشتقة هي
حيث أننا استخدمنا chain rule
لاحظ بأننا نشتق بالنسبة للمتغير وبالتالي نفترض بقية القيم ثوابت. بنفس الطريقة
حيث
ملاحظة
الخوارزمية تعتمد على إيجاد مشتقة الدالة ولكن هناك مشكلة وهي أن المشتقة لا تكون موجودة دائماً. مثلاً المشتقة لدالة المقياس
غير موجودة عند x = 0. هناك حلول لهذه المشكلة وهي تقدير المشتقة. مثلاً نفترض دائماً ان المشتقة
المشكلة الثانية هي أن الدالة قد تحتوي على أكثر من قيمة صغرى محلية وبالتالي لن نصل للقيمة الصغرى المطلقة. الحل لهذه المشكلة هي بتغيير معامل التعلم.
كما نرى في الرسمة فإننا نقوم بتغيير معامل التعلم مع كل نقطة جديدة، ثم نقوم بزيادته بشكل مفاجيء بحيث أننا إذا وصلنا إلى قيمة صغرى محلية يمكننا التخلص منها.
السلام عليكم جزاك الله كل خير على هذا المقال الرائع
وعليكم السلام، شكراً …
جميل جداً اختصرت علي الشيء الكثير ,, اشكرك
شكرا جزيلا لك وبارك الله فيك وبعلمك
شكرا على الشرح الجميل والبسيط، ولكن اتمنى ان تضيف لنا كيف نستطيع تطبيق ذلك باستخدام مثال عملي في لغات البرمجة
شرح قيم جداً شكراً لكم، أقترح إضافة زر إعجاب للمقالات على الموقع
شكرًا جزيلًا .. شرح مختصر وقيم لمفهوم قد يكون معقد عند البعض
لماذا قيمة المشتقة للمتغير w1 تحتوي على x بينما قيمة المشتقة للمتغير w0 لاتحتوي على x ?
شكراً لك