Kodax

الشبكة العصبية الأساسية — التعلم العميق

الشبكة العصبية الأساسية

العصبون الواحد

z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b      (مجموع موزون + انحياز)
a = f(z)                               (دالة تنشيط)

- الأوزان w: أهمية كل مدخل (موجبة تدفع للأعلى، سالبة للأسفل).

- الانحياز b: يزيح النتيجة؛ بدونه يضطر العصبون للمرور بنقطة الصفر.

- التنشيط f: دالة غير خطية (الدرس التالي).

التدريب كله = إيجاد قيم جيدة للأوزان والانحيازات.

import numpy as np

x = np.array([0.5, 0.8, 0.2])        # ثلاث ميزات
w = np.array([0.4, -0.6, 0.9])
b = 0.1
z = x @ w + b                        # @ = الضرب النقطي
a = max(0.0, z)                      # ReLU
print(round(float(z), 3), round(float(a), 3))

الطبقة = عصبونات كثيرة بالتوازي

طبقة كثيفة (Dense) من 4 عصبونات على 3 مدخلات = مصفوفة أوزان 3×4 ومتجه انحيازات بطول 4. ولدفعة من العينات دفعة واحدة:

A = f(X · W + b)
X: (عينات × مدخلات)   W: (مدخلات × عصبونات)   A: (عينات × عصبونات)
import numpy as np

rng = np.random.default_rng(0)
X = rng.normal(size=(5, 3))          # 5 عينات، 3 ميزات
W1, b1 = rng.normal(size=(3, 4)) * 0.5, np.zeros(4)
W2, b2 = rng.normal(size=(4, 2)) * 0.5, np.zeros(2)

H = np.maximum(0, X @ W1 + b1)       # طبقة مخفية + ReLU
out = H @ W2 + b2                    # طبقة المخرج
print(H.shape, out.shape)            # (5, 4) (5, 2)

هذا هو التمرير الأمامي (forward pass) كاملاً: ضرب مصفوفات ودوال تنشيط، طبقة بعد طبقة. Keras يفعل الشيء نفسه، أسرع وعلى GPU.

أنواع الطبقات حسب الموقع

| الطبقة | الدور |

|---|---|

| المدخلات | شكل البيانات (784 بكسلاً لصورة 28×28 مسطحة) — بلا أوزان |

| المخفية | تتعلم التمثيلات الوسيطة |

| المخرج | حجمها وتنشيطها حسب المهمة: 1 + sigmoid للثنائي، N + softmax لـ N فئات، 1 بلا تنشيط للانحدار |

عدّ المعاملات

طبقة Dense: (عدد المدخلات × عدد العصبونات) + عدد العصبونات

- 784 ← 128: 784×128 + 128 = 100,480

- 128 ← 64: 128×64 + 64 = 8,256

- 64 ← 10: 64×10 + 10 = 650

المجموع 109,386 معاملاً — يطابق model.summary() في المثال الكامل. المعاملات الكثيرة مع بيانات قليلة = خطر الحفظ.

العمق مقابل العرض

- أعرض (عصبونات أكثر في الطبقة): قدرة أكبر في نفس المستوى.

- أعمق (طبقات أكثر): تمثيلات متدرجة أكثر تجريداً، وغالباً أكفأ بنفس عدد المعاملات.

ابدأ صغيراً ووسّع فقط إذا كان النموذج يعاني Underfitting.

تمرين

احسب يدوياً عدد معاملات شبكة 20 ← 32 ← 16 ← 3، ثم تحقق بإنشاء مصفوفات NumPy بالأشكال المناسبة وجمع أحجامها.

import tensorflow as tf
from tensorflow import keras

# ===== بناء شبكة بسيطة =====
model = keras.Sequential([
    # Input layer: 784 ميزة (صورة 28×28)
    keras.layers.Input(shape=(784,)),
    
    # Hidden layer 1: 128 عصبون
    keras.layers.Dense(128, activation='relu'),
    
    # Hidden layer 2: 64 عصبون
    keras.layers.Dense(64, activation='relu'),
    
    # Output layer: 10 أصناف
    keras.layers.Dense(10, activation='softmax')
])

# ملخص الشبكة
model.summary()

# ===== فهم المعاملات =====
# Dense(128) مع input 784:
# Weights: 784 × 128 = 100,352
# Biases: 128
# Total: 100,480 معامل

# Dense(64) مع input 128:
# Weights: 128 × 64 = 8,192
# Biases: 64
# Total: 8,256 معامل

print(f"إجمالي المعاملات: {model.count_params():,}")
اختبر فهمك