مشكلة الـ overfitting
في الدرس اللي فات عن الـ linear regression (الانحدار الخطي)، شفنا إن الـ polynomial features بتخلّينا نناسب منحنيات. بس فيه فخ خطير: polynomial درجته عالية ممكن يعدّي على كل نقطة تدريب — ويجيب training error صفر — وفي نفس الوقت يطلّع predictions غلط خالص على بيانات جديدة. الـ model حفظ الـ noise بدل ما يتعلّم الـ pattern. وده الـ overfitting (الإفراط في التخصيص).
السبب الأساسي؟ weights كبيرة. لما الـ weights تكبر من غير قيود، الـ model بيبقى حسّاس زيادة — تغييرات صغيرة في الـ inputs بتعمل تقلّبات ضخمة في الـ outputs. والـ regularization (التنظيم) بيحل ده بإنه يزوّد عقوبة بتمنع الـ weights الكبيرة.
الـ regularized cost function
الفكرة أنيقة: عدّل الـ cost function (دالة التكلفة) بحيث الـ optimizer لازم يوازن بين هدفين بيتنافسوا. يناسب البيانات كويس (يقلّل الـ MSE) ويخلّي الـ weights صغيرة (يقلّل العقوبة). الـ regularization parameter (معامل التنظيم) λ بيتحكم في التوازن — λ أعلى معناها regularization أقوى.
الـ L2 regularization: الـ ridge regression
الـ ridge regression (انحدار ريدج) بيزوّد مجموع مربعات الـ weights على الـ cost function. العقوبة دي بتكبر تربيعيًا كل ما أي weight يكبر، فبتعمل ضغط قوي إن كل الـ weights تفضل صغيرة ومتوزّعة بالتساوي.
والـ ridge ليه حل مقفول بيوسّع الـ normal equation. الحد λI بيضمن إن الـ matrix دايمًا ينفع تتعكس — حتى لو عندك features أكتر من نقط البيانات.
الـ L1 regularization: الـ lasso regression
الـ lasso regression (انحدار لاسو) (Least Absolute Shrinkage and Selection Operator) بيزوّد مجموع القيم المطلقة للـ weights. والفرق الأساسي عن الـ ridge: الـ L1 يقدر يزق الـ weights للصفر بالظبط، فبيشيل فعليًا الـ features اللي مالهاش علاقة من الـ model.
الهندسة بتفسّر ده. منطقة قيد الـ L2 هي دايرة ناعمة — خطوط تساوي الـ loss عادةً بتلمسها عند نقط مش على المحاور (كل الـ weights مش صفر). أما منطقة قيد الـ L1 فهي معيّن (ماسة) بزوايا حادة على المحاور — وخطوط تساوي الـ loss غالبًا بتلمسها عند زاوية فيها weight واحد أو أكتر صفر بالظبط.
الـ elastic net: دمج L1 وL2
طب لو عايز الـ feature selection (L1) واستقرار الـ ridge (L2)؟ الـ elastic net (الشبكة المرنة) بتجمع العقوبتين. وده مفيد خصوصًا لما الـ features تبقى مترابطة — الـ lasso بيميل إنه يختار واحدة عشوائي من مجموعة features مترابطة، أما الـ elastic net فبتحتفظ بيهم مع بعض.
اختيار λ
قوة الـ regularization λ هي hyperparameter (معامل فوقي) — مش بيتعلّم من البيانات؛ لازم إنت تختاره. لو صغير أوي الـ overfitting بيفضل. ولو كبير أوي الـ model بيبسّط زيادة، ويتجاهل البيانات عشان weights قريبة من الصفر.
الطريقة المعتادة هي الـ cross-validation (التحقق المتقاطع): جرّب مدى من قيم λ (عادةً على مقياس لوغاريتمي: 0.001, 0.01, 0.1, 1, 10, 100)، قيّم كل واحدة بـ k-fold cross-validation، واختار اللي بتدّي أقل validation error.
النظرة البايزية
الـ regularization ليه تفسير احتمالي حلو. إنك تزوّد عقوبة بيساوي رياضيًا إنك تحط prior (توزيع قبلي) على الـ weights قبل ما تشوف البيانات. الـ L2 بيقابل Gaussian prior (إحنا شايفين إن الـ weights متوزّعة توزيع طبيعي حوالين الصفر). والـ L1 بيقابل Laplace prior (مدبّب جامد عند الصفر، فبيخلّي الأصفار بالظبط محتملة). والبيانات بتحدّث الاعتقادات دي.
استخدم الـ ridge لما تكون شايف إن كل الـ features بتساهم وعايز predictions مستقرة. استخدم الـ lasso لما تشك إن features كتير مالهاش علاقة وعايز feature selection أوتوماتيك. استخدم الـ elastic net لما الـ features تبقى مترابطة. واعمل scaling للـ features دايمًا قبل الـ regularization — وإلا العقوبة هتظلم الـ features اللي مقاييسها أكبر.
- الـ regularization بيحارب الـ overfitting بإنه يزوّد عقوبة على الـ weights الكبيرة في الـ cost function، وλ بتتحكم فيها.
- الـ L2 (ridge) بيزوّد مربعات الـ weights — بيقلّص كل الـ weights ناحية الصفر بس عمره ما بيوصّلها للصفر. وليه حل مقفول.
- الـ L1 (lasso) بيزوّد القيم المطلقة للـ weights — بيزق الـ weights اللي مش مهمة للصفر بالظبط، فبيعمل feature selection أوتوماتيك.
- الـ elastic net بتجمع L1 وL2، فبتدّي التناثر والاستقرار مع بعض للـ features المترابطة.
- اختار λ بالـ cross-validation. والـ regularization بيساوي إنك تحط Bayesian prior على الـ weights.