تدريب الـ neural networks
الـ backpropagation بيدّيك الـ gradients. ودلوقتي ييجي الشغل الصنعة: إنك تختار الـ loss الصح، والـ optimizer الصح، والـ learning rate الصح، والـ regularization الصح عشان الـ gradients دي تعمل فرق.
بنقلّل إيه؟
الـ loss function (دالة الخسارة) هي الرقم الوحيد اللي التدريب بيحاول يقلّله. واختيارها لازم يمشي مع المهمة: MSE للـ regression، والـ cross-entropy للـ classification. واستخدام loss غلط بيوصّل لمشاكل gradient مستخبية بتعطّل التعلّم.
متوسط مربع الخطأ
الـ MSE بيعاقب الأخطاء الكبيرة تربيعيًا. وفي مهام الـ classification بيعمل مشكلة التشبّع — والـ cross-entropy (الإنتروبيا المتقاطعة) بتتجنّب ده لأنها بتطلّع gradient متناسب دايمًا مع غلط الـ prediction.
الـ stochastic gradient descent
أبسط optimizer: اطرح جزء η من الـ gradient من كل weight. ده الـ SGD (النزول التدرجي العشوائي): فعّال بس بطيء على أسطح الـ loss اللي حالتها وحشة — بيتهز من ناحية لناحية على المنحدرات الحادة بدل ما يمشي على طولها.
Adam وAdamW
الـ Adam بيتابع المتوسطات المتحرّكة للـ gradients (الـ momentum) ومربعاتها (الـ variance). خطوة كل weight بتتظبط بحجم الـ gradient بتاعه هو: الـ gradient الثابت بيخطو حوالي α مهما كان حجمه، واللي فيه noise بيخطو أقل. والـ AdamW بيفصل الـ weight decay عشان الـ regularization يشتغل زي ما المفروض.
الـ schedules والـ warmup
الـ learning rate الثابت نادرًا ما يبقى مثالي. ابدأ كبير عشان تتقارب بسرعة، وخلّص صغير عشان الظبط الدقيق. الـ cosine annealing ماشي على منحنى نص cosine. والـ warmup بيعلّي المعدل خطيًا على أول كام مية خطوة — وده حاسم مع الـ Adam.
كبير ولا صغير؟
- batches كبيرة — استخدام كفء للـ GPU وgradients دقيقة، بس بتخاطر بـ minima حادة بتعمّم ضعيف
- batches صغيرة — gradients فيها noise أكتر بتهرب من الـ minima الحادة وبتلاقي minima مسطّحة بتعمّم
- قاعدة الـ linear scaling — اضرب الـ learning rate في k لما تضرب حجم الـ batch في k
الـ dropout: الـ noise كدفاع

صفّر كل neuron باحتمال p أثناء التدريب. وكبّر في 1/(1−p) عشان تحافظ على متوسط الـ activation. ده الـ dropout (التسرب)، وبيمنع التعاون الضار. ووقت الاختبار كل الـ neurons شغّالة — والشبكة بتتصرّف زي متوسط عدد كبير من الـ sub-networks.
الـ batch normalization
اعمل normalization للـ pre-activations في كل layer على الـ mini-batch عشان تبقى بمتوسط صفر وvariance واحد. وبعدين طبّق scale بيتعلّم γ وshift β. ده الـ batch normalization (تطبيع الدفعة): بيشيل الـ internal covariate shift، ويسمح بـ learning rates أعلى، ويشتغل كـ regularization خفيف.
الوصفة الافتراضية
- الـ loss: cross-entropy (classification) أو MSE (regression)
- الـ optimizer: AdamW، β1=0.9، β2=0.999، weight decay 0.01–0.1
- الـ learning rate: cosine annealing مع linear warmup (5–10% من الخطوات)
- الـ batch: 32–256؛ وscaling للـ learning rate بالتناسب
- الـ regularization: dropout + batch normalization + weight decay
الـ ablation المنهجي
الوصفة نقطة بداية، مش معادلة جاهزة. غيّر مكوّن واحد كل مرة وثبّت الباقي. الـ datasets الكبيرة بتستحمل regularization أقل؛ والـ models الكبيرة غالبًا محتاجة أكتر. ده الـ ablation (الاستئصال): المنهج العلمي متطبّق على الـ hyperparameters.
اتعلّمت إيه
الـ loss لازم تمشي مع المهمة. الـ SGD هو الأساس؛ والـ Adam بيكيّف المعدلات لكل parameter؛ والـ AdamW بيصلّح الـ weight decay. والـ cosine annealing مع الـ warmup بيحسّن الأداء النهائي. والـ batches الصغيرة بتعمّم أحسن. والـ dropout والـ batch normalization بيعملوا regularization وبيثبّتوا. واعمل ablation بمنهجية عشان تفهم كل حتة.