مدخل CrossEntropyLoss في PyTorch هو الدرجات غير المطبعّة، أي logits، لا احتمالات المخرج بعد Softmax. وفي هدف الفئة ذات الفهرس، تعادل العملية LogSoftmax ثم NLLLoss. [1]
الخلاصة السريعة
مرر نوع المدخل الذي تتوقعه الخسارة، وميز احتمال المخرج من توزيع الهدف؛ استدعاء يحمل الاسم نفسه لا يصحح معنى مصفوفتك.
- تتوقع الخسارة درجات خام قد تكون سالبة أو لا تجمع إلى 1؛ احتمال الفئة الصحيح في المثال يحسب منها ضمن العملية، لا يمرر كأنه الدرجة نفسها. [1]
- لدرجات ln(3) وln(2) وصفر وهدف الفئة الأولى، الخسارة نحو 0.69315؛ تمرير الاحتمالات 0.5 وثلث وسدس كدرجات يغيرها إلى نحو 0.94118 في هذا الحساب.
- يقبل الهدف فهارس فئات أو توزيعات احتمالية بشروط شكل ونوع مختلفة؛ لا يعني قبول توزيع هدف أن مدخل النموذج أصبح احتمالات. [1]
- مع هدف الفهرس، ignore_index يستبعد الحالة من الحساب ومتوسط الحالات غير المستبعدة؛ لا تعمم هذا الخيار على الهدف الاحتمالي، وحدد الوزن والتجميع. [1]
اقرأ عقد المدخل قبل الحساب
توثق الشفرة درجات غير مطبعّة للمدخل، وفهارس أو احتمالات للهدف؛ وفي حالة الفهرس تكتب سالب لوغاريتم احتمال الفئة بعد التطبيع. [1]
في مثالنا توجد ثلاث فئات مرتبة أ وب وج. نميز ثلاثة أشياء: درجات النموذج، والاحتمالات التي يمكن اشتقاقها منها، والهدف الذي نريد مقارنة المخرج به. وضعها في قوائم رقمية متشابهة لا يجعل أدوارها متبادلة.
سنحسب حالة واحدة دون أوزان فئات إضافية أو تنعيم هدف. هذه شروط اخترناها لتوضيح المدخل، وليست توصية عامة لإعداد التدريب.
ماذا يحدث إذا طبعت المخرج أولًا؟
نضع الدرجات ln(3) وln(2) وصفر، ونختار هدفًا من نوع الفهرس للفئة أ. أسس الدرجات 3 و 2 و 1، ومجموعها 6، فتكون احتمالاتها نصفًا وثلثًا وسدسًا. سالب اللوغاريتم الطبيعي للنصف نحو 0.69315.
إذا مررنا القائمة نصف وثلث وسدس بدل الدرجات، تعالجها الخسارة كدرجات جديدة. يصبح احتمال أ في هذا الحساب exp(0.5) مقسومًا على مجموع exp(0.5) وexp(1/3) وexp(1/6)، نحو 0.39017. الخسارة نحو 0.94118، وليست سالب لوغاريتم النصف.
لم يتغير اسم الفئة أو معنى الحقيقة؛ تغيرت الأعداد التي أخذت دور logits. ظهور رقم صالح للحساب لا يثبت أن المدخل وافق ما قصدناه. الحساب يدوي من الصيغة، ولم نستدع PyTorch أو نشغل تدريبًا.
| ما أعطي دور الدرجات؟ | الهدف | الخسارة التقريبية |
|---|---|---|
| ln(3)، ln(2)، صفر | أ | 0.69315 |
| 0.5، 1/3، 1/6 | أ | 0.94118 |
الهدف الاحتمالي لا يغير عقد المدخل
توثق الشفرة للفهارس نوع long وشكلًا دون محور الفئات، وللاحتمالات نوع float وشكل المدخل نفسه. [1]
يمكننا بدل هدف أ اختيار هدف موزع نصفه لأ ونصفه لب وصفره لج. هذا سؤال مختلف عن اختيار أ وحدها. مع الدرجات الأصلية وحسابنا غير المرجح، نحصل على نصف سالب لوغاريتم النصف مع نصف سالب لوغاريتم الثلث، نحو 0.89588.
الاحتمالات هنا تصف الهدف الذي اخترناه، بينما المخرج المدخل ما زال درجات ln(3) وln(2) وصفر. لا ننسب توزيع الهدف إلى حقيقة قطعية أو نحوله بصمت إلى فهرس الفئة الأكبر.
كيف تدخل الحالة المستبعدة في المتوسط؟
ينطبق ignore_index على هدف الفهارس فقط؛ ومع التجميع المتوسط تحسب الحالات غير المستبعدة. [1]
نفترض حالتين بالدرجات الأصلية، الأولى هدفها أ والثانية موسومة بالقيمة المستبعدة المعتمدة. مع عدم وجود أوزان فئات إضافية، متوسط الحالة المحتسبة وحدها يبقى 0.69315؛ لا نقسمه على اثنتين لأن السجل حمل صفين.
لا يعالج الاستبعاد صحة ملصق خاطئ أو يثبت لماذا غاب الهدف؛ ذلك قرار في تعريف البيانات. احفظ نوع المدخل والهدف والوزن والتجميع والاستبعاد في التقرير، ثم قارن ما حسبته فعلًا دون إسناد نتيجة تدريب لم ننفذه.
المصادر ومتابعة القراءة
- PyTorch 2.8.0: CrossEntropyLoss source (يفتح في نافذة جديدة)raw.githubusercontent.com
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
