أساسيات التعلم العميق وبناء الشبكات العصبية
دليل عربي مفصّل للمبتدئين يغطي 9 محاور من الصفر: من «ما هو الذكاء الاصطناعي؟» إلى «كيف أبني أول نموذج بـ PyTorch؟». كل مفهوم بشرح بسيط، تشبيهات من الحياة، وأمثلة رقمية خطوة بخطوة — بدون افتراض أي خلفية سابقة.
مقدمة عن الذكاء الاصطناعي
قبل أن نبني شبكة عصبية، نحتاج أن نفهم أين يقع التعلم العميق في عالم الذكاء الاصطناعي الأوسع — ولماذا أصبح اليوم في كل مكان تقريبًا.
AI مقابل ML مقابل Deep Learning
ثلاثة مصطلحات تُستخدم كثيرًا وتُسبّب ارتباكًا. تخيّلها كدوائر متداخلة:
الذكاء الاصطناعي (AI)
المظلة الأوسع: أي تقنية تجعل الآلة «ذكية». يشمل قواعد الشطرنج، أنظمة خبيرة، ML، وDL.
تعلم الآلة (ML)
النموذج يتعلّم من أمثلة. يشمل Decision Trees، SVM، Random Forest، والشبكات العصبية.
التعلم العميق (DL)
ML باستخدام شبكات عصبية عميقة (3+ طبقات مخفية). الأقوى في الصور، النص، الصوت.
تصفية البريد المزعج:
- AI تقليدي: قواعد يدوية — «إذا العنوان يحتوي FREE أو WIN → spam».
- ML: Naive Bayes يتعلّم من آلاف رسائل spam/ham.
- DL: شبكة LSTM أو Transformer تفهم سياق النص بالكامل — «هذا العرض مجاني لكنه من بنكي الموثوق».
كلها AI — لكن DL يتفوّق عندما تكون البيانات كثيرة والأنماط معقّدة.
تاريخ Deep Learning — من الفكرة إلى الثورة
| السنة | الحدث | لماذا يهمّ؟ |
|---|---|---|
| 1943 | McCulloch & Pitts — أول نموذج عصبون رياضي | الأساس: عصبون = جمع مدخلات + عتبة |
| 1958 | Perceptron — Frank Rosenblatt | أول شبكة قابلة للتعلّم — ثم انتُقدت لحدودها |
| 1969 | كتاب Minsky & Papert | أثبت حدود Perceptron (مشكلة XOR) → «شتاء AI» |
| 1986 | Backpropagation — Rumelhart, Hinton | طريقة تدريب الشبكات متعددة الطبقات |
| 2006 | Hinton — Deep Belief Networks | بداية عودة الاهتمام بالشبكات العميقة |
| 2012 | AlexNet — ImageNet | الثورة: CNN + GPU تتفوّق بفارق 10%+ |
| 2016 | AlphaGo | DL + Reinforcement Learning يهزم بطل Go |
| 2017 | Transformer | أساس GPT وكل LLM حديث |
| 2022–2026 | ChatGPT، GPT-4، نماذج متعددة الوسائط | DL في متناول الجميع |
مسابقة ImageNet: 1.2 مليون صورة، 1000 فئة. AlexNet حقّق خطأ 15.3% — الثاني 26%. الفارق هائل. الشركات أدركت: بيانات ضخمة + GPU + شبكات عميقة = مستقبل AI.
أهم التطبيقات الحالية
| المجال | التطبيق | التقنية |
|---|---|---|
| الترجمة والمحادثة | Google Translate، ChatGPT، Claude | Transformer / LLM |
| الرؤية الحاسوبية | Face ID، كشف الأشياء، السيارات ذاتية القيادة | CNN |
| الصوت | Siri، Alexa، تحويل كلام لنص | RNN / Transformer |
| الطب | تشخيص من الأشعة، اكتشاف أدوية | CNN، GNN |
| التوليد الإبداعي | DALL-E، Midjourney، Stable Diffusion | Diffusion / GAN |
| التوصيات | Netflix، YouTube، Amazon | Embeddings + Deep Models |
| الألعاب | AlphaGo، AlphaStar | DL + Reinforcement Learning |
لماذا نجح Deep Learning؟
فشل DL في السبعينيات والثمانينيات — ثم نجح بقوة بعد 2012. السبب: ثلاثة عوامل اجتمعت:
1. بيانات ضخمة (Big Data)
الإنترنت، الهواتف، الكاميرات — ملايين الصور والنصوص والتسجيلات. DL يحتاج بيانات كثيرة ليتعلّم.
2. قوة حاسوبية (GPU)
معالجات NVIDIA تُنفّذ ملايين العمليات بالتوازي — تدريب شبكة على GPU أسرع 10–100× من CPU.
3. خوارزميات محسّنة
ReLU، Dropout، BatchNorm، Adam، ResNet — حلّت مشاكل vanishing gradient وoverfitting.
تعلّم الطبخ: تحتاج وصفات كثيرة (بيانات)، مطبخ مجهّز (GPU)، وتقنيات محسّنة (خوارزميات). بدون أيٍّ من الثلاثة — الطبخ (التدريب) يفشل أو يستغرق سنوات.
في ML التقليدي، الخبير يحدّد السمات (Features) يدويًا. في DL، الشبكة تكتشف السمات بنفسها من البيانات الخام — حواف → أشكال → أجزاء → كائن كامل. هذا «Representation Learning» هو سر قوة DL.
الرياضيات اللازمة — بأبسط صورة ممكنة
لا تحتاج شهادة رياضيات لبدء التعلم العميق — لكن فهم الأفكار الأساسية يجعل كل شيء أوضح. هذا المحور يشرح ما تحتاجه فعلًا، مع أمثلة مرتبطة بالشبكات العصبية.
الجبر الخطي (Linear Algebra)
المتجهات (Vectors)
المتجه = قائمة مرتبة من الأرقام. يمكنك تخيّله كسهم في فضاء، أو كصف من البيانات.
طالب له 3 خصائص: GPA=3.5، ساعات دراسة=25، حضور=90%. نمثّله كمتجه:
في شبكة عصبية، كل عينة مدخلة = متجه. صورة MNIST 28×28 = متجه بطول 784 (كل بكسل رقم).
المصفوفات (Matrices)
المصفوفة = جدول من الأرقام (صفوف × أعمدة). في DL، الأوزان تُخزَّن كمصفوفات.
طبقة لها 3 مدخلات و 2 عصبونات. الأوزان مصفوفة 3×2:
الصف i = أوزان العصبون i من كل المدخلات. العمود j = أوزان كل العصبونات من المدخل j.
ضرب المصفوفات (Matrix Multiplication)
هذه العملية هي قلب الانتشار الأمامي. عندما تضرب مصفوفة أوزان W في متجه مدخلات x، تحصل على مخرجات الطبقة.
مدخل x = [2, 1]، وزن w = [0.5, 0.3]، انحياز b = 0.1:
z = (0.5 × 2) + (0.3 × 1) + 0.1 = 1.0 + 0.3 + 0.1 = 1.4
هذا بالضبط ما يفعله عصبون واحد: جمع خطي (Linear Combination) للمدخلات الموزونة.
بدل حساب كل عصبون على حدة، نضرب مصفوفة واحدة في batch كامل — GPU يفعل هذا بالتوازي. 32 صورة × 784 بكسل = مصفوفة 32×784 تُضرب في W — سرعة هائلة.
القيم الذاتية (Eigenvalues) — فكرة مبسّطة
مفهوم متقدّم قليلًا، لكن مفيد لفهم بعض التقنيات. عندما تضرب مصفوفة A في متجه v، النتيجة عادة متجه جديد. لكن أحيانًا v يبقى في نفس الاتجاه — فقط يتغيّر طوله. هذا v يُسمى متجه ذاتي (Eigenvector)، والعامل الذي يضرب الطول = قيمة ذاتية (Eigenvalue).
- PCA (تحليل المكوّنات الرئيسية): تقليل أبعاد البيانات — نأخذ الاتجاهات الأهم.
- فهم التدريب: Hessian matrix وتحليل استقرار التحسين.
- Graph Neural Networks: تحليل بنية الشبكات.
كـمبتدئ: اعرف أنها «اتجاهات خاصة» في البيانات — لا تحتاج حسابها يدويًا؛ المكتبات تفعل ذلك.
أساسيات التفاضل (Calculus Basics)
المشتقات الجزئية (Partial Derivatives)
المشتقة = «معدّل التغيّر». إذا غيّرت x قليلًا، كم يتغيّر y؟ المشتقة الجزئية = نفس الفكرة لكن عندما الدالة لها عدة متغيرات — نشتق بالنسبة لمتغير واحد ونثبّت الباقي.
دالة Loss تعتمد على وزنين: L(w₁, w₂) = (w₁ - 3)² + (w₂ - 5)²
∂L/∂w₁ = 2(w₁ - 3) — عند w₁=3، المشتقة = 0 (أقل نقطة).
∂L/∂w₂ = 2(w₂ - 5) — عند w₂=5، المشتقة = 0.
في التدريب: نحسب ∂Loss/∂w لكل وزن — «بأي اتجاه أعدّل هذا الوزن لأقلّل الخطأ؟»
التدرج (Gradient)
التدرج = متجه يجمع كل المشتقات الجزئية. يشير لاتجاه أسرع صعود للدالة. للنزول (تقليل Loss) نذهب عكس التدرج.
أنت على جبل ولا ترى القاع (أقل Loss). التدرج يخبرك: «انحدر باتجاه كذا». تمشي خطوة صغيرة عكس التدرج — تكرّر حتى تصل للقاع. هذا بالضبط Gradient Descent.
قاعدة السلسلة (Chain Rule)
إذا y يعتمد على z، و z يعتمد على x — فكيف يتغيّر y عند تغيّر x؟
y = z²، z = 3x. إذن y = (3x)² = 9x².
dy/dx = dy/dz × dz/dx = 2z × 3 = 2(3x) × 3 = 18x ✓
الشبكة سلسلة: Input → طبقة1 → طبقة2 → ... → Loss. الخطأ يتدفّق للخلف عبر كل طبقة بضرب المشتقات — Chain Rule. بدونها، لا نعرف كيف نحدّث أوزان الطبقات الأولى في شبكة عميقة.
الشبكات العصبية (Neural Networks)
الشبكة العصبية = مجموعة من «الحاسبات الصغيرة» (عصبونات) مترابطة. كل عصبون يأخذ مدخلات، يحسب، يُمرّر النتيجة للتالي.
العصبون البيولوجي (Biological Neuron)
في دماغك، الخلية العصبية (Neuron) تستقبل إشارات كهربائية عبر التشعبات (Dendrites)، تجمعها في الجسم الخلوي، وإذا تجاوزت عتبة معيّنة تُطلق نبضة عبر الأكسون (Axon) للعصبونات التالية.
المدخلات ≈ Dendrites | الجمع ≈ Cell Body | العتبة ≈ Bias | القرار (يطلق/لا) ≈ Activation | المخرج ≈ Axon | الأوزان ≈ قوة كل اتصال synapse
العصبون الاصطناعي (Artificial Neuron)
نسخة رياضية مبسّطة: يأخذ أرقامًا، يضرب كل واحد بوزن، يجمع، يضيف bias، يمرّر عبر دالة تفعيل.
Perceptron — أبسط شبكة
Perceptron (1958) = عصبون واحد. يصنّف نقاطًا إلى فئتين بخط فاصل.
مدخلان: GPA (0–4) وساعات دراسة (0–40). Perceptron يتعلّم أوزانًا مثل w₁=0.6، w₂=0.3، b=-2.5.
طالب GPA=3.5، دراسة=25: 0.6×3.5 + 0.3×25 + (-2.5) = 2.1+7.5-2.5 = 7.1 → تفعيل → «مقبول».
حدود Perceptron: لا يحل XOR (بيانات غير قابلة للفصل بخط). الحل: طبقات متعددة — MLP.
Multi-Layer Perceptron (MLP)
شبكة من طبقات: مدخل → طبقات مخفية → مخرج. كل طبقة Fully Connected (كل عصبون متصل بكل عصبون في الطبقة التالية).
طبقة المدخل (Input)
تستقبل البيانات الخام — 784 عصبون لصورة MNIST. لا «تتعلّم» — تمرّر فقط.
الطبقات المخفية (Hidden)
هنا «العمق». تستخرج السمات: حواف → أشكال → أجزاء.
طبقة المخرج (Output)
النتيجة: 10 عصبونات لـ 10 أرقام، أو 2 لقطة/كلب، أو 1 للانحدار.
الأوزان (Weights) والانحياز (Bias) والمعاملات (Parameters)
- Weights (w): أهمّية كل مدخل — «كم يؤثّر هذا البكسل على القرار؟». تتعلّم من البيانات.
- Bias (b): يزيح عتبة التفعيل — يسمح للعصبون بالتفعيل حتى بدون مدخلات قوية. مثل «الميل الافتراضي للموافقة».
- Parameters: كل الأوزان + كل الانحيازات. شبكة 784→128→10 ≈ 101,000 معامل.
طبقة 784 → 128: أوزان = 784×128 = 100,352 + 128 bias = 100,480
طبقة 128 → 10: 128×10 + 10 = 1,290
المجموع ≈ 101,770 رقم يتعلّمها النموذج!
الانتشار الأمامي (Forward Propagation)
عندما تُدخل بيانات لشبكة مدرّبة، تمرّ من المدخل للمخرج — هذا الانتشار الأمامي. ثلاث خطوات في كل طبقة: جمع خطي → تفعيل → تمرير للطبقة التالية.
الجمع الخطي (Linear Combination)
كل عصبون يحسب: z = w·x + b — ضرب كل مدخل بوزنه، جمع النتائج، إضافة bias.
x = [2, -1, 3]، w = [0.5, 0.8, -0.2]، b = 0.1
z = (0.5×2) + (0.8×(-1)) + (-0.2×3) + 0.1 = 1.0 - 0.8 - 0.6 + 0.1 = -0.3
هذا z قبل التفعيل — «النتيجة الخام».
في طبقة كاملة: نفعل هذا لكل عصبون — أو بكفاءة: z = W·x + b (ضرب مصفوفات).
التفعيل (Activation)
نمرّر z عبر دالة تفعيل غير خطية: a = activation(z). بدونها، 100 طبقة = خط مستقيم واحد — عديمة الفائدة.
z = -0.3 → ReLU(-0.3) = max(0, -0.3) = 0
إذا z = 2.5 → ReLU(2.5) = 2.5
التنبؤ (Prediction)
بعد المرور بكل الطبقات، طبقة المخرج تعطي التنبؤ النهائي:
- تصنيف: Softmax يحوّل الأرقام لاحتمالات — الأعلى = التنبؤ.
- انحدار: عصبون واحد يُخرج رقمًا — سعر منزل، درجة حرارة.
- ثنائي: Sigmoid يُخرج احتمال 0–1 — spam أم لا.
- المدخل: صورة 28×28 = 784 بكسل (قيم 0–1 بعد normalization).
- طبقة 1: 784 → 128 عصبون. z₁ = W₁·x + b₁، a₁ = ReLU(z₁).
- طبقة 2: 128 → 64. z₂ = W₂·a₁ + b₂، a₂ = ReLU(z₂).
- طبقة المخرج: 64 → 10. z₃ = W₃·a₂ + b₃.
- Softmax: [0.01, 0.02, 0.85, 0.03, 0.02, 0.01, 0.02, 0.02, 0.01, 0.01]
- التنبؤ: الرقم 2 باحتمال 85%.
كل هذا يحدث في أجزاء من الثانية على GPU.
دوال التفعيل (Activation Functions)
دالة التفعيل تُدخل «انحناءً» غير خطي — بدونها الشبكة لا تتعلّم أنماطًا معقّدة. كل دالة لها مميزات وعيوب.
Sigmoid
تحوّل أي رقم إلى قيمة بين 0 و 1 — مثل احتمال.
σ(0) = 0.5 | σ(2) ≈ 0.88 | σ(-2) ≈ 0.12
الاستخدام: تصنيف ثنائي (طبقة مخرج واحدة)، بوابات في LSTM.
العيب: Vanishing Gradient في شبكات عميقة — gradient يصغر exponentially.
Tanh
مخرجات بين -1 و +1 — متمركزة حول الصفر (أفضل من Sigmoid أحيانًا).
tanh(0) = 0 | tanh(1) ≈ 0.76 | tanh(-1) ≈ -0.76
الاستخدام: RNN، بعض الطبقات المخفية القديمة.
ReLU (Rectified Linear Unit)
إذا سالب → 0. إذا موجب → يبقى كما هو. الأكثر شيوعًا في الطبقات المخفية.
ReLU(-3) = 0 | ReLU(0) = 0 | ReLU(5) = 5
الميزة: سريعة، gradient = 1 للقيم الموجبة — تحل vanishing gradient.
العيب: «Dead ReLU» — عصبونات تبقى عند 0 للأبد إذا gradient = 0 دائمًا.
Leaky ReLU
بدل تصفير القيم السالبة، تمرّر نسبة صغيرة — العصبون «لا يموت».
LeakyReLU(-10) = -0.1 | LeakyReLU(5) = 5
ELU (Exponential Linear Unit)
قيم سالبة ناعمة (ليست خطية مثل Leaky). متوسط المخرجات أقرب للصفر — تدريب أسرع أحيانًا.
GELU (Gaussian Error Linear Unit)
دالة ناعمة تستخدم في Transformers (BERT، GPT). تجمع بين ReLU وخصائص احتمالية.
Transformers حساسة للتفاصيل الدقيقة في التمثيلات. GELU أنعم من ReLU — تغييرات صغيرة في المدخل تؤثّر على المخرج بشكل تدريجي، وهذا مفيد للنص.
Softmax
تحوّل n رقم إلى n احتمال يمجموعها 1 — للتصنيف متعدد الفئات.
مخرجات خام: [2.0, 1.0, 0.1]
Softmax: [0.659, 0.242, 0.099] → التنبؤ: قطة (65.9%)
مخرجات خام: [0.5, 3.0, 0.2] → Softmax: [0.06, 0.90, 0.04] → كلب (90%)
| الدالة | النطاق | أين تُستخدم |
|---|---|---|
| ReLU / Leaky / ELU | 0 إلى ∞ (تقريبًا) | الطبقات المخفية في CNN وMLP |
| Sigmoid | 0 إلى 1 | تصنيف ثنائي، بوابات LSTM |
| Tanh | -1 إلى 1 | RNN، طبقات مخفية |
| GELU | تقريبًا -0.17 إلى ∞ | Transformers (BERT، GPT) |
| Softmax | 0 إلى 1 (مجموع = 1) | طبقة المخرج — تصنيف متعدد الفئات |
دوال الخسارة (Loss Functions)
دالة الخسارة تقيس «كم أخطأنا؟» — رقم واحد. التدريب = تقليل هذا الرقم. اختيار Loss يعتمد على نوع المهمة.
MSE — Mean Squared Error
متوسط مربّع الفرق بين التنبؤ والحقيقة. للانحدار (التنبؤ برقم).
الحقيقة: 200,000$. التنبؤات: [195,000, 210,000, 198,000]
الأخطاء: [-5000, +10000, -2000] → مربّعات: [25M, 100M, 4M]
MSE = (25+100+4)/3 = 43 مليون — الأخطاء الكبيرة تُعاقَب بقوة (لأنها مربّعة).
MAE — Mean Absolute Error
متوسط القيمة المطلقة للخطأ — أقل حساسية للقيم الشاذة (outliers) من MSE.
MAE = (5000 + 10000 + 2000) / 3 = 5,667$ — أسهل للتفسير: «في المتوسط نخطئ بـ 5,667 دولار».
Binary Cross Entropy — تصنيف ثنائي
لتصنيف فئتين (spam/ham، مرض/سليم). y = 0 أو 1، p = احتمال التنبؤ (من Sigmoid).
الحقيقة y=1 (spam). التنبؤ p=0.9 (واثق وصحيح): BCE = -log(0.9) ≈ 0.105 — خطأ صغير.
الحقيقة y=1. التنبؤ p=0.1 (واثق لكن خطأ!): BCE = -log(0.1) ≈ 2.30 — عقوبة شديدة.
Categorical Cross Entropy — تصنيف متعدد الفئات
لـ 3+ فئات (أرقام 0–9، أنواع حيوانات). y = one-hot [0,0,1,0,...]، p = احتمالات Softmax.
الحقيقة: قطة → y = [1, 0, 0]
تنبؤ جيد p = [0.8, 0.15, 0.05]: CCE = -log(0.8) ≈ 0.22
تنبؤ سيء p = [0.1, 0.85, 0.05]: CCE = -log(0.1) ≈ 2.30
Hinge Loss — SVM و التصنيف الهامشي
تُعاقب التنبؤات الخاطئة بقوة، لكن إذا كان التنبؤ صحيحًا وبهامش كافٍ — Loss = 0.
y=+1 (فئة إيجابية)، f(x)=0.8: Hinge = max(0, 1-0.8) = 0.2
y=+1، f(x)=2.0: Hinge = max(0, 1-2) = 0 — واثق بما يكفي، لا عقوبة.
الاستخدام: SVM، بعض نماذج التصنيف. أقل شيوعًا من Cross-Entropy في الشبكات العميقة.
KL Divergence — قياس «بعد التوزيعين»
تقيس كم يختلف توزيع P (الحقيقة) عن توزيع Q (تنبؤ النموذج). KL = 0 يعني التطابق التام.
- VAE (Variational Autoencoders): تقريب توزيع latent.
- Knowledge Distillation: نقل معرفة من نموذج كبير لصغير.
- Language Models: مقارنة توزيعات الكلمات.
| دالة الخسارة | المهمة | مخرج الطبقة الأخيرة |
|---|---|---|
| MSE / MAE | انحدار (رقم مستمر) | Linear (بدون تفعيل أو ReLU) |
| Binary Cross Entropy | فئتان | Sigmoid |
| Categorical Cross Entropy | 3+ فئات | Softmax |
| Hinge Loss | تصنيف هامشي | Linear |
| KL Divergence | مقارنة توزيعات | Softmax / Logits |
الانحدار التدريجي (Gradient Descent)
بعد حساب Loss، نحتاج تحديث الأوزان لتقليله. Gradient Descent = الخوارزمية الأساسية لهذا — نمشي عكس اتجاه التدرج.
دالة التكلفة (Cost Function)
Cost Function = Loss لكن على كل بيانات التدريب (أو batch). الهدف: إيجاد الأوزان التي تُقلّل Cost إلى الحد الأدنى.
Loss: خطأ مثال واحد أو batch صغير. Cost: متوسط Loss على مجموعة أكبر. عمليًا يُستخدمان بالتبادل — المهم: رقم نريد تقليله.
التحسين (Optimization)
التحسين = عملية إيجاد أفضل قيم للمعاملات. في DL، «الأفضل» = أقل Cost على بيانات التحقق (validation) وليس فقط التدريب.
معدل التعلّم (Learning Rate)
حجم الخطوة في كل تحديث. أهم hyperparameter على الإطلاق.
كبير جدًا (lr = 1.0)
تقفز فوق الحد الأدنى — Loss يتذبذب أو ينفجر (NaN). التدريب يفشل.
صغير جدًا (lr = 0.00001)
بطيء جدًا — قد يستغرق أيامًا. لكن مستقر.
مناسب (lr = 0.001)
توازن جيد — نقطة بداية شائعة مع Adam.
وزن w = 2.0، gradient ∂L/∂w = 4.0 (زيادة w تزيد Loss)، lr = 0.1
w_new = 2.0 - 0.1 × 4.0 = 1.6 — قلّلنا w لأن gradient موجب.
إذا gradient = -3.0: w_new = 2.0 - 0.1 × (-3) = 2.3 — زدنا w لأن gradient سالب.
Batch Gradient Descent
يستخدم كل بيانات التدريب في كل خطوة تحديث واحدة.
- الميزة: gradient دقيق ومستقر.
- العيب: بطيء — 60,000 صورة MNIST في خطوة واحدة = ذاكرة ضخمة وبطء.
Stochastic Gradient Descent (SGD)
يستخدم مثالًا واحدًا في كل خطوة.
- الميزة: سريع جدًا، يهرب من minima محلية (noise يساعد).
- العيب: gradient noisy — Loss يتذبذب بشكل كبير.
Mini-Batch Gradient Descent
الوسط الذهبي: مجموعة صغيرة (32، 64، 128 مثال) في كل خطوة. الأكثر استخدامًا في DL.
60,000 صورة تدريب، batch size = 128:
Iterations per epoch = 60,000 / 128 ≈ 469 خطوة تحديث.
15 epoch = 469 × 15 ≈ 7,035 خطوة تحديث إجمالية.
| النوع | حجم البيانات/خطوة | السرعة | الاستقرار |
|---|---|---|---|
| Batch GD | كل البيانات | بطيء | مستقر جدًا |
| SGD | 1 مثال | سريع جدًا | متذبذب |
| Mini-Batch | 32–256 | سريع + GPU-friendly | توازن ممتاز ✓ |
Adam (الأشهر): يجمع Momentum + learning rate متكيّف لكل وزن. ابدأ بـ lr=0.001. SGD + Momentum وAdamW (للـ Transformers) خيارات شائعة أيضًا.
الانتشار العكسي (Backpropagation)
شبكة فيها 100,000 وزن — كيف نعرف أي وزن نعدّله وبكم؟ Backpropagation (1986) هو الحل: يحسب gradient لكل وزن بكفاءة باستخدام Chain Rule.
قاعدة السلسلة في Backprop
الشبكة سلسلة دوال: x → layer1 → layer2 → ... → Loss. لتعديل وزن في الطبقة 1، نحتاج: كم يؤثّر هذا الوزن على Loss؟ = ضرب مشتقات كل طبقة في السلسلة.
حساب التدرجات (Computing Gradients)
Forward:
- مدخل x = 2.0
- طبقة مخفية: z = w₁·x + b₁ = 0.5×2 + 0.1 = 1.1
- تفعيل: a = ReLU(1.1) = 1.1
- مخرج: y_pred = w₂·a + b₂ = 0.8×1.1 + 0.2 = 1.08
- الحقيقة y_true = 1.5. Loss = (1.08 - 1.5)² = 0.176
Backward:
- ∂Loss/∂y_pred = 2(1.08 - 1.5) = -0.84
- ∂Loss/∂w₂ = ∂Loss/∂y_pred × a = -0.84 × 1.1 = -0.924
- ∂Loss/∂a = ∂Loss/∂y_pred × w₂ = -0.84 × 0.8 = -0.672
- ∂Loss/∂w₁ = ∂Loss/∂a × x = -0.672 × 2 = -1.344 (لأن ReLU نشط)
كل وزن يعرف الآن: «زِدني» (gradient سالب) أو «قلّلني» (gradient موجب).
تحديث الأوزان (Weight Updates)
w₂_new = 0.8 - 0.1 × (-0.924) = 0.8 + 0.092 = 0.892
w₁_new = 0.5 - 0.1 × (-1.344) = 0.5 + 0.134 = 0.634
في المرة القادمة، التنبؤ سيكون أقرب لـ 1.5 — Loss أصغر.
التفاضل التلقائي (Automatic Differentiation)
حساب gradients يدويًا لشبكة كبيرة مستحيل. Autodiff في PyTorch وTensorFlow يفعل ذلك تلقائيًا:
loss.backward() # Backprop تلقائي — يحسب كل gradients
optimizer.step() # تحديث الأوزان
optimizer.zero_grad() # تصفير gradients للخطوة التالية
- Forward: بيانات → تنبؤ
- Loss: قارن بالحقيقة
- Backward: loss.backward() — gradients لكل وزن
- Update: optimizer.step() — عدّل الأوزان
- كرّر على كل batch وكل epoch
بناء أول نموذج — TensorFlow، Keras، PyTorch
الآن نربط كل ما تعلّمناه بكود حقيقي. سنبني نموذجًا بسيطًا لتصنيف أرقام MNIST — المشروع الكلاسيكي للمبتدئين.
TensorFlow و Keras
TensorFlow = مكتبة Google للتعلم العميق. Keras = واجهة عالية المستوى فوق TensorFlow — بسيطة للمبتدئين.
from tensorflow import keras
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(64, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train / 255.0 # normalize إلى 0-1
model.fit(x_train, y_train, epochs=15, batch_size=128, validation_split=0.1)
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"دقة الاختبار: {test_acc:.2%}")
- Flatten: يحوّل 28×28 إلى 784.
- Dense(128, relu): طبقة مخفية 128 عصبون + ReLU.
- Dropout(0.2): يُطفئ 20% عصبونات عشوائيًا — ضد overfitting.
- Dense(10, softmax): 10 فئات (أرقام 0–9).
- compile: يحدد المحسّن (Adam)، Loss، المقياس (accuracy).
- fit: التدريب — 15 epoch، batch 128.
- evaluate: اختبار على بيانات لم يرها النموذج.
PyTorch
PyTorch = مكتبة Facebook/Meta — الأكثر شيوعًا في البحث والتعليم. أكثر «بايثونية» ومرونة من TensorFlow.
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
class MNISTNet(nn.Module):
def __init__(self):
super().__init__()
self.layers = nn.Sequential(
nn.Flatten(),
nn.Linear(784, 128),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 10)
)
def forward(self, x):
return self.layers(x)
model = MNISTNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
transform = transforms.Compose([transforms.ToTensor()])
train_data = datasets.MNIST('./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=128, shuffle=True)
for epoch in range(15):
for images, labels in train_loader:
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
| الإطار | المميزات | متى تستخدمه |
|---|---|---|
| TensorFlow + Keras | سهل، إنتاج، TFLite للموبايل | مشاريع إنتاج، Google Cloud، موبايل |
| PyTorch | مرن، بايثوني، بحث | مبتدئون، بحث، LLM |
التدريب (Training)
خطوات التدريب العملية:
- تحميل البيانات: MNIST، CIFAR، أو بياناتك.
- Preprocessing: normalize (0–1)، resize، augmentation.
- تقسيم: train (80%) / validation (10%) / test (10%).
- بناء النموذج: طبقات، تفعيل، dropout.
- التدريب: راقب train loss و validation loss.
- Early Stopping: توقف إذا validation loss يرتفع (overfitting).
- Train Loss ↓: النموذج يتعلّم — جيد.
- Val Loss ↓: يتعمّم — ممتاز.
- Train ↓ لكن Val ↑: Overfitting — أضف Dropout أو بيانات أكثر.
- كلاهما لا ينخفض: Underfitting — زِد الطبقات أو lr.
التقييم (Evaluation)
بعد التدريب، نقيّم على بيانات اختبار لم يرها النموذج أبدًا:
Accuracy (الدقة)
نسبة التصنيفات الصحيحة. MNIST: 97–99% ممتاز لـ MLP بسيط.
Precision / Recall
مهم عندما الفئات غير متوازنة — طب، كشف احتيال.
Confusion Matrix
جدول: أي فئة تُخلَط بأي فئة — يكشف نقاط الضعف.
Loss على Test
يجب أن يكون قريبًا من validation loss — إذا أعلى بكثير = overfitting.
- اليوم 1–2: ثبّت Python + PyTorch. شغّل MNIST من tutorial رسمي.
- اليوم 3: غيّر عدد الطبقات والعصبونات — راقب التأثير.
- اليوم 4: جرّب learning rates مختلفة (0.1، 0.01، 0.001).
- اليوم 5: أضف Dropout — قارن overfitting.
- اليوم 6: ارسم منحنى Loss (train vs val).
- اليوم 7: اكتب README على GitHub — وثّق ما تعلّمته.
بعد MNIST: جرّب CIFAR-10 (صور ملونة) مع CNN — ستتعلّم طبقات Conv. ثم استكشف الجزء الثالث عن Transformers وLLM. وأدلة الرياضيات والجبر الخطي تعمّق فهمك.