التعلم العميق متوسط · Intermediate 12 دقيقة

دوال الخسارة

Loss Functions

كيف نقيس خطأ الشبكة: MSE وCross-Entropy وغيرهما، وعلاقتها بنوع المسألة.

تقدّمك في المسار0%

خسائر الانحدار

$$\text{MSE} = \frac{1}{n}\sum (y_i – \hat{y}_i)^2 \qquad \text{MAE} = \frac{1}{n}\sum |y_i – \hat{y}_i|$$

خسارة Huber تتصرف كـ MSE للأخطاء الصغيرة وكـ MAE للكبيرة، فتجمع النعومة ومقاومة القيم الشاذة.

خسائر التصنيف

الثنائي:

$$L = -\big[y\log p + (1-y)\log(1-p)\big]$$

متعدد الفئات (مع \(y\) متجه أحادي ساخن):

$$L = -\sum_{k} y_k \log p_k = -\log p_{\text{correct}}$$

في PyTorch

import torch, torch.nn as nn
logits = torch.tensor([[2.0, 0.5, -1.0]])   # مثال واحد، 3 فئات
target = torch.tensor([0])                 # الفئة الصحيحة
print(nn.CrossEntropyLoss()(logits, target))

bin_logit = torch.tensor([0.8]); bin_y = torch.tensor([1.0])
print(nn.BCEWithLogitsLoss()(bin_logit, bin_y))
print(nn.MSELoss()(torch.tensor([2.5]), torch.tensor([3.0])))

البيانات غير المتوازنة

  • أوزان للفئات: nn.CrossEntropyLoss(weight=...).
  • Focal Loss: تقلل وزن الأمثلة السهلة.
  • Dice Loss: شائعة في تقسيم الصور الطبية حيث تكون منطقة الآفة صغيرة مقارنة بالخلفية:

$$L_{\text{Dice}} = 1 – \frac{2\sum p_i g_i}{\sum p_i + \sum g_i}$$

الخسارة مقابل مقياس التقييم

الخسارة يجب أن تكون قابلة للاشتقاق لتدريب الشبكة، أما مقياس التقييم (مثل الدقة أو F1) فقد لا يكون كذلك. لذلك قد ندرب بـ Cross-Entropy ونقيّم بـ F1.

مصطلحات الدرس

الإنتروبيا التقاطعية Cross-Entropy
خسارة تصنيف تساوي سالب لوغاريتم الاحتمال الذي أعطاه النموذج للفئة الصحيحة.
اللوجيتات Logits
مخرجات الطبقة الأخيرة قبل تطبيق sigmoid أو softmax.
دالة الخسارة Loss Function
دالة تقيس مقدار خطأ تنبؤات النموذج مقارنة بالقيم الصحيحة، ويهدف التدريب إلى تقليلها.

الملخص

دالة الخسارة تحول الفرق بين تنبؤ الشبكة والقيمة الصحيحة إلى عدد يُراد تقليله. للانحدار تُستخدم MSE أو MAE أو Huber، وللتصنيف الثنائي Binary Cross-Entropy، ولتعدد الفئات Categorical Cross-Entropy، ولتقسيم الصور الطبية غير المتوازنة كثيراً ما تُستخدم Dice. في PyTorch تأخذ CrossEntropyLoss المخرجات الخام (logits) وتطبق softmax داخلياً لاستقرار عددي أفضل.

أسئلة مراجعة

  1. لماذا لا نطبق softmax قبل CrossEntropyLoss في PyTorch؟

    لأنها تطبق log-softmax داخلياً على اللوجيتات، وتطبيقه مرتين يعطي نتائج خاطئة.

  2. متى تفضل خسارة Huber على MSE؟

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

المصادر والمراجع

  1. PyTorch — Loss Functions
  2. Goodfellow et al. — Deep Learning, Ch. 6.2 Gradient-Based Learning
  3. Milletari, Navab & Ahmadi (2016) V-Net (Dice loss) — arXiv

إكمال الدرس