الدرس 1 من 8

الشبكة العصبية من جوه

مش سحر: ضرب مصفوفات ودالة بسيطة، متكررين كذا مرة.

الـ Neuron: قرار صغير

تخيل إنك بتقرر تخرج النهارده ولا لأ. بتبص على ٣ حاجات: الجو، وصحابك فاضيين، ومعاك فلوس. كل حاجة ليها أهمية عندك (وزن)، وانت بتجمعهم وتشوف لو عدّوا حد معين. ده بالظبط الـ neuron: بياخد مدخلات، يضرب كل واحدة في وزنها، يجمع، يضيف bias، ويعدّي النتيجة على دالة تنشيط.

output = activation(w₁x₁ + w₂x₂ + w₃x₃ + b)
neuron.py
import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

#            weather  friends_free  have_money
inputs = np.array([0.9, 1.0, 0.2])
weights = np.array([1.5, 2.0, 1.0])      # how much each factor matters to you
bias = -2.5                              # you're lazy by default :)

z = inputs @ weights + bias              # the dot product from phase 3!
print(f"score = {z:.2f}")
print(f"probability of going out = {sigmoid(z):.0%}")

الطبقة = Neurons كتير مع بعض

لو عندك ٤ neurons كل واحد بيبص على نفس المدخلات بأوزان مختلفة، تقدر تحسبهم كلهم مرة واحدة بضرب مصفوفة. ده اللي شفناه في المرحلة ٣ بالظبط. والشبكة العميقة يعني طبقات ورا بعض: ناتج كل طبقة هو مدخل اللي بعدها.

layers.py
import numpy as np

rng = np.random.default_rng(0)
x = rng.normal(size=(5, 3))          # 5 samples, 3 features each

W1 = rng.normal(size=(3, 4))         # layer 1: 3 inputs -> 4 neurons
W2 = rng.normal(size=(4, 1))         # layer 2: 4 inputs -> 1 output

hidden = np.maximum(0, x @ W1)       # ReLU activation
output = hidden @ W2

print("input: ", x.shape)
print("hidden:", hidden.shape)
print("output:", output.shape)

ليه دالة التنشيط مهمة جداً؟

لو شلت دالة التنشيط، كل الطبقات مع بعض هتبقى كأنها ضرب مصفوفة واحد، يعني خط مستقيم مهما كترت الطبقات. الدالة دي هي اللي بتدي الشبكة القدرة إنها تتعلم أشكال منحنية ومعقدة.

activations.py
import numpy as np
import matplotlib.pyplot as plt

z = np.linspace(-5, 5, 200)
fig, axes = plt.subplots(1, 3, figsize=(10, 2.8))
funcs = {
    "ReLU: max(0, z)": np.maximum(0, z),
    "Sigmoid: 0 to 1": 1 / (1 + np.exp(-z)),
    "Tanh: -1 to 1": np.tanh(z),
}
for ax, (name, y) in zip(axes, funcs.items()):
    ax.plot(z, y, color="#3776AB", linewidth=2.5)
    ax.axhline(0, color="gray", linewidth=0.5)
    ax.axvline(0, color="gray", linewidth=0.5)
    ax.set_title(name)
plt.tight_layout()
plt.show()
ReLU لو سالب يبقى صفر، ولو موجب يعدّي زي ما هو. الأشهر في الطبقات الداخلية لأنها بسيطة وسريعة.
Sigmoid بتحوّل أي رقم لاحتمال بين 0 و 1. بتتحط في آخر طبقة في التصنيف الثنائي.
Softmax زي sigmoid بس لأكتر من فئة، واتعلمناها في المرحلة ٣.
🤖 الحجم الحقيقيالشبكة اللي فوق فيها ١٦ وزن. موديل زي ResNet للصور فيه حوالي ١١ مليون، وموديلات اللغة الكبيرة فيها مليارات. بس الفكرة هي هي: ضرب مصفوفات ودوال تنشيط.
صفحة المرحلة