تدريب الشبكات العصبية — كيف «تتعلّم» الآلة؟
الجزء الثاني يغوص في قلب التعلم العميق: كيف تُحدَّث الأوزان؟ ما هو الانتشار العكسي؟ كيف نتجنّب Overfitting؟ وكيف تعمل CNN للصور وRNN للنص — مع أمثلة مفصّلة خطوة بخطوة.
حلقة التدريب — Training Loop
تدريب شبكة عصبية = تكرار نفس الحلقة آلاف المرات حتى يتحسّن النموذج. كل Epoch = مرور كامل على كل بيانات التدريب.
- Forward Pass: أدخل batch من الأمثلة → احسب التنبؤ.
- حساب Loss: قارن التنبؤ بالإجابة الصحيحة → رقم خطأ.
- Backward Pass (Backprop): احسب كيف يؤثّر كل وزن على الخطأ.
- Update Weights: عدّل الأوزان قليلاً لتقليل Loss.
- كرّر على batch التالي... حتى نهاية Epoch... حتى التقارب.
Batch: مجموعة صغيرة (32، 64، 128 مثال) تُعالَج معًا — توازن بين سرعة واستقرار. Epoch: epoch واحد = كل بيانات التدريب مرة. Iteration: خطوة update واحدة = batch واحد. 60,000 صورة، batch=128 → ~469 iteration/epoch.
دوال الخسارة (Loss Functions)
دالة الخسارة تقيس «كم أخطأنا؟» — رقم واحد. التدريب = تقليل هذا الرقم. اختيار Loss يعتمد على نوع المهمة.
| دالة الخسارة | المهمة | الفكرة |
|---|---|---|
| MSE (Mean Squared Error) | انحدار — التنبؤ برقم | متوسط مربّع الفرق بين التنبؤ والحقيقة |
| Cross-Entropy | تصنيف — فئات | تعاقب التنبؤات الواثقة الخاطئة بقوة |
| Binary Cross-Entropy | تصنيف ثنائي (نعم/لا) | حالة خاصة لـ 2 فئات |
| Huber Loss | انحدار مع outliers | أقل حساسية للقيم الشاذة من MSE |
تصنيف 3 فئات: الحقيقة = «قطة» [1, 0, 0]. التنبؤ = [0.7, 0.2, 0.1]. Cross-Entropy = -log(0.7) ≈ 0.36 — خطأ معتدل.
إذا تنبّأ [0.01, 0.98, 0.01] (واثق لكن خطأ!) → Loss = -log(0.01) ≈ 4.6 — عقوبة شديدة. هذا يدفع النموذج ليكون واثقًا عندما يكون صحيحًا.
الانحدار التدريجي (Gradient Descent)
تخيّل أنك على جبل ضبابي وتريد النزول لأدنى نقطة (أقل Loss). Gradient = اتجاه أشد صعود. للنزول: اذهب عكس Gradient.
Learning Rate (معدل التعلّم): حجم الخطوة. كبير جدًا → تقفز فوق الحد الأدنى (تذبذب). صغير جدًا → بطيء جدًا (ساعات/أيام). قيم شائعة: 0.001، 0.0001.
أنواع Gradient Descent
Batch GD
يستخدم كل البيانات في كل خطوة. دقيق لكن بطيء — ذاكرة ضخمة.
Stochastic GD (SGD)
مثال واحد في كل خطوة. سريع، noisy — لكن يهرب من minima محلية.
Mini-batch GD
مجموعة صغيرة (32–256) — الأكثر استخدامًا. توازن سرعة/استقرار.
Gradient Descent = تمشي خطوة بخطوة للأسفل. SGD = خطوات عشوائية سريعة. Mini-batch = مجموعات صغيرة من hikers يتفقون على الاتجاه. Adam (لاحقًا) = GPS ذكي يعدّل حجم الخطوة تلقائيًا.
الانتشار العكسي (Backpropagation)
السؤال: شبكة فيها ملايين الأوزان — كيف نعرف أي وزن نعدّله وبكم؟ Backpropagation (1986 — Rumelhart, Hinton) — الحل.
الفكرة: Chain Rule (قاعدة السلسلة) من حساب التفاضل. الخطأ يبدأ من طبقة المخرج و«ينتشر للخلف» — كل طبقة تحسب مساهمتها في الخطأ وتمرّر gradient للطبقة السابقة.
Forward: x → طبقة1 → طبقة2 → y_pred = 0.8. الحقيقة y_true = 1.0. Loss = 0.04.
Backward:
- طبقة المخرج: «خطأي = 0.2 — gradient للطبقة 2 = ...»
- طبقة 2: «استلمت gradient — أوزاني w5, w6 مسؤولان جزئيًا — أعدّلهم»
- طبقة 1: «نفس الشيء — w1, w2, w3, w4»
كل وزن يحصل على gradient يخبره: «زِد قليلًا» أو «قلّل قليلًا». Update: w = w − lr × gradient.
في شبكات عميقة جدًا قديمة: gradient يصغر exponentially (vanishing) — الطبقات الأولى لا تتعلّم. أو يكبر (exploding) — NaN. الحلول: ReLU، Batch Normalization، Residual Connections (ResNet)، Gradient Clipping.
المحسّنات (Optimizers) — أذكى من SGD
SGD البسيط يعمل، لكن محسّنات حديثة أسرع وأكثر استقرارًا — تعدّل learning rate تلقائيًا لكل وزن.
| المحسّن | الفكرة | متى تستخدمه |
|---|---|---|
| SGD | أساسي — gradient × lr | مع Momentum — baseline |
| SGD + Momentum | «زخم» — يتذكّر الاتجاه السابق | تسريع في valleys |
| RMSprop | lr متكيّف لكل وزن | RNN، بعض CNN |
| Adam | Momentum + adaptive lr — الأكثر شيوعًا | افتراضي لمعظم المشاريع |
| AdamW | Adam + weight decay صحيح | Transformers، LLM |
ابدأ بـ Adam، lr=0.001. إذا Overfitting → قلّل lr أو زِد regularization. للت fine-tuning LLM → AdamW مع lr صغير جدًا (1e-5).
المعاملات الفائقة — ما تختاره أنت
- Learning Rate: 0.1، 0.01، 0.001 — الأهم. جرّب Learning Rate Finder.
- Batch Size: 32، 64، 128 — أكبر = أسرع لكن ذاكرة أكثر.
- Epochs: 10–100+ — استخدم Early Stopping.
- عدد الطبقات/العصبونات: ابدأ صغيرًا، زِد تدريجيًا.
- Activation: ReLU للمخفية، Softmax/Sigmoid للمخرج.
التنظيم — مكافحة Overfitting
Overfitting: النموذج «يحفظ» بيانات التدريب — دقة 99% train، 60% test. Underfitting: بسيط جدًا — 70% train وtest. الهدف: تعميم جيد.
Dropout
أثناء التدريب: «أطفِ» 20–50% من العصبونات عشوائيًا. يمنع الاعتماد على عصبونات محددة — ensemble ضمني.
L2 Regularization
عقوبة على أوزان كبيرة — تفضّل أوزانًا صغيرة → نموذج أبسط.
Batch Normalization
تُطبّع مخرجات كل طبقة — تدريب أسرع، أقل حساسية لـ lr.
Early Stopping
توقف عندما validation loss يبدأ بالارتفاع — قبل Overfitting.
Data Augmentation
زِد البيانات: قلب صور، crop، noise — «بيانات جديدة» مجانية.
More Data
أفضل regularizer — إن أمكن.
طبقة 128 عصبون، Dropout=0.5. في كل batch تدريب: 64 عصبون «نائمة» عشوائيًا. في Inference: كل العصبونات تعمل لكن outputs × 0.5 (scaling). النتيجة: شبكة أكثر متانة — لا تعتمد على مسار واحد.
CNN — الشبكات الالتفافية (Convolutional Neural Networks)
الصورة 224×224 = 50,176 بكسل. Fully Connected من 50K → 1000 = 50 مليون وزن — غير عملي. CNN تستغل بنية الصورة: البكسلات القريبة مترابطة.
مكوّنات CNN
- Convolution Layer: filter صغير (3×3، 5×5) «ينزلق» على الصورة — يكتشف حواف، ألوان، textures.
- Pooling: Max/Average Pool — يُصغّر الحجم (224→112→56) — يقلّل المعاملات.
- Fully Connected: في النهاية — تصنيف نهائي.
1. صورة 128×128 RGB → Conv 32 filters 3×3 → ReLU → MaxPool 2×2.
2. Conv 64 filters → ReLU → MaxPool.
3. Flatten → Dense 128 → Dropout 0.5 → Dense 2 → Softmax.
4. تدريب 20 epoch على 10,000 صورة — دقة ~92% على test.
5. Inference: صورة جديدة → [0.08, 0.92] → «كلب» 92%.
Architectures مشهورة: LeNet, AlexNet, VGG, ResNet, EfficientNet — يمكنك استخدامها جاهزة (Transfer Learning — الجزء 3).
RNN — الشبكات المتكررة (Recurrent Neural Networks)
MLP وCNN: مدخل ثابت الحجم. لكن النص والصوت تسلسل — كل كلمة تعتمد على السابقة. «الرياضيون الاجانب» vs «الاجانب الرياضيون» — الترتيب يُهمّ.
RNN لها «ذاكرة» — hidden state يُمرَّر من خطوة زمنية للتالية. LSTM وGRU — variants تحل مشكلة «forgetting» في تسلسلات طويلة.
بوابات (gates) تتحكم: ما أتذكّر، ما أنسى، ما أُخرج. ممتاز للنص، الصوت، السلاسل الزمنية. لكن بطيء — صعب موازاتته. لذلك Transformer (الجزء 3) تفوّق في معظم مهام NLP.
جملة: «الفيلم رائع جدًا!» — كلمة كلمة:
- «الفيلم» → hidden state h1
- «رائع» → h2 (h1 + «رائع» — positive signal)
- «جدًا» → h3 (تعزيز positive)
- «!» → h4 → Dense → Softmax → Positive 94%
مثال مشروع كامل — من البيانات للنموذج
مشروع: تصنيف أرقام MNIST — خطوة بخطوة (مفاهيمي — الكود في PyTorch/TensorFlow لاحقًا).
- البيانات: 60,000 صورة 28×28 رمادية، أرقام 0–9. Split: 50K train, 10K test.
- Preprocessing: normalize pixels إلى 0–1. (اختياري) augmentation: rotate ±10°.
- Architecture: Flatten 784 → Dense 128 ReLU → Dropout 0.2 → Dense 64 ReLU → Dense 10 Softmax.
- Loss: Cross-Entropy. Optimizer: Adam, lr=0.001.
- Training: batch=128, epochs=15, validation split 10%.
- Monitoring: train loss ↓, val loss ↓ — إذا val ↑ → Early Stop.
- Result: ~97–98% accuracy على test — ممتاز لـ MLP بسيط.
- Improvement: CNN بسيط → 99%+.
في الجزء الثالث: Transformers، LLM، GANs، Transfer Learning، النشر، الأخلاقيات، ومسارك التعليمي.