الدرس 6 من 8

الـ Gradient Descent

أهم درس في المرحلة دي، وأساس كل الـ Deep Learning.

الجبل والضباب

تخيل إنك فوق جبل والضباب كثيف ومش شايف حاجة، وعايز توصل لأوطى نقطة في الوادي. هتعمل إيه؟ هتحس الأرض تحت رجلك، وتشوف أنهي اتجاه نازل، وتاخد خطوة فيه. وتكرر. ده بالظبط الـ Gradient Descent.

loss رقم بيقيس الموديل غلطان قد إيه. الجبل هو الـ loss، وعايزين نوصل لأقل قيمة.
gradient متجه فيه المشتقة بالنسبة لكل weight. بيشاور على اتجاه الطلوع.
learning rate حجم الخطوة اللي بتاخدها كل مرة.
partial derivative مشتقة بالنسبة لمتغير واحد مع تثبيت الباقي.
w_new = w − learning_rate × gradientبنطرح لأن الـ gradient بيشاور على الطلوع، واحنا عايزين ننزل

موديل بيتعلم قدام عينك

عندنا شقق، ومساحتها (بالـ ١٠٠ متر) وسعرها (بالمليون). عايزين الموديل يكتشف لوحده «كل ١٠٠ متر بكام مليون». هنبدأ بتخمين غلط خالص w = 0 ونسيبه يتعلم:

learn.py
areas = [0.8, 1.0, 1.2, 1.5]      # in 100 m2
prices = [1.6, 2.0, 2.4, 3.0]     # in millions EGP

w = 0.0             # the model's guess: price = w * area
lr = 0.1            # learning rate
n = len(areas)

for step in range(1, 31):
    # loss = mean squared error
    errors = [w * x - y for x, y in zip(areas, prices)]
    loss = sum(e ** 2 for e in errors) / n
    # gradient of the loss with respect to w
    grad = sum(2 * e * x for e, x in zip(errors, areas)) / n
    w = w - lr * grad
    if step in (1, 5, 10, 20, 30):
        print(f"step {step:2}: w = {w:.3f}, loss = {loss:.4f}")

الموديل بدأ من صفر، وكل خطوة الـ loss بيقل، لحد ما وصل لـ w = 2 تقريباً، يعني «كل ١٠٠ متر بـ ٢ مليون». محدش قاله الرقم ده، هو اتعلمه من الداتا.

حجم الخطوة بيفرق جداً

lr = 0.01
# after 30 steps: w = 1.111   (target is 2.0)

بطيء جداً. الخطوات صغيرة فالموديل محتاج وقت طويل عشان يوصل.

لما يبقى فيه أكتر من weight

موديل حقيقي فيه ملايين الأوزان. الفكرة هي هي: بنحسب partial derivative للـ loss بالنسبة لكل وزن لوحده، ونحطهم كلهم في متجه واحد هو الـ gradient، ونحرك كل الأوزان مع بعض.

الـ Chain Rule في جملة واحدة

في الشبكة العصبية الداتا بتعدي على طبقات ورا بعض. عشان تعرف وزن في أول طبقة أثّر على الغلط في الآخر قد إيه، بتضرب تأثير كل طبقة في اللي بعدها. زي تروس الساعة: لو الترس الأول بيلف الترس التاني مرتين، والتاني بيلف التالت ٣ مرات، يبقى الأول بيلف التالت ٦ مرات. التطبيق ده على الشبكة كلها اسمه Backpropagation.

🤖 ده كل اللي بيحصل في التدريبلما تشوف في PyTorch loss.backward() ده بيحسب الـ gradient بالـ chain rule، و optimizer.step() بياخد الخطوة. انت كده فاهم قلب الـ Deep Learning.
الدرس اللي فات