مقدمة في تعلم الآلة – شرح مبسط (الجزء الثاني)

399

في المقال السابق تحدثنا عن تعلم الآلة، السبب الذي يدفعنا لتعلمه، تطبيقاته، الفرق بينه وبين الذكاء الاصطناعي، تأثير الذكاء الاصطناعي، وحقيقة الSupervised learning وتكونه من  نهجين رئيسيين :

Regression , classification

Regression وفي بقية هذا المقال سنقوم بالتركيز على ال

يقوم الRegression  بتوقع قيمة مستمرة ومتغيرة  continuous target value للهدف، حيث يسمح لك بتقدير قيمة تقريبية مثل سعر المنزل مثلا بناء على مدخل معين كموقعه، وهنا يعني الTarget value المتغير الغير معروف الذي نحاول توقعه والذي يمثل سعر المنزل في هذا المثال، ومستمر هنا تعني أن لكل قيمة مدخل قيمة مخرج. فمثلا لا توجد مواقع منازل ليس لها سعر لكل موقع سعر معين تقريبي ودائما ستكون هذه هي الحالة.

أما وزن وطول الشخص فهي قيم مستمرة continuous في حين أن عدد الأطفال لدى الشخص هي قيمة Discrete أو متقطعة فلا يمكن أن يكون لدى شخص طفلين ونصف مثلا..

توقع الدخل هو مشكلة شائعة لتوضيح فكرة الRegression حيث تكون الX مزودة بجميع المعلومات التي يعتمد عليها الدخل مثل عدد سنين التعليم وعدد سنين الخبرة كل معلومة منهم على حدى تسمى feature والتي بإمكانها أن تكون رقمية مثل عدد سنين الخبرة، أو وصفية مثل مجال الدراسة أو المسمى الوظيفي.

لاحظ أن الx بإمكانها أن تكون Tensor بأي عدد من الأبعاد :

1D Tensor : يمثل صف واحد وعدة أعمدة

2D Tensor : يمثل عدة صفوف وعدة أعمدة

3D Tensor : يمثل مصفوفة بعدة صفوف وعدة أعمدة وعمق depth

في مثالنا البسيط يأخذ كل صف مستوى تعليم الشخص ودخله بإمكانك إضافة المزيد من الأعمدة cols مع المزيد من المميزات features وستحصل على نموذج أكثر تعقيدا وعلى الأرجح أكثر دقة

ال Training Set

