قراية
وضع الحكايات

الـ regularization (التنظيم)

~14 دقيقة قراية الدرس 3 في الوحدة 2

مشكلة الـ 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 تفضل صغيرة ومتوزّعة بالتساوي.

الـ cost function بتاعة ridge
J(\mathbf{w}) = \frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i - y_i)^2 + \lambda \sum_{j=1}^{p} w_j^2
الـ MSE زائد λ مضروبة في مجموع مربعات الـ weights. العقوبة بتقلّص الـ weights ناحية الصفر بس عمرها ما بتوصّلها للصفر بالظبط.

والـ ridge ليه حل مقفول بيوسّع الـ normal equation. الحد λI بيضمن إن الـ matrix دايمًا ينفع تتعكس — حتى لو عندك features أكتر من نقط البيانات.

حل الـ ridge
\mathbf{w} = (\mathbf{X}^T \mathbf{X} + \lambda \mathbf{I})^{-1} \mathbf{X}^T \mathbf{y}
الحد λI بينظّم عكس الـ matrix، فبيضمن حل واحد بس حتى في المسائل اللي حالتها وحشة.

الـ L1 regularization: الـ lasso regression

الـ lasso regression (انحدار لاسو) (Least Absolute Shrinkage and Selection Operator) بيزوّد مجموع القيم المطلقة للـ weights. والفرق الأساسي عن الـ ridge: الـ L1 يقدر يزق الـ weights للصفر بالظبط، فبيشيل فعليًا الـ features اللي مالهاش علاقة من الـ model.

الـ cost function بتاعة lasso
J(\mathbf{w}) = \frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i - y_i)^2 + \lambda \sum_{j=1}^{p} |w_j|
عقوبة القيمة المطلقة بتطلّع حلول متناثرة (sparse) — weights كتير بتبقى صفر بالظبط، فبيحصل feature selection أوتوماتيك.
ليه الـ L1 بيصفّر الـ weights؟

الهندسة بتفسّر ده. منطقة قيد الـ L2 هي دايرة ناعمة — خطوط تساوي الـ loss عادةً بتلمسها عند نقط مش على المحاور (كل الـ weights مش صفر). أما منطقة قيد الـ L1 فهي معيّن (ماسة) بزوايا حادة على المحاور — وخطوط تساوي الـ loss غالبًا بتلمسها عند زاوية فيها weight واحد أو أكتر صفر بالظبط.

الـ elastic net: دمج L1 وL2

طب لو عايز الـ feature selection (L1) واستقرار الـ ridge (L2)؟ الـ elastic net (الشبكة المرنة) بتجمع العقوبتين. وده مفيد خصوصًا لما الـ features تبقى مترابطة — الـ lasso بيميل إنه يختار واحدة عشوائي من مجموعة features مترابطة، أما الـ elastic net فبتحتفظ بيهم مع بعض.

الـ elastic net
J(\mathbf{w}) = \text{MSE} + \lambda_1 \sum |w_j| + \lambda_2 \sum w_j^2
بتجمع عقوبتي L1 (التناثر) وL2 (الاستقرار). اتنين hyperparameters: λ₁ بيتحكم في التناثر، وλ₂ بيتحكم في الانكماش.

اختيار λ

قوة الـ 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 اللي مقاييسها أكبر.

ومع الـ linear models والـ regularization في إيدك، إنت جاهز لطريقة مختلفة خالص — الـ decision trees، اللي بتتعلّم قواعد بدل معادلات، وطرق الـ ensemble اللي بتدمج learners ضعاف كتير في predictors أقويا.

أهم النقط
  • الـ 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.
الدرس اللي فاتالـ logistic regression (الانحدار اللوجستي) نظرة عامة على الموديول الوحدة التاليةالـ decision trees (أشجار القرار)