كسر حاجز الخطية
الـ perceptron أثبت إن الـ neuron الصناعي الواحد يقدر يتعلّم الـ patterns اللي بتتفصل خطيًا. بس مسألة XOR وعدد مالوش آخر من المهام الحقيقية محتاجين حاجة أكتر: القدرة إنك ترسم decision boundaries منحنية ومش منتظمة ومعقّدة. والإجابة كانت قدام الكل — ارصّ الـ perceptrons فوق بعض.
الـ multi-layer perceptron (الشبكة العصبية متعددة الطبقات) (MLP) بتزوّد layer أو أكتر من الـ neurons بين الـ inputs والـ outputs. ودي اسمها الـ hidden layers (الطبقات المخفية)؛ بتحوّل الخصائص الخام لـ representations جديدة قبل خطوة الـ classification أو الـ regression الأخيرة. وكل hidden layer تقدر تكتشف patterns أكتر تجريدًا من اللي قبلها: الحواف من الـ pixels، وبعدين الأشكال من الحواف، وبعدين الأشياء من الأشكال. والعمق بيكسب القدرة التعبيرية.
الفكرة الأساسية: لما تركّب تحويلات خطية كتير لسه بيطلعلك تحويل خطي. وعشان تكسب لاخطية حقيقية، كل neuron بيطبّق activation function (دالة تنشيط) على المجموع الموزون بتاعه. ومن غير الـ activation functions، شبكة من مية layer بتنهار لضرب matrix واحد وبس، ومبتبقاش أقوى من perceptron واحد.
الـ activation functions
الـ activation function بتغلّف المجموع الموزون الخطي بتحويل مش خطي. والـ activation functions المختلفة بتختلف في النعومة وسلوك الـ gradient والتكلفة الحسابية. واختيار الـ function المناسبة للـ layer المناسبة خليط من الفن والنظرية.
الـ sigmoid بيضغط أي رقم حقيقي في المجال (0، 1)، وده بيخلّيه طبيعي لاحتمالات الـ outputs الثنائية. هو اللي عرّف الـ neural networks الأولانية. ونقطة ضعفه الكبيرة: الـ gradient بيقرّب من الصفر عند الـ inputs الكبيرة جدًا أو الصغيرة جدًا، وده بيعمل مشكلة الـ vanishing gradient (التدرج المتلاشي). ونادرًا ما بيتستخدم في الـ hidden layers النهارده؛ بس لسه مشهور في output layers الـ binary classification.
الـ rectified linear unit (وحدة الخطية المصحَّحة) (ReLU) غيّرت كل حاجة. متعرّفة ببساطة كـ max(0, z): بتعدّي القيم الموجبة زي ما هي وبتصفّر السالبة. شكلها بسيط جدًا — بس الـ ReLU بتتدرّب أسرع بكتير من الـ sigmoid أو الـ tanh في الشبكات العميقة. والـ gradient بتاعها يا 0 (للـ inputs السالبة) يا 1 (للموجبة)، فبتتجنّب الـ saturation في الناحية الموجبة وبتسيب الـ gradients تعدّي بحرية في layers كتير.
الـ dead neurons (العصبونات الميتة) خطر حقيقي مع الـ ReLU. لو weights neuron اتحدّثت بحيث الناتج بتاعه قبل الـ activation يبقى سالب دايمًا، هيطلّع 0 لكل input للأبد — والـ gradient بتاعه 0 فمبياخدش أي تحديث. والـ Leaky ReLU والـ Parametric ReLU والـ ELU بيعالجوا ده بإنهم يسيبوا gradient صغير عايش في الناحية السالبة.
architecture الشبكة: العمق قصاد العرض
كل MLP بتتعرّف بعدد الـ layers وعدد الـ neurons في كل layer والـ activation functions. الـ input layer فيها neuron لكل خاصية. والـ output layer فيها neuron لكل فئة (للـ classification) أو neuron واحد (للـ regression العادي). والـ hidden layers هي ملعب المصمّم.
الـ width (العرض) هو عدد الـ neurons في الـ layer. والـ layer الأعرض تقدر تمثّل patterns أكتر في تحويل واحد، بس كل neuron زيادة بيزوّد الـ parameters. والـ depth (العمق) هو عدد الـ hidden layers. والشبكات الأعمق تقدر تمثّل تجريدات هرمية بـ parameters أقل من الشبكات الضحلة العريضة جدًا — بس أصعب في التدريب لأن الـ gradients لازم تعدّي على layers أكتر.
neural network بـ hidden layer واحدة عرضها كفاية وactivation function مش خطية تقدر تقرّب أي function مستمرة على مجال مضغوط بأي دقة عايزها. سايبنكو أثبت النتيجة دي سنة 1989 للـ sigmoid وهورنيك عمّمها سنة 1991 على activations تانية، وده بيثبت إن الـ MLPs هي universal function approximators (مقرِّبات دوال شاملة).
الشرط: “العرض الكفاية” ممكن يبقى أُسّي. وفي التطبيق العملي، العمق — مش العرض اللي مالوش حدود — هو مفتاح التقريب الكفء للـ functions المنظّمة اللي بتظهر في المشاكل الحقيقية. وhidden layers اتنين بعرض معتدل عادةً بيغلبوا hidden layer واحدة ضخمة.
الـ forward propagation
الـ forward propagation (الانتشار الأمامي) هو عملية حساب output الشبكة من input معيّن. بيمشي layer ورا layer: output layer بيبقى input اللي بعدها. وكل layer بتعمل تحويل خطي (ضرب matrix زائد bias) وبعده activation مش خطية.
وبشكل الـ matrices، إنك تعالج batch كاملة من الأمثلة مرة واحدة حاجة مباشرة — كل عمود في matrix الـ activations مثال واحد. والحساب المجمّع ده ماشي بنعومة مع الـ GPUs، اللي فيها آلاف العمليات الحسابية بتشتغل بالتوازي. ودي من الأسباب اللي خلّت الـ deep learning عملي: الـ GPUs حوّلت الـ forward propagation من loop ورا بعض لضرب matrix ضخم.
activation الـ output layer بتعتمد على المهمة. في الـ binary classification، output الـ sigmoid بيدّي احتمال في (0،1). وفي الـ multi-class classification، الـ softmax بيحوّل الدرجات الخام لتوزيع احتمالي على الفئات. وفي الـ regression، مفيش activation خالص — الـ output الخطي الخام هو الـ prediction.
العمق والسعة والـ overfitting
زيادة الـ layers بتزوّد الـ capacity (السعة) بتاعة الشبكة — قدرتها إنها تعمل modeling لـ functions معقّدة. بس السعة سلاح بحدين. شبكة سعتها كبيرة جدًا بالنسبة لبيانات التدريب هتحفظ أمثلة التدريب بدل ما تعمّم على أمثلة جديدة. وده الـ overfitting (الإفراط في التخصص): الشبكة بتتعلّم الـ noise في البيانات مش الـ signal.
الشبكات الأعمق مش لازم تعمل overfitting أكتر من الضحلة — اللي يهم هو نسبة الـ parameters لأمثلة التدريب اللي فيها معلومات. شبكة من 10 layers متدرّبة على 10 ملايين صورة ليها labels ممكن تعمّم بشكل هايل؛ ونفس الشبكة متدرّبة على 100 مثال غالبًا هتعمل overfitting. وأدوات إدارة السعة — الـ dropout والـ weight decay والـ early stopping — جاية في الوحدة الجاية.
قوة العمق في تركيب الـ representations. الـ layer 1 بتكتشف patterns محلية (الحواف، الفونيمات، n-grams). والـ layer 2 بتجمّعها في هياكل أكبر (الأشكال، المقاطع، العبارات). والـ layer 3 بتبني تجريدات أعلى. وإعادة الاستخدام التركيبية دي معناها إن الشبكات العميقة تقدر تمثّل patterns معقّدة جدًا بـ neurons أقل بكتير من الشبكات الضحلة — ودي ميزة متثبّتة نظريًا لأنواع معيّنة من الـ functions.
- الـ hidden layers بتخلّي الشبكة تتعلّم تحويلات مش خطية للـ inputs، وده بيكسر حاجز الخطية اللي مقيّد الـ perceptron الواحد.
- الـ activation functions ضرورية: من غيرها، رص layers خطية بيطلّع تحويل خطي وبس. والـ ReLU هي الاختيار المسيطر للـ hidden layers النهارده.
- الـ sigmoid بيتشبّع وبيعمل vanishing gradients؛ والـ tanh متمركز بس بيتشبّع هو كمان؛ والـ ReLU سريعة في التدريب بس ممكن تطلّع dead neurons؛ والـ Leaky ReLU والـ GELU بيعالجوا ده.
- نظرية الـ universal approximation بتضمن إن hidden layer واحدة بعرض كفاية تقدر تقرّب أي function مستمرة — بس العمق أكفأ في التطبيق العملي.
- الـ forward propagation بيحسب الـ outputs layer ورا layer: z = Wa + b، وبعدين a = f(z). والحساب كله بيتلخّص في ضرب matrices، وده بيسمح بالتوازي على الـ GPU.
- الـ output layer بتستخدم الـ sigmoid للـ binary classification، والـ softmax لأكتر من فئتين، ومفيش activation للـ regression.
- العمق بيسمح بـ representations تركيبية وقدرة تعبيرية أُسّية بـ parameters كتير — وده السبب الأساسي إن الـ deep learning مسيطر على الرؤية والكلام واللغة.