رقم الملاحظةعدد سنوات التعليم العالي ((Xالدخل السنوي (Y)
1480,000$
2591,500$
3042,000$
4255,000$
,,,,,,,,,
N6100,000$

ال Test Set

14؟؟؟؟؟
26؟؟؟؟؟

لدينا مجموعة البيانات X الخاصة بنا ، والقيم المستهدفة المقابلة Y.  هدف (Ordinary least squares (OLS  هو تعلم نموذج خطي يمكننا استخدامه للتنبؤ ب y جديدة بإعطائه X لم يتم تجربتها من قبل وتوقع yالمقابلة لها بأقل قدر ممكن من الخطأ؛ نريد أن نخمن مقدار الدخل الذي يجنيه شخص ما بناءً على عدد سنوات التعليم التي تلقاها.

X_train = [4, 5, 0, 2, …, 6] # years of post-secondary education

Y_train = [80, 91.5, 42, 55, …, 100] # corresponding annual incomes, in thousands of dollars

ال linear regression هو طريقة parametric  ما يعني أنه يفترض شكل العلاقة بين ال x  وال y  ويقوم بتطبيقه

 هو ثابت الy

 هو ميل الخط

هدفنا هو معرفة parameters للنموذج وفي هذه الحالة هم  و التي تقوم بتقليل الخطأ أثناء التنبؤ بقيم الy

ولإيجاد الparameters الأفضل نقوم بتعريف cost function والتي بدورها تقوم بحساب لأي مدى نموذجنا غير دقيق

وإيجاد الparameters التي تقوم بتقليل قلة دقة نموذجنا

عن طريق الرسم في ال2D سيكون النموذج هو خط في حين أنه في 3D يكون النموذج هو مستوى plan

نقوم بحساب الفرق بين كل بيان حقيقي تم قياسه y وتوقعنا من النموذج   وتربيع هذه القيم لتجنب الأرقام السالبة وجمعهم للحصول على المتوسط

لمشكلة بسيطة كهذه بإمكاننا استخدام التكامل لإيجاد الparameters التي تسبب أقل خسارة ولكن بزيادة تعقيد المشكلة لا يمكننا استخدام التكامل لهذا نستخدم نهجا آخر يسمى gradient descent والذي يسمح لنا بتقليل الcost function.

ما هو الgradient descent ؟

“ضع عصابة على عينيك، خذ خطوة أسفل التل، ستعرف أنك وصلت للقاع عندما لا يكون لديك اتجاه آخر للذهاب إليه سوى للأعلى”

الهدف من ال gradient descent هو : إيجاد أصغر قيمة لLoss function الخاصة بالنموذج الذي لدينا، بواسطة الاستمرار في إيجاد تقريب أفضل وأفضل له. بإعطاء مثال صغير تخيل نفسك تسير في واد معصوب العينين؛ الهدف هو إيجاد أسفل الوادي، كيف يمكنك فعل ذلك؟

بإمكاننا التفكير في منهج معقول للقيام بهذا فعلى الأرجح ستقوم بلمس الأرض من حولك والتحرك في الاتجاه الذي تنحدر له الأرض ثم أخذ خطوة في ذلك الاتجاه والتوقف وتكرار نفس العملية ستعرف أنك وصلت للسطح إذا كان المكان الذي تقف فيه عندما تأخذ خطوة منه في أي اتجاه فإنك تظل في نفس الارتفاع وربما عليك أن تصلي كي لا تكون على حافة مسطحة لجبل!

بالعودة للرياضيات تمثل الأرض الLoss function أما رغبتنا في الوصول للقاع فهي رغبتنا في الوصول لأصغر قيمة للLoss function

وقد رأينا صورة لها من قبل هي :

 

حيث تمثل هذه المعادلة الCost function in regression

بالتفكير قليلا ستكتشف أن ما تراه أمامك هو فعليا معادلة من مجهولين ،  لأن باقي المتغيرات محددة بالفعل بما أن قيمX و y يتم إعطاءها أثناء التدريب سنحاول الآن تقليل قيمة الCost بأكبر قدر ممكن

بالتالي تكون الدالة = ونقوم بعمل بعض المحاولات لتخمين قيم  التي تجعل قيمة الدالة صغيرة

إن كانت لديك بعض المعرفة بالتفاضل فأنت تعرف أنه لكي على مدى التغيير في الدالة سواء بالزيادة أو النقص فعلينا اشتقاقها فنقوم باشتقاق الدالة اشتقاقا جزئيا منسوب لل ولل  [dz/dβ0, dz/dβ1] والذي يعطينا معلومات عن مدى تغير الدالة عند تغيير قيم  بمقدار ضئيل.

وبعبارة أخرى ما هو مقدار دخلك السنوي إن لم تكن قد تعلمت تعليما جامعيا أبدا؟ هل يجعل هذا الCost function كبيرة ؟! لكننا نريد تقليلها أليس كذلك؟! إذا نقوم برفع سنوات التعليم العالي للذهاب بالاتجاه الآخر، الاتجاه الذي تقل فيه قيمة الCost function

بالمثل إذا قمت بتزويد تقديرك رقميا للمعدل الذي يزداد به الدخل مع كل سنة تعليمية ، كم تزيد الCost Function؟

وكيف تحلل النتائج التي أمامك

حسنا إذا كانت قيمة التفاضل الجزئي dz/dβ1 سالبة تعرف أن زيادة β1 أمر جيد لأنه سيقلل من القيمة الكلية للCost function

أما إذا كانت موجبة فعلى الأرجح أنت تحتاج لتقليل قيمة الβ1، أما إذا كانت بصفر فهنيئا لك وصلت لوضع مثالي أو وصلت للأرض كإسقاط على المثال السابق ذكره.

بالطبع هناك الكثير من الطرق والخدع المطلوبة لتنفيذ هذا النهج ولكن في المجمل تكون هذه هي الفكرة العامة

Over fitting 

إن كنت حضرت أي محاضرة تعلم آلة سابقة فعلى الأرجح أنك سمعت بهذا المصطلح، لكن ماذا يعني بالضبط؟!

يحدث الover fitting عندما تقوم الدالة بتفسير الdata set المستخدمة في التدريب بشكل رائع، لكن مع ذلك لا تستطيع تعميم هذا التفسير للبيانات الغير مستخدمة في التدريب أو كما أطلقنا عليها Test data ، بمعنى آخر تكون الدالة مناسبة فقط لهذه الكمية من البيانات ومع بيانات أخرى تعطي نتائج خاطئة.

ويحدث عندما تبالغ في تدريب الخوارزمية للحد الذي يدفعها لرؤية أنماط بين النتائج غير موجودة بالواقع بل موجودة فقط في البيانات التي استخدمتها في التدريب بالطبع يخلق هذا عدة مشاكل ويجعل النموذج الذي تستخدمه أكثر تعقيدا.

underfitting هي مشكلة معاكسة حيث يكون فيها النموذج الذي تستخدمه أكثر بساطة من أن يلتقط الأنماط المتواجدة بالبيانات.

Bias-Variance Tradeoff

الBias : مقدار الخطأ الناتج عن التقريب وهو شيء طبيعي لانه في الغالب تكون هناك مشكلة في دقة عملية القياس.

الvariance : مقدار تغير القراءة في كل مرة تتم فيها عملية القياس.

ولتوضيح الأمر أكثر تأمل هذه الصورة

كما نلاحظ بالصورة فإن الover fitting يؤدي إلى تواجد variance كبير.

كلما ازداد تعقيد النموذج الذي تستخدمه أصبح أكثر مرونة في التعامل مع البيانات وبالتالي يقل انحيازه(بمعنى أنه يبلي بلاء حسنا في وصف الdata set) ولكن يزداد الvariance الخاص به بمعنى أنه يصبح من الصعب تعميم هذا النموذج ليشمل بيانات لم يتم استخدامها في التدريب.

تذكر أن الغرض الرئيسي لبناء النموذج هو أن يتصرف بشكل جيد مع البيانات التي لم يرها من قبل فلا توجد فائدة تذكر من إعادة تصنيف صندوق رسائلك إلى رسائل مزعجة ورسائل غير مزعجة إن كان بالفعل تم تصنيفه من قبل!

لكن كيف نتغلب على مشكلة الover fitting؟

في الحقيقة هناك طريقتين لذلك :

1- استخدام بيانات أكثر للتدريب More Data set

2- استخدام التنظيم أو الRegularization عن طريق استخدام نموذج يعطي أولوية لFeature معينة عن البقية أو يسمح بالأخذ بعين الاعتبار الكثير من Features.

الجزء الأول من المعادلة يمثل الCost function العادية أما الجزء الثاني فيمثل الجزء المسئول عن الRegularization والذي يعطي قيمة وقوة كبير لأي Feature مختارة

أما جزء اللامدا  فهو بارامتر زائد يمكن تزويد قيمته أو إنقاصها بناء على أداء النموذج الخاص بك.

كلما ازدادت قيمة  ربما يؤدي ذلك لزيادة قيمة معاملات بيتا، مما بدوره يمكن أن يؤدي إلى حدوث Over Fitting.

ولكي تتمكن من تقرير أحسن قيمة لل ستستخدم وسيلة تسمى cross-validation والتي تتضمن الاحتفاظ بجزء من بيانات التدريب أثناء التدريب وترى كيف يتعامل النموذج مع البيانات الجديدة سوف نتطرق لهذه الطريقة بتعمق أكثر في جزء آخر من هذه السلسلة.

الآن نستطيع تلخيص ما تم ذكره في هذا والمقال السابق كالآتي :

  • كيف يمكن الsupervised learning الحواسيب من التعلم من البيانات المجدولة بدون برمجة خارجية.
  • مهام ال (supervised learning (Regression – classification.
  • linear Regression.
  • الOver fitting و ال Regularization.

في المقال القادم سنتحدث عن أساسيات الclassification، من  logistic regression and support vector machines.

لأولئك المهتمين بالأمر إليك بعض المساعدات :

Implementing gradient descent

بإمكانك كتابة كود لعمل gradient descent بلغة البايثون عن طريق متابعة هذه الدروس وبإمكانك فهم الرياضيات المبني عليها الأمر بشكل أكبر عن طريق هذه الدروس . في الحقيقة أثناء استخدامك لخوارزميات تعلم الآلة بالفعل نادرا ما ستضطر لكتابة كود للgradient descent بنفسك ولكن فهمك لكيفية عمله عن طريق كتابته بنفسك سيجعلك تستخدم ذلك المكتوب مسبقا بطريقة أكثر كفاءة وإيجاد الأخطاء بسرعة إن وجدت.

لمعرفة المزيد عن الLinear regression بإمكانك قراءة chapter 1 -3 من هذا المرجع  متوفر منه نسخة أونلاين وهو مفيد جدا لتعلم مجال تعلم الآلة والتطبيق عليه.

أما للممارسة العملية فبإمكانك استخدام Boston housing data set بإمكانك استخدام بالGUI مثل Minitab أو Excel. أو تتحلى ببعض الشجاعة وتستخدم البايثون أو الR والطريقة الأخيرة مفيدة أكثر بالتأكيد.

بإمكانك أيضا تمرين نفسك في تحدي Kaggle ” توقع سعر منزل ” عن طريق حل المشكلة بنفسك أولا ثم قراءة نهج الآخرين في حلها.

يتبع..

مصدر مصدر1 مصدر2
تعليقات