الشبكة العصبية = برنامج بيتعلم من الأمثلة بدل ما تكتب له القواعد. بدل ما تقوله "القطة ليها ودان مدببة وشنب"، تورّيه 10,000 صورة قطة ويطلّع القواعد لوحده.
1
الفكرة
مستوحاة من المخ: المخ فيه مليارات خلايا عصبية متوصّلة ببعض. كل خلية بتستقبل إشارات، تحسب، وتبعت إشارة للي بعدها. الشبكة العصبية بتقلّد ده بالأرقام.
الخلية في المخ
الخلية في الكمبيوتر
بتستقبل إشارات كيميائية
بتستقبل أرقام
بتجمّعهم وتقرر تطلّع إشارة ولا لأ
بتضربهم في أوزان وتجمع
إشارة كهربائية بتخرج
رقم بيخرج
مليارات ومعقّدة جدًا
بسيطة وقابلة للبرمجة
تشبيه 👶
طفل عمره سنتين بيتعلم كلمة "قطة" من غير ما حد يشرح له التعريف. شاف 50 قطة وسمع الكلمة 50 مرة، ودماغه عملت الربط لوحدها. الشبكة العصبية بتعمل نفس الحاجة — بس محتاجة 50 ألف بدل 50.
2
بتتعلم إزاي؟
ورّيها مثال صورة + الإجابة الصح: قطة
↓
خلّيها تخمّن قالت: كلب ❌
↓
احسب الغلط بُعد التخمين عن الصح
↓
عدّل الأوزان شوية عشان المرة الجاية تقرّب
↓
كرّر مليون مرة لحد ما تبقى شاطرة
تشبيه 🎯
زي طفل بيتعلم يرمي الكورة في السلة: بيرمي، تطلع يمين، يعدّل شوية شمال، يرمي تاني… بعد 1000 رمية بيجيب. محدش شرح له الفيزياء — اتعلم من الغلط.
الفرق عن البرمجة العادية: في البرمجة العادية إنت بتكتب القواعد والكمبيوتر بيطبّقها على البيانات. في الشبكات العصبية إنت بتدّي البيانات والإجابات والكمبيوتر بيطلّع القواعد. عشان كده بتنفع في الحاجات اللي مش عارف تكتب لها قواعد: الصور، الكلام، الترجمة.
?
طيب الشبكة شكلها إيه من جوه؟ الطبقات
3/25→
?
الطبقات Layers 3 أنواع — ويعني إيه "Deep"
1
الهيكل العام
طبقة الإدخالالطبقة المخفيةطبقة الإخراج
Inputالمدخلات: البيانات زي ما هي (قيم البكسلات، السعر، العمر…). مفيش حسابات هنا
Hiddenالمخفية: هنا بيحصل "الفهم" — بتكتشف أنماط (حواف، أشكال، معاني). ممكن تكون طبقة أو 100
Outputالمخرجات: الإجابة النهائية (قطة/كلب، أو رقم زي السعر)
2
يعني إيه Deep Learning؟
شبكة فيها طبقات مخفية كتير (عميقة). كل طبقة بتبني على اللي قبلها:
الطبقة 1 خطوط وحواف
↓
الطبقة 2 زوايا ودواير
↓
الطبقة 3 عين · ودن · أنف
↓
الطبقة 4 "قطة"
تشبيه 🧱
زي ما بتبني كلمة من حروف، وجملة من كلمات، وفكرة من جمل. كل مستوى بيفهم حاجة أكبر من اللي قبله.
3
مثال: شبكة تقرأ الأرقام المكتوبة
الطبقة
عدد الخلايا
ليه
Input
784
صورة 28×28 بكسل = 784 رقم
Hidden 1
128
بتتعلم أشكال الخطوط
Hidden 2
64
بتجمّع الأشكال
Output
10
رقم من 0 لـ 9 — احتمال لكل واحد
كام وزن؟784×128 + 128×64 + 64×10 ≈ 109,000رقم الشبكة بتتعلمهم. وده موديل صغير جدًا — GPT-4 فيه تريليون.
?
طيب الدايرة الواحدة دي بتحسب إيه بالظبط؟
4/25→
?
الخلية الواحدة Perceptron أصغر وحدة — وكل الشبكة مبنية منها
الخلية بتعمل حاجتين بس: ① تضرب كل مدخل في وزن وتجمع ② تمرّر الناتج على دالة تفعيل تقرر الإشارة تخرج ولا لأ.
1
الرسمة
x₁ = 2 w₁=0.5 →x₂ = 3 w₂=1 →x₃ = 1 w₃=−2 →
Σ
→
f
→
y
وتحت الـ Σ في bias (انحياز) b = 1 بيتضاف للمجموع
xالمدخلات: الأرقام الداخلة
wالأوزان: أهمية كل مدخل — دي اللي الشبكة بتتعلمها
bالانحياز: رقم بيتضاف عشان يزحزح النتيجة
fدالة التفعيل: بتقرر الخرج النهائي
2
نحسبها بأرقام
z = w₁x₁ + w₂x₂ + w₃x₃ + b
المجموع الموزون = كل مدخل × وزنه، مجموعين، + الانحياز
z = (0.5×2) + (1×3) + (−2×1) + 1
z = 1 + 3 − 2 + 1 = 3
دالة التفعيل (أبسط واحدة — Step): لو z > 0 اطلّع 1، غير كده 0.
z = 3 > 0 → y = 1 ✓
تشبيه ⚖️
لجنة من 3 أعضاء بيصوّتوا على قرار. كل عضو ليه وزن (رئيس اللجنة صوته بـ 2، عضو عادي بـ 1، وواحد معارض دايمًا بـ −2). تجمع الأصوات الموزونة، ولو عدّت حد معيّن (الانحياز بيحدد الحد) القرار يتاخد.
ليه محتاجين Bias؟ من غيره الخلية مجبورة تطلّع 0 لما كل المدخلات 0. الـ bias بيديها حرية "تميل" لناحية حتى من غير مدخلات — زي ما الترمومتر بيبدأ من 36.5 مش من صفر. الأوزان والانحياز = الحاجة الوحيدة اللي بتتعلّم. كل التدريب هدفه يلاقي أحسن أرقام ليهم.
?
دالة التفعيل دي… ليه مش بنطلّع z زي ما هو؟
5/25→
?
دوال التفعيل Activation ليه موجودة، وأشهر 4 أنواع
لو كل خلية طلّعت المجموع زي ما هو، الشبكة كلها هتبقى معادلة خط مستقيم مهما كان فيها طبقات — ومش هتعرف تتعلم أي حاجة منحنية أو معقّدة. دالة التفعيل بتضيف "الانحناء".
1
Sigmoid — بتعصر الرقم بين 0 و 1
σ(z) = 1 / (1 + e⁻ᶻ)
Sigmoid: من 0 لـ 1
أي رقم تدخّله بيطلع بين 0 و 1. مناسبة لما الخرج "احتمال": 0.9 = 90% قطة.
⚠️ المشكلة: لما z كبير جدًا أو صغير جدًا المنحنى بيبقى مسطّح → الشبكة بتبطّل تتعلم (Vanishing Gradient).
2
ReLU — الأشهر والأبسط
ReLU(z) = max(0, z)
ReLU: سالب → 0، موجب → زي ما هو
لو سالب اطلّع 0، لو موجب اطلّع نفس الرقم. بسيطة وسريعة ومفيش مشكلة التسطيح.
✅ الاختيار الافتراضي للطبقات المخفية في 90% من الشبكات.
تشبيه 🚰
حنفية: لو الضغط سالب (مفيش) مش بتطلّع حاجة، لو موجب بتطلّع بنفس القوة. مفيش "عصر".
3
Tanh و Leaky ReLU
الدالة
المدى
الفكرة
تستخدم في
Tanh
−1 لـ 1
زي Sigmoid بس متمركزة حول الصفر
RNNs القديمة
Leaky ReLU
−∞ لـ ∞
زي ReLU بس السالب بيطلع صغير (0.01z) بدل صفر
لما ReLU "تموت"
ReLU بتموت يعني إيه؟ لو خلية طلّعت سالب دايمًا، خرجها صفر دايمًا، ومش هتتعلم تاني. Leaky بتسيب "تسريب" صغير عشان تفضل حية.
4
Softmax — للاختيار بين كذا فئة
في طبقة الإخراج لما عندك أكتر من فئة (قطة/كلب/عصفور). بتحوّل أي أرقام لاحتمالات مجموعها 1:
الفئة
z
بعد Softmax
قطة
3.0
0.70
كلب
1.5
0.20
عصفور
0.8
0.10
المجموع = 1.00 — فتقدر تقول "70% قطة"
القاعدة: طبقات مخفية → ReLU. إخراج "نعم/لأ" → Sigmoid. إخراج "أنهي واحد من كذا" → Softmax. إخراج رقم (سعر) → مفيش تفعيل.
?
طيب لما أحط خلايا كتير في طبقات… البيانات بتمشي إزاي؟
6/25→
?
الانتشار الأمامي Forward Propagation رحلة الرقم من المدخل للمخرج
نفس حسبة الخلية الواحدة، بس مكرّرة: خرج كل طبقة = دخل اللي بعدها. من أول طبقة لآخر طبقة في اتجاه واحد.
1
الرسمة
x الدخلمخفية (ReLU)الخرج
1 خد المدخلات x.
2 لكل خلية في الطبقة المخفية: احسب z = مجموع (وزن × دخل) + b، ثم a = ReLU(z).
3 خرج المخفية (a) بيبقى دخل طبقة الخرج.
4 طبقة الخرج تحسب نفس الحاجة وتطلّع ŷ (التخمين).
2
مثال بأرقام — خلية مخفية واحدة
المدخلات: x = [1, 0.5] الأوزان: w = [0.2, 0.8], b = 0.1
z = (0.2×1) + (0.8×0.5) + 0.1
z = 0.2 + 0.4 + 0.1 = 0.7
a = ReLU(0.7) = 0.7
الـ 0.7 ده بيروح كمدخل للطبقة اللي بعدها، وهكذا
تشبيه 🏭
خط إنتاج: كل محطة بتاخد اللي جاي من اللي قبلها، تعمل عليه شغلها، وتمرّره. المواد الخام (x) بتدخل من أول الخط، والمنتج (ŷ) بيطلع من آخره.
3
الصيغة العامة (عشان تفهمها لما تشوفها)
z⁽ˡ⁾ = W⁽ˡ⁾ · a⁽ˡ⁻¹⁾ + b⁽ˡ⁾
a⁽ˡ⁾ = f(z⁽ˡ⁾)
l = رقم الطبقة · W = مصفوفة الأوزان · a = خرج الطبقة اللي قبلها · f = دالة التفعيل
الشكل مخيف بس هو نفس الحسبة اللي عملناها فوق، مكتوبة لكل الخلايا مرة واحدة. W جدول فيه أوزان كل الخلايا، والنقطة "·" يعني اضرب واجمع.
a⁽⁰⁾ = x يعني "خرج الطبقة صفر" هو المدخلات نفسها. وŷ (y بقبعة) = تخمين الشبكة، وy من غير قبعة = الإجابة الصح.
?
الشبكة خمّنت… طيب نعرف إزاي التخمين غلط قد إيه؟
7/25→
?
دالة الخسارة Loss Function رقم واحد بيقول: التخمين بعيد عن الصح قد إيه
عشان الشبكة تتحسّن لازم تعرف غلطت قد إيه. الـ Loss = رقم: صفر يعني مظبوط، وكل ما يكبر يعني أسوأ. والتدريب كله = تصغير الرقم ده.
1
MSE — للأرقام (Regression)
لما الخرج رقم (سعر، درجة حرارة). بتاخد الفرق، تربّعه (عشان السالب يبقى موجب والغلط الكبير يتعاقب أكتر)، وتاخد المتوسط.
عندنا رقم الغلط (Loss) وعايزين نصغّره. الطريقة: نشوف لو زوّدنا الوزن شوية الغلط هيزيد ولا هيقل، ونمشي في الاتجاه اللي بيقلّله. خطوة صغيرة، ونكرّر.
1
التشبيه الأهم في الكتاب
أقل غلطالغلط (Loss) حسب قيمة الوزن
تشبيه ⛰️
إنت واقف على جبل في ضباب كثيف، عايز تنزل لأقل نقطة. مش شايف الوادي، بس بتحس بـميل الأرض تحت رجلك. بتاخد خطوة في اتجاه النزول، تحس تاني، خطوة تانية… لحد ما الأرض تبقى مستوية = وصلت. الميل = Gradient. الخطوة = Learning Rate.
2
المعادلة
wجديد = wقديم − η × (الميل)
η (إيتا) = حجم الخطوة · الميل = ∂L/∂w = الغلط بيتغيّر قد إيه لو غيّرت w
مثال بأرقام: الوزن w = 2، الميل = 0.5 (يعني لو زوّدت w الغلط يزيد)، η = 0.1:
w = 2 − 0.1 × 0.5 = 1.95
قلّلنا w شوية لأن الميل موجب. لو الميل كان سالب كنا هنزوّده.
ليه ناقص؟ الميل بيشاور على اتجاه الصعود. إحنا عايزين ننزل، فبنمشي عكسه.
3
الدورة الكاملة للتدريب
Forward خمّن ŷ
→
Loss احسب الغلط
→
Backward احسب الميل لكل وزن
→
Update عدّل الأوزان
→
كرّر آلاف المرات
كل دورة من دول اسمها خطوة تدريب. الخطوة التالتة (حساب الميل لكل وزن) هي الـ Backpropagation — الصفحة الجاية.
?
بس الشبكة فيها مليون وزن… نحسب الميل لكل واحد إزاي؟
9/25→
?
الانتشار الخلفي Backpropagation توزيع اللوم على الأوزان — من الآخر للأول
الغلط ظهر في طبقة الخرج. بس مين السبب؟ الأوزان في كل الطبقات ساهمت. الـ Backprop بيرجع بالعكس من الخرج للدخل، وبيحسب لكل وزن: "إنت مسؤول عن الغلط قد إيه؟"
1
الفكرة
Input
→
Hidden 1
→
Hidden 2
→
Output
→
Loss
↑ Forward: الأرقام بتمشي لقدام
Hidden 1 ميل
←
Hidden 2 ميل
←
Output ميل
←
Loss
↑ Backward: الميل بيرجع لورا، طبقة طبقة
تشبيه 🏭
خط إنتاج طلّع منتج معيوب. المدير بيبدأ من آخر محطة: "إنت غلطت قد إيه؟" وبعدين يسأل اللي قبلها "وإنت ساهمت قد إيه في غلطته؟" وهكذا لحد أول محطة. كل محطة بتاخد نصيبها من اللوم حسب تأثيرها.
2
الأداة: قاعدة السلسلة (Chain Rule)
لو الغلط بيعتمد على الخرج، والخرج بيعتمد على z، وz بيعتمد على الوزن — فتأثير الوزن على الغلط = ضرب التأثيرات دي كلها:
∂L/∂w = ∂L/∂ŷ × ∂ŷ/∂z × ∂z/∂w
"L بيتغيّر مع w" = "L مع ŷ" × "ŷ مع z" × "z مع w"
تشبيه 🔗
سلسلة تروس: لو لفّيت الترس الأول، التاني بيلف ضعفين، والتالت 3 أضعاف التاني. فالأول بيأثر على التالت بـ 2×3 = 6 أضعاف. الـ Chain Rule = ضرب النسب.
🔵 كبير جدًا: بيتنطط🟢 صغير جدًا: بطيء🔴 منحنى التعلم الصح
η
اللي بيحصل
كبير جدًا
بيتنطط فوق الوادي ومش بينزل — أو بينفجر
صغير جدًا
بينزل بس هياخد أيام
مناسب (0.001–0.01)
بينزل بسلاسة
تشبيه
نازل الجبل بخطوات 10 متر؟ هتعدّي الوادي وتطلع الناحية التانية. بخطوات 1 سم؟ هتوصل السنة الجاية.
2
Batch · Epoch · Iteration
Epoch مرور كامل على كل بيانات التدريب مرة واحدة
Batch عدد الأمثلة اللي بنحسب الميل عليهم قبل ما نعدّل الأوزان (32، 64…)
Iteration تعديل واحد للأوزان (= batch واحد)
10,000 مثال · batch = 100 → 100 iteration في الـ epoch الواحد → 5 epochs = 500 تعديل للأوزان
النوع
كام مثال في الدفعة
الميزة
Batch GD
الكل مرة واحدة
مستقر بس بطيء وبياكل ذاكرة
SGD
مثال واحد
سريع بس متنطط
Mini-batch
32–256
الأحسن — بيتستخدم دايمًا
تشبيه 📚
بتذاكر كتاب 100 صفحة. Epoch = خلّصت الكتاب مرة. Batch = بتراجع كل 10 صفحات. Iteration = مراجعة واحدة.
Learning Rate Decay: في الأول خطوات كبيرة (عشان توصل بسرعة)، وكل ما تقرّب من الوادي خلّي الخطوات أصغر (عشان متعدّيهوش). زي ما بتبطّأ العربية وإنت بتقرّب من الجراج.
الخطوة العادية (SGD) بتمشي في اتجاه الميل الحالي بس. المحسّنات الذكية بتستخدم ذاكرة من الخطوات اللي فاتت عشان تمشي أسرع وأثبت.
1
Momentum — الزخم
بدل ما كل خطوة مستقلة، بنحتفظ بـ"سرعة" من الخطوات اللي فاتت. لو الاتجاه ثابت، السرعة بتزيد. لو بيتذبذب، الذبذبة بتتلغي.
v = β·vقديم + الميل
w = w − η·v
β ≈ 0.9 — قد إيه نفتكر الاتجاه القديم
تشبيه 🎳
كورة بتتدحرج على الجبل: مش بتقف وتفكّر عند كل نقطة، بتاخد زخم. بتعدّي الحفر الصغيرة (الحدود المحلية) وبتوصل للوادي الكبير أسرع.
2
Adam — الأشهر على الإطلاق
بيجمع فكرتين: Momentum (ذاكرة الاتجاه) + RMSProp (خطوة مختلفة لكل وزن: الأوزان اللي ميلها كبير تاخد خطوة أصغر والعكس).
المحسّن
الفكرة
استخدمه لما
SGD
خطوة عادية
عايز تفهم الأساس
SGD+Momentum
+ زخم
رؤية حاسوبية كلاسيكية
RMSProp
خطوة لكل وزن
RNNs
Adam
الاتنين مع بعض
الافتراضي لكل حاجة
AdamW
Adam + تنظيم أحسن
Transformers والموديلات الكبيرة
القيم الافتراضية لـ Adam:η = 0.001 · β₁ = 0.9 · β₂ = 0.999. في 95% من الحالات متغيّرهمش.
3
في الكود (PyTorch)
train.py
1import torch
2 optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
3 4for epoch in range(10):
5for x, y in loader: # كل batch 6 y_hat = model(x) # Forward 7 loss = loss_fn(y_hat, y) # الغلط 8 optimizer.zero_grad() # صفّر الميل القديم 9 loss.backward() # Backward (Autograd)10 optimizer.step() # عدّل الأوزان
دي الـ 5 سطور اللي بتتكرّر في كل مشروع Deep Learning في العالم. افهمهم كويس.
?
طيب أعرف إزاي إن الشبكة بتتعلم فعلًا مش بتحفظ؟
12/25→
?
تقسيم البيانات وخطوات التدريب Train · Validation · Test — وليه 3 مش 1
لو امتحنت الطالب بنفس الأسئلة اللي ذاكرها، هيجيب 100% حتى لو حفظ من غير فهم. عشان كده بنقسّم البيانات.
1
الأقسام التلاتة
القسم
النسبة
بيتستخدم في
Training
~70%
الشبكة بتتعلم منه (بتعدّل الأوزان)
Validation
~15%
نراقب الأداء أثناء التدريب ونضبط الإعدادات
Test
~15%
الامتحان النهائي — مرة واحدة بس في الآخر
تشبيه 🎓
Training = الكتاب اللي بتذاكر منه. Validation = امتحانات تجريبية بتعملها وإنت بتذاكر عشان تعرف فين ضعفك. Test = امتحان آخر السنة: أسئلة عمرك ما شفتها.
⚠️ أخطر غلطة: تضبط الإعدادات بناءً على الـ Test. كده "شفت الامتحان" والنتيجة مش حقيقية. الـ Test يتفتح مرة واحدة في الآخر.
2
خطوات أي مشروع
1. حمّل البيانات وقسّمها Train / Val / Test
↓
2. ابني الموديل الطبقات + التفعيل
↓
3. اختار Loss + Optimizer MSE/CE + Adam
↓
4. درّب Forward → Loss → Backward → Update
↓
5. راقب على Validation كل epoch
↓
6. امتحن على Test مرة واحدة
3
إزاي تقرأ منحنى التدريب
Loss حسب الـ Epoch
الأحمر (Training) بينزل على طول — الشبكة بتحفظ أكتر وأكتر. الأزرق (Validation) بينزل وبعدين يرجع يطلع — الشبكة بدأت تحفظ بدل ما تفهم.
النقطة الخضرا = أحسن لحظة. بعدها الشبكة بتبقى أسوأ على البيانات الجديدة رغم إنها أحسن على القديمة. ده اسمه Overfitting — القسم الجاي كله عنه.
?
الشبكة حفظت بدل ما تفهم… يعني إيه Overfitting ونعالجه إزاي؟
13/25→
?
الحفظ مقابل الفهم Overfitting وعكسه Underfitting — والتوازن بينهم
1
3 حالات
الحالة
على Training
على بيانات جديدة
السبب
Underfitting
سيء
سيء
الشبكة بسيطة جدًا — مش قادرة تتعلم
✅ مظبوط
كويس
كويس
توازن
Overfitting
ممتاز
سيء
الشبكة معقّدة جدًا — حفظت الأمثلة بالتفاصيل والضوضاء
تشبيه 🎓
Underfitting = طالب ما ذاكرش كفاية، بيسقط في كل حاجة. Overfitting = طالب حفظ إجابات الامتحانات القديمة كلمة كلمة — لو جاله سؤال بصياغة مختلفة يقع. المظبوط = فهم الفكرة وبيحل أي سؤال.
2
Bias–Variance — نفس الفكرة بأسماء رسمية
High Bias الشبكة "متحيّزة" لفكرة بسيطة غلط → Underfitting
High Variance الشبكة "بتتقلّب" مع أي تغيير صغير في البيانات → Overfitting
الغلط على بيانات جديدة حسب تعقيد الشبكة
القاعدة: شبكة أكبر مش دايمًا أحسن. كل ما تكبّرها، بتقدر تحفظ أكتر. الهدف إنك توصل للنقطة الخضرا.
3
إزاي تعرف إنك في Overfitting؟
Loss الـ Training بينزل، بس Loss الـ Validation بيطلع
الدقة على Training 99% وعلى Validation 70%
الفرق بين الاتنين بيكبر كل epoch
الحلول (الصفحتين الجايين): بيانات أكتر · Regularization · Dropout · Early Stopping · Data Augmentation · شبكة أصغر
?
الحلول: إزاي نمنع الشبكة تحفظ؟
14/25→
?
علاج الحفظ ① Regularization و Dropout خلّي الشبكة "أبسط" غصب عنها
1
L1 / L2 — عاقب الأوزان الكبيرة
الشبكة بتحفظ لما بعض الأوزان تبقى ضخمة (بتعتمد على تفصيلة واحدة بشدة). الحل: ضيف للـ Loss عقوبة على حجم الأوزان، فالشبكة تفضّل أوزان صغيرة ومتوزّعة.
Loss = الغلط + λ × (مجموع حجم الأوزان)
λ (لامدا) = قد إيه العقوبة شديدة
L1
L2 (Weight Decay)
العقوبة
|w|
w²
التأثير
بيصفّر أوزان كتير (بيختار الأهم)
بيصغّر الكل من غير تصفير
استخدمه لما
عايز تعرف أنهي مدخلات مهمة
الحالة العامة ⭐
تشبيه 💰
ميزانية محدودة للأوزان: لو وزن واحد خد كل الفلوس، الباقي هيتخانق. العقوبة بتجبر الشبكة توزّع الميزانية بالعدل.
2
Dropout — اقفل خلايا عشوائي
أثناء التدريب، في كل خطوة بنقفل نسبة عشوائية من الخلايا (مثلًا 50%). كده مفيش خلية تقدر تعتمد على خلية معيّنة تانية — كل واحدة لازم تبقى مفيدة لوحدها.
نصف الخلايا مقفولة في الخطوة دي — الخطوة الجاية هيتقفل غيرهم
تشبيه 🏀
فريق كورة بيتدرّب وكل مرة المدرب بيشيل نص اللاعيبة عشوائي. النتيجة: مفيش لاعب بيعتمد على زميل معيّن، والكل بيبقى شاطر. يوم الماتش (الاختبار) الفريق كله بيلعب.
مهم:Dropout في التدريب بس. وقت الاختبار كل الخلايا شغّالة. القيم الشائعة: 0.2–0.5.
علاج الحفظ ② Early Stopping و Augmentation وقّف في الوقت الصح، وكتّر الأمثلة
1
Early Stopping — وقّف قبل ما تحفظ
راقب Loss الـ Validation كل epoch. لما يبطّل ينزل (أو يبدأ يطلع) لمدة k epochs — وقّف، وارجع لأحسن نسخة.
درّب epoch
↓
قيس على Validation
↓
اتحسّن؟ أيوه → احفظ النسخة وكمّل
↓
ما اتحسّنش 5 مرات ورا بعض؟ وقّف وارجع لأحسن نسخة ✓
Patience = كام epoch تستنّى قبل ما توقّف. قيمة شائعة: 5–10. من غير patience ممكن توقّف على تذبذبة عابرة.
تشبيه 🍞
الخبز في الفرن: كل ما تسيبه أكتر بيتحمّر، بس بعد نقطة معيّنة بيتحرق. بتبص عليه كل دقيقة وتطلّعه في أحسن لحظة.
2
Data Augmentation — كتّر الأمثلة
أكبر سبب للحفظ: أمثلة قليلة. لو مش هتقدر تجيب بيانات أكتر، اعمل نسخ معدّلة من الموجود:
النوع
التعديلات
صور
اقلب، لفّ، قصّ، غيّر الإضاءة، زوّم
نص
استبدل بمرادفات، ترجم وارجع ترجم
صوت
ضيف ضوضاء، غيّر السرعة أو الطبقة
🐱 الأصل←🐱 مقلوبة🐱 مائلة🐱 أغمق🐱 مقصوصة
صورة واحدة بقت 5 — وكلهم لسه "قطة"
⚠️ التعديل لازم يحافظ على المعنى. لو قلبت صورة "6" رأسًا على عقب بقت "9"! وطبّقه على Training بس، مش على Validation/Test.
3
ملخص أدوات مكافحة الحفظ
الأداة
الفكرة في كلمة
متى
بيانات أكتر
أحسن حل دايمًا
لو تقدر
Augmentation
كتّر من الموجود
صور/صوت/نص
Dropout
اقفل خلايا عشوائي
شبكات كبيرة
L2 / Weight Decay
أوزان صغيرة
الحالة العامة
Early Stopping
وقّف في الوقت الصح
دايمًا
شبكة أصغر
قلّل القدرة على الحفظ
لو البيانات قليلة
?
الشبكة بتتعلم بطيء أو بتنفجر… مشكلة في الأرقام نفسها
16/25→
?
الأرقام الصح من البداية التهيئة (Initialization) و Batch Normalization
قبل التدريب الأوزان بتبدأ بأرقام عشوائية. لو كبيرة جدًا الأرقام بتنفجر، لو صغيرة جدًا بتتلاشى. وأثناء التدريب الأرقام جوه الشبكة ممكن تتبعتر. الصفحة دي عن ضبط ده.
1
Weight Initialization
ليه مش نبدأ بأصفار؟ لأن كل الخلايا هتبقى متطابقة وتتعلم نفس الحاجة. لازم عشوائية — بس بحجم مناسب:
الطريقة
الفكرة
مع
Xavier / Glorot
التباين = 2 / (n_in + n_out)
Sigmoid · Tanh
He
التباين = 2 / n_in
ReLU وعائلتها ⭐
تشبيه 🔊
ضبط صوت 10 سماعات متوصّلين ورا بعض: لو كل واحدة بتكبّر الصوت ×2 هيطلع صرّاخ (انفجار). لو كل واحدة بتصغّره نص هيختفي (تلاشي). التهيئة الصح بتخلّي كل واحدة تمرّر الصوت بنفس القوة.
PyTorch بيعمل تهيئة معقولة تلقائي. بس لو الشبكة عميقة وبتدرّب غريب، جرّب nn.init.kaiming_normal_ (= He).
2
Batch Normalization
بعد كل طبقة، بنعيد ضبط الأرقام الخارجة: نخلّي متوسطها 0 وانتشارها 1 (لكل دفعة). كده الطبقة اللي بعدها دايمًا بتستقبل أرقام "متوسطة" ومش بتتفاجئ.
x̂ = (x − μ) / √(σ² + ε)
y = γ·x̂ + β
μ = المتوسط · σ = الانحراف · γ, β = رقمين الشبكة بتتعلمهم
تدريب أسرع وأثبت
تقدر تستخدم learning rate أعلى
بيقلّل الحفظ شوية (regularization خفيف)
تشبيه 📊
مدرّس بيوزّع الدرجات على منحنى بعد كل امتحان: مهما كان الامتحان صعب أو سهل، التوزيع دايمًا نفسه. الطبقة الجاية بتشتغل على أرقام مألوفة.
3
Batch Norm vs Layer Norm
Batch Norm
Layer Norm
بيطبّع على
الدفعة (كل الأمثلة، لكل ميزة)
المثال الواحد (كل ميزاته)
بيعتمد على حجم الدفعة
أيوه — سيء مع دفعات صغيرة
لأ
بيتستخدم في
CNNs (الصور)
RNNs · Transformers
القاعدة: صور → Batch Norm. نصوص و Transformers → Layer Norm (ChatGPT كله Layer Norm).
?
طيب دلوقتي نشوف الشبكات المتخصّصة… الصور أول حاجة
17/25→
?
شبكات الصور CNN Convolution · Filters · Pooling — إزاي الكمبيوتر "بيشوف"
الصورة = جدول أرقام (كل خانة = لون بكسل). الـ CNN بتمرّر فلتر صغير على الصورة كلها بيدوّر على نمط معيّن (حافة، زاوية، دايرة). الفلاتر دي هي اللي الشبكة بتتعلمها.
حط الفلتر على أول 3×3 من الصورة، اضرب كل خانة في اللي تحتها، اجمع. زحزح خانة وكرّر.
2
الفلتر بيدوّر على إيه؟
-1
-1
-1
0
0
0
1
1
1
حافة أفقية
-1
0
1
-1
0
1
-1
0
1
حافة رأسية
0
-1
0
-1
5
-1
0
-1
0
توضيح
الفلتر بيطلّع رقم كبير لما يلاقي النمط اللي بيدوّر عليه. الشبكة بتتعلم عشرات الفلاتر في كل طبقة: الأولى حواف، التانية أشكال، التالتة عيون وودان…
تشبيه 🔍
عدسة مكبّرة بتمشّيها على الصورة كلها وبتسأل في كل مكان: "فيه خط رأسي هنا؟" النتيجة خريطة بتقول فين الخطوط الرأسية. وعدسة تانية للخطوط الأفقية، وهكذا.
3
Pooling — صغّر الخريطة
1
3
2
1
5
6
1
2
3
2
1
0
1
2
3
4
→
6
2
3
4
Max Pooling 2×2: من كل مربع 2×2 خد الأكبر. الصورة بقت ربع حجمها.
ليه؟ حسابات أقل، والشبكة بتبقى مش مهتمة بالمكان بالظبط (القطة في الشمال أو اليمين = قطة).
4
شكل CNN كاملة
صورة 28×28
→
Conv + ReLU 32 فلتر
→
Pool 14×14
→
Conv + ReLU 64 فلتر
→
Pool 7×7
→
Flatten فرد لصف
→
Dense Softmax: 10 أرقام
المصطلح
يعني
Stride
الفلتر يزحزح كام خانة كل مرة
Padding
أصفار حوالين الصورة عشان الحجم ميصغرش
Feature Map
خرج الفلتر — خريطة بتقول النمط فين
أشهر المعماريات:LeNet (الأولى) · AlexNet (2012، بداية الثورة) · VGG · ResNet (skip connections — الأهم) · MobileNet (للموبايل)
?
والنصوص والصوت اللي ليهم ترتيب؟ شبكات تانية خالص
18/25→
?
شبكات التسلسل RNN و LSTM لما الترتيب يفرق: نص، صوت، أسعار
في الجملة "القطة أكلت الفار"، الكلمة اللي جاية بتعتمد على اللي قبلها. الشبكة العادية بتشوف كل مدخل لوحده. الـ RNN عندها ذاكرة بتشيل اللي فات.
1
RNN — خلية بتفتكر
x₁ القطة
→
RNN h₁
→
RNN h₂
→
RNN h₃
→
y التوقع
x₂ = أكلت · x₃ = الفار — نفس الخلية بتتكرّر، وبتمرّر ذاكرتها h للي بعدها
hₜ = tanh(Wₕ·hₜ₋₁ + Wₓ·xₜ + b)
الذاكرة الجديدة = دالة (الذاكرة القديمة + المدخل الحالي)
المشكلة: الذاكرة قصيرة. في جملة طويلة، أول كلمة بتتنسي قبل ما نوصل للآخر (Vanishing Gradient عبر الزمن).
تشبيه 📖
بتقرأ رواية وبتحتفظ بملخص في دماغك. كل صفحة بتحدّث الملخص. بس لو الرواية 1000 صفحة، تفاصيل الفصل الأول بتتنسي.
2
LSTM — ذاكرة ببوابات
نفس الفكرة بس الخلية عندها 3 بوابات بتتحكم في الذاكرة:
البوابة
بتقرر
Forget
أمسح إيه من الذاكرة القديمة؟
Input
أضيف إيه من المدخل الجديد؟
Output
أطلّع إيه دلوقتي؟
Cₜ = fₜ·Cₜ₋₁ + iₜ·C̃ₜ
الذاكرة الجديدة = (انسى جزء من القديمة) + (ضيف جزء من الجديدة)
تشبيه 📝
نوتة ملاحظات بـ 3 قواعد: إيه اللي أشطبه (Forget)، إيه اللي أكتبه (Input)، إيه اللي أقراه بصوت عالي دلوقتي (Output). كده المعلومة المهمة من الفصل الأول تفضل مكتوبة لحد الآخر.
GRU = نسخة أبسط من LSTM ببوابتين بس. أسرع وبتدّي نتايج قريبة. جرّب GRU الأول.
RNN
LSTM / GRU
Transformer (الصفحة الجاية)
الذاكرة
قصيرة
طويلة
كل الجملة مرة واحدة
السرعة
بطيء (كلمة كلمة)
بطيء
سريع (بالتوازي)
بيتستخدم دلوقتي
نادرًا
أحيانًا (سلاسل زمنية)
في كل حاجة
?
بس ChatGPT مش RNN… يعني إيه Attention و Transformer؟
19/25→
?
الانتباه Attention و Transformers المعمارية اللي ورا ChatGPT وكل الذكاء الاصطناعي الحديث
بدل ما نقرأ الجملة كلمة كلمة ونحتفظ بملخص، نخلّي كل كلمة تبص على كل الكلمات التانية وتقرر مين فيهم مهم ليها. ده الـ Attention. ومن غير RNN خالص.
1
الفكرة بمثال
جملة: "القطة ما عبرتش الشارع لأنها كانت تعبانة". كلمة "ها" بتشاور على مين؟
القطة 0.85
ما 0.01
عبرتش 0.02
الشارع 0.08
لأنها 0.04
الشبكة "انتبهت" لـ"القطة" بنسبة 85% — فهمت إن "ها" = القطة مش الشارع
تشبيه 👀
وإنت بتقرأ جملة، عينك مش بتدّي كل الكلمات نفس الأهمية. لما تشوف "ها" بترجع بصرًا للاسم اللي قبلها. الـ Attention بيعمل ده بالأرقام: لكل كلمة، وزن لكل كلمة تانية.
2
الحسبة: Q · K · V
Attention(Q,K,V) = softmax(Q·Kᵀ / √d) · V
Q (Query) "أنا بدوّر على إيه؟" — سؤال الكلمة الحالية
K (Key) "أنا عندي إيه؟" — عنوان كل كلمة
V (Value) "المحتوى الفعلي" — اللي هيتاخد من الكلمة
① قارن Q بكل K (ضرب) → درجات تشابه
② اقسم على √d عشان الأرقام متكبرش
③ Softmax → أوزان مجموعها 1
④ اجمع الـ V بالأوزان دي → الخرج
تشبيه 🔎
بحث في مكتبة: سؤالك (Q) بيتقارن بعناوين الكتب (K). الكتب الأقرب تاخد وزن أعلى. وتقرأ محتوى (V) الكتب دي بنسبة أهميتها.
?
طيب الـ Transformer بيستخدم الـ Attention إزاي؟
20/25→
?
الـ Transformer المعمارية الكاملة — وليه غيّرت كل حاجة
Transformer = Attention مكرّر كذا مرة + شوية حاجات حواليه. اتنشر 2017 في ورقة اسمها "Attention Is All You Need" — ومن وقتها كل موديلات اللغة والصور والصوت الكبيرة مبنية عليه.
1
الـ Transformer — Attention مكرّر
الكلمات + ترميز الموقع
→
Multi-Head Attention 8 "عيون" كل واحدة بتبص على علاقة مختلفة
→
Add & Norm
→
Feed Forward شبكة عادية
→
Add & Norm
→
N × كرّر 12–96 مرة
Positional EncodingAttention مش بيعرف الترتيب، فبنضيف لكل كلمة "رقم مكانها"
Multi-Head كذا Attention بالتوازي: واحد يبص على القواعد، واحد على المعنى، واحد على الضمائر…
ليه غيّر كل حاجة؟ ① بيشوف الجملة كلها مرة واحدة (بالتوازي → سريع جدًا على GPU) ② مفيش نسيان مهما طالت ③ نفس الفكرة اشتغلت على الصور (ViT) والصوت والفيديو. GPT · BERT · Stable Diffusion · Whisper كلهم Transformers.
?
معماريات تانية مهمة: الضغط والتوليد والقفز
21/25→
?
معماريات مهمة تانية Autoencoder · GAN · ResNet · Encoder-Decoder
1
Autoencoder — اضغط وفكّ
x صورة 784 رقم
→
Encoder يضغط
→
z 32 رقم
→
Decoder يفكّ
→
x' نفس الصورة
الشبكة بتتعلم تضغط المدخل لعدد أرقام صغير (z) وترجّعه تاني. المفيد مش الخرج — المفيد z: ملخص مضغوط للصورة.
تقليل الأبعاد وإزالة الضوضاء
كشف الشاذ: لو ما عرفتش ترجّعه = غريب
VAE: نسخة بتولّد صور جديدة
تشبيه 📦
تلخّص فيلم في 3 سطور، وحد تاني يحكي الفيلم من الـ 3 سطور. لو الحكاية طلعت قريبة، التلخيص كان كويس.
2
GAN — المزوّر والشرطي
ضوضاء
→
Generator يعمل صورة مزيفة
→
Discriminator حقيقية ولا مزيفة؟
+ صور حقيقية بتدخل للـ Discriminator كمان
شبكتين بيتنافسوا: الأولى بتحاول تزوّر، التانية بتحاول تكشف. كل ما التانية تبقى أشطر، الأولى تتعلم تزوّر أحسن. في الآخر التزوير بيبقى مش متميّز عن الحقيقي.
تشبيه 🎨
مزوّر لوحات وخبير فني. كل ما الخبير يكشف تزوير، المزوّر يتعلم من غلطته. بعد سنين المزوّر بيرسم لوحات محدش يفرّقها عن الأصل.
استخدامات: توليد وجوه، تحسين دقة الصور، نقل الأسلوب. مشكلتها: صعبة التدريب (Mode Collapse).
3
ResNet — القفز فوق الطبقات
المشكلة: شبكة بـ 100 طبقة كانت بتتدرّب أسوأ من 20 طبقة! (الميل بيتلاشى). الحل: خلّي المدخل يقفز ويتضاف على الخرج:
y = F(x) + x
الطبقة بتتعلم "الفرق" بس، مش كل حاجة من الصفر
تشبيه 🛣️
طريق سريع جنب الطريق العادي. لو الطبقة مش مفيدة، الإشارة تاخد الطريق السريع وتعدّي زي ما هي. كده 1000 طبقة ينفع تتدرّب.
الـ Skip Connection دي موجودة في كل المعماريات الحديثة بما فيها Transformers (الـ "Add" في Add & Norm).
4
Encoder–Decoder — من تسلسل لتسلسل
جملة عربي
→
Encoder يفهم
→
Context المعنى
→
Decoder يكتب
→
جملة إنجليزي
المدخل والمخرج تسلسلين بأطوال مختلفة. الـ Encoder يحوّل المدخل لـ"معنى"، والـ Decoder يولّد المخرج منه كلمة كلمة.
الترجمة الآلية
التلخيص
الشات بوت (سؤال → إجابة)
الصوت لنص
الـ Transformer الأصلي كان Encoder-Decoder. BERT = Encoder بس (فهم). GPT = Decoder بس (توليد).
موديل بيكشف السرطان من الأشعة. 99% من الناس أصحّاء. موديل بيقول "سليم" للكل هيجيب دقة 99% — وهو ما كشفش حالة واحدة! عشان كده الدقة لوحدها بتضحك عليك.
1
Confusion Matrix — الجدول الأساسي
توقّع: مريض
توقّع: سليم
فعلًا مريض
TP صح
FN فاته ❗
فعلًا سليم
FP إنذار كاذب
TN صح
TP / TN قال صح (مريض فعلًا / سليم فعلًا)
FP قال مريض وهو سليم — خضّة من غير داعي
FN قال سليم وهو مريض — الأخطر
2
المقاييس — بالأرقام
مثال: TP=80 · FN=20 · FP=10 · TN=890
المقياس
المعادلة
الناتج
بيجاوب على
Accuracy
(TP+TN)/الكل
97%
نسبة الصح الكلية
Precision
TP/(TP+FP)
89%
لما يقول مريض، بيكون صح قد إيه؟
Recall
TP/(TP+FN)
80%
من المرضى الحقيقيين، لقى قد إيه؟
F1
2·P·R/(P+R)
84%
توازن بين الاتنين
تشبيه 🎣
صياد: Precision = من اللي في الشبكة، كام سمكة (مش زبالة)؟ Recall = من سمك البحيرة كله، صاد كام؟ شبكة ضيقة = precision عالي recall واطي. شبكة ضخمة = العكس.
3
إمتى تهتم بأنهي؟
الحالة
الأهم
ليه
كشف سرطان
Recall
FN (مريض فاتنا) أخطر من FP
فلتر Spam
Precision
FP (إيميل مهم راح spam) أسوأ
كشف احتيال بنكي
Recall ثم Precision
متسيبش احتيال يعدّي
عام
F1
لما الاتنين مهمين
4
ROC–AUC — في رقم واحد
المنحنى بيرسم أداء الموديل عند كل حد قرار ممكن. المساحة تحته (AUC): 1 = مثالي، 0.5 = عشوائي. مفيد عشان تقارن موديلات من غير ما تختار حد معيّن.