التعلم العميق

تدريب الشبكات العصبية كيف «تتعلّم» الآلة؟

Deep Learning Guide · الجزء 2 من 3

تدريب الشبكات العصبية — كيف «تتعلّم» الآلة؟

الجزء الثاني يغوص في قلب التعلم العميق: كيف تُحدَّث الأوزان؟ ما هو الانتشار العكسي؟ كيف نتجنّب Overfitting؟ وكيف تعمل CNN للصور وRNN للنص — مع أمثلة مفصّلة خطوة بخطوة.

✍ عبدالرحمن الرفاعي
Backprop + CNN
أمثلة عملية
01 التدريب

حلقة التدريب — Training Loop

تدريب شبكة عصبية = تكرار نفس الحلقة آلاف المرات حتى يتحسّن النموذج. كل Epoch = مرور كامل على كل بيانات التدريب.

  1. Forward Pass: أدخل batch من الأمثلة → احسب التنبؤ.
  2. حساب Loss: قارن التنبؤ بالإجابة الصحيحة → رقم خطأ.
  3. Backward Pass (Backprop): احسب كيف يؤثّر كل وزن على الخطأ.
  4. Update Weights: عدّل الأوزان قليلاً لتقليل Loss.
  5. كرّر على batch التالي... حتى نهاية Epoch... حتى التقارب.
Forward → Loss → Backprop → Update ↺ تكرار على كل batch وكل epoch
حلقة التدريب: Forward → Loss → Backprop → Update → تكرار
Batch vs Epoch vs Iteration

Batch: مجموعة صغيرة (32، 64، 128 مثال) تُعالَج معًا — توازن بين سرعة واستقرار. Epoch: epoch واحد = كل بيانات التدريب مرة. Iteration: خطوة update واحدة = batch واحد. 60,000 صورة، batch=128 → ~469 iteration/epoch.

02 Loss

دوال الخسارة (Loss Functions)

دالة الخسارة تقيس «كم أخطأنا؟» — رقم واحد. التدريب = تقليل هذا الرقم. اختيار Loss يعتمد على نوع المهمة.

دالة الخسارة المهمة الفكرة
MSE (Mean Squared Error) انحدار — التنبؤ برقم متوسط مربّع الفرق بين التنبؤ والحقيقة
Cross-Entropy تصنيف — فئات تعاقب التنبؤات الواثقة الخاطئة بقوة
Binary Cross-Entropy تصنيف ثنائي (نعم/لا) حالة خاصة لـ 2 فئات
Huber Loss انحدار مع outliers أقل حساسية للقيم الشاذة من MSE
مثال Cross-Entropy

تصنيف 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 — عقوبة شديدة. هذا يدفع النموذج ليكون واثقًا عندما يكون صحيحًا.

03 Gradient

الانحدار التدريجي (Gradient Descent)

تخيّل أنك على جبل ضبابي وتريد النزول لأدنى نقطة (أقل Loss). Gradient = اتجاه أشد صعود. للنزول: اذهب عكس Gradient.

w_new = w_old − learning_rate × 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 ذكي يعدّل حجم الخطوة تلقائيًا.

04 Backprop

الانتشار العكسي (Backpropagation)

السؤال: شبكة فيها ملايين الأوزان — كيف نعرف أي وزن نعدّله وبكم؟ Backpropagation (1986 — Rumelhart, Hinton) — الحل.

الفكرة: Chain Rule (قاعدة السلسلة) من حساب التفاضل. الخطأ يبدأ من طبقة المخرج و«ينتشر للخلف» — كل طبقة تحسب مساهمتها في الخطأ وتمرّر gradient للطبقة السابقة.

مثال مبسّط — 3 طبقات

Forward: x → طبقة1 → طبقة2 → y_pred = 0.8. الحقيقة y_true = 1.0. Loss = 0.04.

Backward:

  1. طبقة المخرج: «خطأي = 0.2 — gradient للطبقة 2 = ...»
  2. طبقة 2: «استلمت gradient — أوزاني w5, w6 مسؤولان جزئيًا — أعدّلهم»
  3. طبقة 1: «نفس الشيء — w1, w2, w3, w4»

كل وزن يحصل على gradient يخبره: «زِد قليلًا» أو «قلّل قليلًا». Update: w = w − lr × gradient.

← اتجاه Backprop (gradient يعود للخلف) Input Hidden Hidden Output Loss Forward: Input → ... → Output → Loss Backward: Loss → gradient لكل طبقة → تحديث الأوزان
Forward (يمين) و Backprop (يسار) — قلب تدريب DL
Vanishing / Exploding Gradient

