المشتقة والميل
درس 8 من 9
8المشتقة والميل
الصورة الكبيرةكل تدريب في بقية المسار هو تكرار لجملة واحدة: احسب الخسارة، احسب ميلها، تحرّك عكسه قليلًا، أعِد. هذا الدرس يكتب تلك الجملة بيدك قبل أي إطار.
ماذا تشاهد في الرسم: كلا المسارين يبدأ من w = 0 ويتّجه إلى القاع عند 3، والخطوات تقصر وحدها كلما اقترب لأن الميل يصغر. المعدّل 0.3 يكاد يصل في خطوات قليلة، والمعدّل 0.1 ما زال عند 2.7938 بعد اثنتي عشرة خطوة.
خارطة هذا الجزء
المفاهيم بالترتيب، اضغط أيًّا منها للقفز إليه:
طريقان إلى نفس الفكرة
تخيّل أنك على تلّة في ضباب كثيف وتريد النزول إلى الوادي. لا ترى الطريق، لكنك تشعر بميل الأرض تحت قدميك، فتخطو خطوة صغيرة نحو الانحدار، ثم تشعر من جديد. هذا بالضبط ما يفعله النموذج حين يتعلم: يقيس الميل ويخطو عكسه حتى يصل إلى أقل خطأ.
المشتقة تقيس تغيّر الدالة مع تغيّر صغير في المدخل، والميل gradient متجه المشتقات الجزئية ويشير إلى أسرع صعود. النزول بالميل gradient descent يحدّث الأوزان w = w - lr * grad، ومعدل التعلّم lr يحدد طول الخطوة: كبير جدًا يتذبذب وصغير جدًا يبطئ.
قبل أن تبدأ
📈ميل الخط
تعرف أن الميل يقول كم يرتفع الخط إذا تحرّكت خطوة إلى اليمين.
🐍الدوال والحلقات
تكتب دالة بايثون وحلقة for تحدّث متغيرًا في كل دورة.
🧭المتجهات
تعرف من درس الجبر الخطي أن المتجه قائمة أرقام، فالميل في عدة أبعاد متجه.
الفكرة الجوهرية
هذا الدرس يبني جملة التدريب كلها بيدك: الميل كانحدار عند نقطة، ثم الخطوة عكسه، ثم طول الخطوة، ثم الميل حين تكون الأوزان كثيرة.
1المشتقة: الميل عند نقطة
خذ خسارة بسيطة: (w - 3) ** 2. انظر إلى الرسم: قيمتها عند w من 0 إلى 6، وقاعها عند 3.
المشتقة تقول: لو حرّكت w قليلًا، فكم تتغيّر الخسارة؟ وإشارتها تخبرك أين الارتفاع. عند w = 0 الميل -6، أي أن الخسارة تنزل كلما زدت w.
2الخطوة عكس الميل
الميل يشير إلى جهة الارتفاع، ونحن نريد النزول، فنأخذ الاتجاه المعاكس له بالضبط. انظر إلى الرسم: الجملة التي يكرّرها كل تدريب.
بمعدّل 0.3 تبدأ من w = 0، والميل -6، فتصير w = 1.8. ثم يصير الميل -2.4 ثم -0.96، فتقصر الخطوات وحدها كلما اقتربت من القاع.
هذا سبب تباطؤ التدريب في نهايته، وليس عيبًا.
3معدّل التعلّم: طول الخطوة
معدّل التعلّم يضرب الميل قبل الخطوة، فيحدّد طولها. انظر إلى الرسم: البُعد عن القاع عند 3 بمعدّلين.
المعدّل 0.1 يقترب ببطء، وبعد اثنتي عشرة خطوة ما زال عند 2.7938. أما 1.1 فيسير في الاتجاه الصحيح بخطوة أطول من المسافة، فيتجاوز القاع حتى يصل إلى -23.7 بخسارة 715.
4الميل في أبعاد كثيرة
الشبكة لها ملايين الأوزان، فالميل متجه بنفس الطول: مشتقة جزئية لكل وزن. انظر إلى الرسم: المرور للأمام يحسب الخسارة، ثم يعود الميل إلى كل طبقة.
ثم تُعدَّل كل الأوزان في خطوة واحدة بنفس القاعدة التي طبّقتها على w وحدها. وبناء هذا المتجه آليًا هو ما تسمّيه المكتبات الاشتقاق التلقائي autograd.
كيف يعمل، خطوة بخطوة: كيف تعمل خطوة نزول واحدة بالميل
احسب الخسارة عند الوزن الحالي، مثل (w - 3.0) ** 2 عند w = 0، وهي 9.
احسب الميل عند النقطة نفسها: 2.0 * (w - 3.0) يعطي -6، وإشارته السالبة تعني أن الخسارة تنزل إذا زدت w.
اضرب الميل في معدّل التعلّم واطرحه من w: بمعدّل 0.3 يصير w = 0 - 0.3 × (-6) = 1.8.
أعِد الحساب من الموضع الجديد. الميل صار -2.4، فالخطوة التالية أقصر من التي قبلها.
مثال محلول
مثال: خمس خطوات بيدك
def gradient(w):
return 2.0 * (w - 3.0)
w = 0.0
rate = 0.3
for step in range(1, 6):
g = gradient(w)
w = w - rate * g
print(f"step {step}: gradient={g:+.3f} w={w:.3f}")
بدأنا من w = 0 والقاع عند 3. لاحظ أن الميل يصغر كل خطوة: -6.000 ثم -2.400 ثم -0.960. كلما قربنا من القاع صار السطح أكثر استواءً، فصارت الخطوات أقصر تلقائيًا بلا أي تدخّل منك. هذا سبب تباطؤ التدريب في نهايته، وليس عيبًا.
مثال: ثلاثة معدّلات تعلّم
def loss(w):
return (w - 3.0) ** 2
def gradient(w):
return 2.0 * (w - 3.0)
for rate in [0.1, 0.5, 1.1]:
w = 0.0
for _ in range(12):
w = w - rate * gradient(w)
print(f"rate={rate:<4} w={w:.4f} loss={loss(w):.4f}")
ثلاث تجارب متطابقة إلا في طول الخطوة. 0.1 وصل إلى 2.7938 أي لم يكمل بعد اثنتي عشرة خطوة، و0.5 وصل إلى القاع بالضبط، و1.1 انفجر إلى -23.7 بخسارة 715. المعدّل الثالث لم يكن «أبطأ»، كان في الاتجاه الصحيح وبخطوة أطول من المسافة إلى القاع فتجاوزه كل مرة أبعد من السابقة.
NaN واستنتاج أن البيانات تالفة. في أغلب الحالات معدّل التعلّم كبير جدًّا والقيم انفجرت كما في التجربة الثالثة. اقسم المعدّل على عشرة وأعد التشغيل قبل أي شيء آخر.
NaN تشخّص المشكلة في ثوانٍ، والتدريب الصامت يضيّع عليك ساعات.
جرّب بلا كود
خرافة مقابل حقيقة
| الخرافة | الحقيقة |
|---|---|
| الخسارة NaN تعني أن البيانات فاسدة. | غالبًا معدّل التعلّم كبير جدًّا والقيم انفجرت، كما حدث بمعدّل 1.1 حين وصلت الخسارة إلى 715. اقسم المعدّل على عشرة أولًا. |
| معدّل تعلّم أكبر يعني تدريبًا أسرع دائمًا. | حتى حدّ معيّن فقط. إذا صارت الخطوة أطول من المسافة إلى القاع، يتجاوزه النموذج ويبتعد أكثر في كل خطوة. |
| القيعان المحلية أكبر مشكلة في تدريب الشبكات. | عمليًا هي مشكلة أقل مما يُقال، والهضاب المسطّحة حيث الميل قريب من الصفر هي ما يبطئ التدريب فعلًا. |
جرّب بنفسك
تدرّب نموذجًا والخسارة تهبط ثم ترتفع ثم تهبط بتذبذب واضح حول قيمة ثابتة. ما أول ما تجرّبه؟
التذبذب حول قيمة ثابتة هو العلامة الكلاسيكية لخطوة أطول من اللازم: النموذج يقفز فوق القاع ذهابًا وإيابًا بلا استقرار. تقليل المعدّل أو استخدام جدول يخفّضه تدريجيًا يحلّ هذا. الدورات الأكثر ستكرّر التذبذب نفسه، والطبقات والبيانات تعالج مشكلات أخرى تمامًا.
بطاقات مراجعة سريعة
تحقق من فهمك
دالة خسارتك سطح طويل شبه مستوٍ ثم هبوط حادّ. ماذا تتوقّع من معدّل ثابت صغير؟
تقدّمًا بطيئًا مملًّا على السطح المستوي، لأن الميل هناك قريب من الصفر فالخطوة تصير ضئيلة، ثم قفزة عنيفة عند الهبوط الحادّ حيث يكبر الميل فجأة. هذا بالضبط سبب وجود جداول معدّل التعلّم وقصّ الميل، وستقابل الاثنين بالاسم في مرحلة التعلّم العميق.
لماذا وصل المعدّل 0.5 إلى القاع في خطوة واحدة بالضبط في هذه الدالة؟
لأن الميل 2 * (w - 3)، فالخطوة 0.5 × 2 × (w - 3) تساوي المسافة إلى القاع بالضبط. هذا خاص بهذه الدالة البسيطة ولا يحدث في الشبكات الحقيقية.
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
توثيق رسمي1
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.