انتقل إلى المحتوى الرئيسي

الوحدة 3 — الانتشار الأمامي وحساب الخسارة

الانتشار الأمامي هو مسار البيانات من المُدخَل إلى التوقّع. وهو الجزء اليسير من التعلّم العميق، وينبغي إتقانه إتقانًا تامًّا قبل الشروع في الانتشار الخلفي الذي ليس إلّا قراءته بالمقلوب.

الطبقة جداء مصفوفي

وصفت الوحدة 1 عصبونًا واحدًا. أمّا الطبقة فتحسب جميع عصبوناتها دفعة واحدة، والكتابة المصفوفية تجعل ذلك طبيعيًا. من أجل طبقة \ell:

z()=W()a(1)+b(),a()=f(z())z^{(\ell)} = W^{(\ell)} a^{(\ell-1)} + b^{(\ell)}, \qquad a^{(\ell)} = f\left(z^{(\ell)}\right)

حيث a(1)a^{(\ell-1)} مُخرَج الطبقة السابقة، وW()W^{(\ell)} مصفوفة الأوزان، وb()b^{(\ell)} شعاع الانحيازات، وff دالة التنشيط مُطبَّقة حدًّا بحدّ.

أبعاد المصفوفات هي أوّل مصدر للأخطاء عمليًا، ودقيقتان من التحقّق توفّران كثيرًا. فإذا كانت الطبقة السابقة تحوي nn عصبونًا والطبقة الحالية mm، فإنّ W()W^{(\ell)} من القياس m×nm \times n، وb()b^{(\ell)} من القياس mm، والمُخرَج a()a^{(\ell)} من القياس mm. فعدد وسائط الطبقة يساوي إذن m×n+mm \times n + m.

وتفسّر هذه الصيغة الأخيرة حجم النماذج. فطبقة من 1000 عصبون تتبعها أخرى من 1000 عصبون تحوي وحدها مليون وزن. وهذا أيضًا ما يجعل الطبقات المتّصلة اتّصالًا كاملًا لا تُحتمل سريعًا على الصور، وما يجعل الشبكات الالتفافية في الدورة 10 تتشارك أوزانها.

المعالجة بالحزم

عمليًا لا نُمرّر مشاهدة واحدة أبدًا. بل نُكدّس BB مشاهدة في مصفوفة XX من القياس B×nB \times n، فيصير الحساب:

Z=XW+bZ = X W^{\top} + b

والنتيجة من القياس B×mB \times m: سطر لكلّ مشاهدة. وسببان يجعلان هذا لا غنى عنه. الأوّل عتادي: فالمعالِجات الرسومية مصمّمة للعمليات المصفوفية المتوازية على نطاق واسع، ومعالجة 256 مشاهدة دفعة واحدة تكاد تكون بسرعة معالجة واحدة. والثاني إحصائي، وستعود إليه الوحدة 5: فالتدرّج المتوسّط على حزمة أقلّ ضجيجًا بكثير من تدرّج مشاهدة منفردة.

import numpy as np

def propagation_avant(X, poids, biais):
"""يعبر شبكة متصلة اتصالا كاملا مع ReLU في الطبقات المخفية."""
a = X
for i, (W, b) in enumerate(zip(poids, biais)):
z = a @ W.T + b
derniere = i == len(poids) - 1
a = z if derniere else np.maximum(0, z) # مخرج خطي في النهاية
return a

هذا الكود، في عشرة أسطر، هو الانتشار الأمامي بأكمله. وكلّ صعوبة التعلّم العميق في مكان آخر.

الخسارة تحوّل الخطأ إلى عدد نُصغّره

تنتج الشبكة توقّعًا؛ وتقيس دالة الخسارة بعده عن الحقيقة، في عدد واحد يسعى التحسين إلى تقليصه. واختيارها ينبع من المهمّة، تمامًا كتنشيط المُخرَج في الوحدة السابقة — ويجب أن يتوافق الاثنان.

من أجل الانحدار، متوسّط مربّع الخطأ:

L=1Bi=1B(yiy^i)2\mathcal{L} = \frac{1}{B}\sum_{i=1}^{B}\left(y_i - \hat{y}_i\right)^2

يعاقب مربّع الفارق، أي يعاقب الأخطاء الكبيرة عقابًا ثقيلًا — وهذا مفيد إن كانت خطيرة، ضارّ إن كانت البيانات تحوي قيمًا شاذّة. وحينها يكون متوسّط الخطأ المطلق أو خسارة هوبر، التربيعية قرب الصفر والخطّية بعده، أكثر متانة.

من أجل التصنيف، الإنتروبيا المتقاطعة. في الحالة الثنائية:

L=1Bi=1B[yilogy^i+(1yi)log(1y^i)]\mathcal{L} = -\frac{1}{B}\sum_{i=1}^{B}\left[y_i \log \hat{y}_i + (1 - y_i)\log(1 - \hat{y}_i)\right]

ويجدر فهم سلوكها بدل حفظها. فإذا كان الصنف الحقيقي 1 وتوقّع النموذج 0,99، فالحدّ log(0,99)\log(0{,}99) يكاد يكون معدومًا: فالخسارة ضعيفة. وإن توقّع 0,01، فإنّ log(0,01)4,6\log(0{,}01) \approx -4{,}6: فالخسارة قوية. وإن أكّد النموذج 0 بيقين والجواب 1، فالخسارة تسعى إلى ما لا نهاية.

وهذه هي الخاصية الحاسمة: الإنتروبيا المتقاطعة تعاقب اليقين الخاطئ عقابًا شديدًا. فالنموذج الذي يُخطئ متردّدًا أقلّ عقابًا بكثير من النموذج الذي يُخطئ قاطعًا. وهذا ما يُنتج احتمالات أفضل معايرة، ولهذا لا نُصنّف بخطأ تربيعي.

مصيدة عددية شائعة

حساب سوفت‌ماكس ثم لوغاريتمها على انفصال يُسبّب طفحًا: فأُسّ نتيجة كبيرة ينفجر، ولوغاريتم الصفر غير موجود. لذا تقدّم جميع المكتبات نسخة مدموجة ومستقرّة — CrossEntropyLoss في PyTorch، وfrom_logits=True في Keras. وهي تنتظر النتائج الخام للطبقة الأخيرة، بلا سوفت‌ماكس. وتطبيق سوفت‌ماكس ثم هذه الخسارة خطأ متواتر: فتُطبَّق سوفت‌ماكس مرّتين، ويتعلّم النموذج تعلّمًا سيّئًا، ولا شيء يُنبّه إلى ذلك.

الخلاصة

  • تحسب الطبقة z=Wa+bz = Wa + b ثم تُطبّق التنشيط؛ وتحوي الطبقة m×n+mm \times n + m وسيطًا، وهذا يفسّر حجم النماذج.
  • المعالجة بالحزم تُكدّس المشاهدات: لا غنى عنها لتوازي المعالج الرسومي ولتقليص ضجيج التدرّج.
  • تُحوّل الخسارة الخطأ إلى مقدار سلّمي نُصغّره؛ الخطأ التربيعي للانحدار، والإنتروبيا المتقاطعة للتصنيف.
  • تعاقب الإنتروبيا المتقاطعة اليقين الخاطئ، وهذا يُنتج احتمالات أفضل معايرة؛ ويجب أن تستقبل الخسارة النتائج الخام، لا سوفت‌ماكس مُطبَّقة سلفًا.

الوحدة التالية: الانتشار الخلفي، حيث نصعد المسار نفسه لنعرف مقدار تصحيح كلّ وزن.