في شبكات عميقة جدًا قديمة: gradient يصغر exponentially (vanishing) — الطبقات الأولى لا تتعلّم. أو يكبر (exploding) — NaN. الحلول: ReLU، Batch Normalization، Residual Connections (ResNet)، Gradient Clipping.

05 Optimizers

المحسّنات (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).

06 Hyperparams

المعاملات الفائقة — ما تختاره أنت

  • 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 للمخرج.
Grid Search: جرّب combinations من hyperparameters — بطيء لكن شامل.
Random Search: عشوائي — غالبًا أفضل من Grid في نفس الوقت.
07 Regularization

التنظيم — مكافحة 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 — إن أمكن.

مثال Dropout

طبقة 128 عصبون، Dropout=0.5. في كل batch تدريب: 64 عصبون «نائمة» عشوائيًا. في Inference: كل العصبونات تعمل لكن outputs × 0.5 (scaling). النتيجة: شبكة أكثر متانة — لا تعتمد على مسار واحد.

08 CNN

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: في النهاية — تصنيف نهائي.
صورة → Conv → Pool → Conv → Pool → FC → قطة Conv → Pool → Conv → Pool → Fully Connected → تصنيف
بنية CNN نموذجية لتصنيف الصور
مثال: تصنيف قطة/كلب

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).

09 RNN

RNN — الشبكات المتكررة (Recurrent Neural Networks)

MLP وCNN: مدخل ثابت الحجم. لكن النص والصوت تسلسل — كل كلمة تعتمد على السابقة. «الرياضيون الاجانب» vs «الاجانب الرياضيون» — الترتيب يُهمّ.

RNN لها «ذاكرة» — hidden state يُمرَّر من خطوة زمنية للتالية. LSTM وGRU — variants تحل مشكلة «forgetting» في تسلسلات طويلة.

LSTM — Long Short-Term Memory

بوابات (gates) تتحكم: ما أتذكّر، ما أنسى، ما أُخرج. ممتاز للنص، الصوت، السلاسل الزمنية. لكن بطيء — صعب موازاتته. لذلك Transformer (الجزء 3) تفوّق في معظم مهام NLP.

مثال: تحليل مشاعر

جملة: «الفيلم رائع جدًا!» — كلمة كلمة:

  1. «الفيلم» → hidden state h1
  2. «رائع» → h2 (h1 + «رائع» — positive signal)
  3. «جدًا» → h3 (تعزيز positive)
  4. «!» → h4 → Dense → Softmax → Positive 94%
RNN/LSTM: تسلسلات، time series، speech قديم — لا يزال مستخدمًا.
Transformer: NLP حديث، ترجمة، LLM — Attention بدل recurrence.
10 مشروع

مثال مشروع كامل — من البيانات للنموذج

مشروع: تصنيف أرقام MNIST — خطوة بخطوة (مفاهيمي — الكود في PyTorch/TensorFlow لاحقًا).

  1. البيانات: 60,000 صورة 28×28 رمادية، أرقام 0–9. Split: 50K train, 10K test.
  2. Preprocessing: normalize pixels إلى 0–1. (اختياري) augmentation: rotate ±10°.
  3. Architecture: Flatten 784 → Dense 128 ReLU → Dropout 0.2 → Dense 64 ReLU → Dense 10 Softmax.
  4. Loss: Cross-Entropy. Optimizer: Adam, lr=0.001.
  5. Training: batch=128, epochs=15, validation split 10%.
  6. Monitoring: train loss ↓, val loss ↓ — إذا val ↑ → Early Stop.
  7. Result: ~97–98% accuracy على test — ممتاز لـ MLP بسيط.
  8. Improvement: CNN بسيط → 99%+.
الخطوة التالية

في الجزء الثالث: Transformers، LLM، GANs، Transfer Learning، النشر، الأخلاقيات، ومسارك التعليمي.

FAQ أسئلة

أسئلة شائعة عن تدريب DL

هل أحتاج أن أفهم Backprop رياضيًا؟
للاستخدام: لا — PyTorch/TensorFlow تحسبها تلقائيًا (loss.backward()). للبحث والت debug: نعم — فهم Chain Rule وgradients يساعد كثيرًا.
Loss لا ينخفض — ماذا أفعل؟
تحقق: (1) lr كبير جدًا؟ جرّب 10× أصغر. (2) بيانات normalized؟ (3) architecture مناسبة؟ (4) bug في labels؟ (5) vanishing gradient — جرّب BatchNorm/ReLU.
CNN vs Fully Connected للصور؟
CNN دائمًا للصور — أ fewer parameters، translation invariant، hierarchical features. FC فقط للصور صغيرة جدًا (MNIST) أو بعد CNN layers.
كم epoch أحتاج؟
يعتمد. MNIST: 10–20. ImageNet: 90–300. استخدم Early Stopping — لا fixed number. راقب validation curve.