PyTorch / أسس الموتر والتدرج والوحدة / الدرس 4
الخسائر والأهداف والاختزال
طابق عقد مدخل خسارة PyTorch مع معنى الهدف وأبعاده ونوعه العددي وترجيحه.
في هذه الصفحة
أهداف الدرس
- تمييز الدرجات الخام عن الاحتمالات والقرارات النهائية.
- تحديد أشكال أهداف فهارس الفئات والثنائي والانحدار.
- فحص الخسائر غير المختزلة ومقامات الاختزال المقصودة.
ترمز واجهة الخسارة إلى مهمة محددة
تستقبل CrossEntropyLoss غالباً درجات متعددة الفئات غير مطبعة وأهداف فهارس فئات صحيحة وفق العقد المعروض هنا. لدفعة B وفئات متنافية C يكون شكل الدرجات (B,C) وشكل أهداف الفهارس (B,) بنوع صحيح مناسب مثل torch.long. توثق الواجهة عقداً منفصلاً لأهداف احتمالية، يحتاج معنى توزيع وفحصاً مقصودين؛ فلا تستنتج ملاءمة أي هدف عائم. يبقى ترتيب الفئات وإتاحة الهدف جزءاً من عقد البيانات. لا يثبت نجاح الاستدعاء أن فهارس الوسوم تشير إلى الفئات المقصودة.
استخدم خسائر الدرجات الخام وفق توثيقها
تجمع CrossEntropyLoss حساب الاحتمال اللوغاريتمي وسالب لوغاريتم الترجيح المناسبين، فيغير تطبيق softmax قبلها الدالة التي تستقبلها. تجمع BCEWithLogitsLoss بدلاً منها السيغمويد والإنتروبيا المتقاطعة الثنائية لهدف عائم بالشكل نفسه، بما فيه وسوم ثنائية مستقلة عندما تكون تلك المهمة. ولا تتبادل مع هدف فهرس متعدد الفئات المتنافية. تقارن خسائر انحدار مثل MSELoss قيماً عددية وفق شكل مزدوج ووحدة مقصودين. لخرج احتمالي وقرار argmax ودرجة تدريب قابلة للتفاضل أدوار مختلفة، حتى عندما يحسب أحدها من الآخر.
افحص خسارة كل مثال قبل اختيار التجميع
يستخدم البرنامج التوضيحي صفين من درجات float64 وفهرسي فئة long، ثم يطلب reduction="none". يرجح كل صف فئته الصحيحة باثنين، فتساوي خسارتاهما log(1+exp(-2))، أي نحو 0.126928. شكل الخسارة (2,) ويحفظ قيمة لكل مثال. يتجنب المثال غير الموزون أوزان الفئات والوسوم المتجاهلة كي يكون الحساب واضحاً بصورة مستقلة. قد تبقى أبعاد إضافية قبل الاختزال في مهمة مكانية أو تسلسلية. افحص الشكل الدقيق غير المختزل بدلاً من افتراض أن متوسطاً مفرداً يضمن حداً مزدوجاً صحيحاً لكل مشاهدة.
import torch
from torch import nn
logits = torch.tensor([[2.0,0.0],[0.0,2.0]], dtype=torch.float64, device="cpu")
target = torch.tensor([0,1], dtype=torch.long, device="cpu")
losses = nn.CrossEntropyLoss(reduction="none")(logits, target)
print("loss shape", tuple(losses.shape))
print("per example", [round(x,6) for x in losses.tolist()])
print(f"mean={losses.mean().item():.6f}")
loss shape (2,)
per example [0.126928, 0.126928]
mean=0.126928
تحدد أهداف فهارس الفئات عمود الدرجة الصحيح. يعطي حساب لوغاريتم مجموع الأسس القيم المعروضة، ولم تنفذ وحدة خسارة.
يحدد المقام سؤال الترجيح
يحسب المرجع القياسي خسارة فئة مستقرة ومتوسط موضعين صالحين، مع استبعاد قيمة حشو اعتباطية. يخصص المتوسط عبر عناصر الموتر كلها أو الأمثلة أو الرموز الصالحة أوزاناً مختلفة. قد تغير أوزان الفئات والأهداف المتجاهلة مقام خسارة المكتبة الموثق؛ فقارن الصيغة بدلاً من القسمة على عدد دفعة مريح بعد ذلك. عالج مدخلاً بلا أهداف صالحة وفق سياسة صريحة. يجب ألا يحسن تغير حشو السلسلة مقياس الرموز الصالحة بمجرد إضافة أصفار إلى المقام.
from math import exp, log
z = [2.0,0.0]
m = max(z)
class_loss = m+log(sum(exp(x-m) for x in z))-z[0]
values, valid = [0.2,1.4,99.0], [True,True,False]
numerator = sum(x for x,ok in zip(values,valid) if ok)
denominator = sum(valid)
assert denominator > 0
print(f"class loss={class_loss:.6f}")
print(f"valid mean={numerator/denominator:.6f}")
class loss=0.126928
valid mean=0.800000
يفحص المرجع العددي المنفذ حساب تصنيف مستقراً ومقام مواضع صالحة معلناً؛ ولا يختبر ترجيح خسائر PyTorch أو سلوك ignore_index.
اختبر الحالات الدلالية والاستقرار العددي معاً
احفظ أمثلة لدرجات متساوية وفئة صحيحة واثقة وفئة خاطئة واثقة وفهارس غير صالحة وأطوال سلاسل غير متساوية وقرارات حساسة للعتبة حيث يلزم. تحقق من خريطة الوسوم وافتراضات المدخل المنتهي قبل ضبط المحسن. انخفاض خسارة التدريب دليل عن الهدف المبرمج، لا تحسن تلقائي للمعايرة أو سلوك المجموعات الفرعية أو جودة قرار خارجي. يبقى مثال الإطار توضيحياً لغياب torch. ينفذ المرافق العددي المعطى فقط؛ ولم تشغل CrossEntropyLoss أو BCEWithLogitsLoss أو MSELoss أو تنفيذ أقنعة أو ملاءمة نموذج أثناء المراجعة.
الأخطاء الشائعة وإصلاحها
استقبلت CrossEntropyLoss درجات طبقت عليها softmax مسبقاً
- لماذا يحدث؟
- اختلط عقد الدرجات الخام بعرض الاحتمالات.
- كيف تصلحه؟
- مرر الدرجات الخام الموثقة لوضع الخسارة المختار.
- كيف تتجنب تكراره؟
- قارن صفاً معلوماً بحساب مستقل للوغاريتم مجموع الأسس.
عومل هدف ثنائي كمتجه فهارس متعدد الفئات
- لماذا يحدث؟
- جُمعت عقود مختلفة للمهمة والشكل دون تمييز.
- كيف تصلحه؟
- اختر الخسارة من معنى الوسم وتحقق من الشكل والنوع.
- كيف تتجنب تكراره؟
- اختبر مثالاً موسوماً كاملاً قبل إضافة الدفعات.
غير الحشو المتوسط المعلن للأهداف الصالحة
- لماذا يحدث؟
- لم يطابق قناع البسط سياسة المقام.
- كيف تصلحه؟
- اجمع الحدود الصالحة وعددها المقصودين.
- كيف تتجنب تكراره؟
- اختبر أطوالاً مختلفة وحد غياب كل هدف صالح صراحة.
اختبر فهمك
1. لماذا قيم الهدف [0,1] من نوع torch.long في البرنامج؟
اعرض الحل المشروح
هي فهارس لاختيار الفئة الصحيحة في كل صف من صفين، وليست احتمالات يراد الانحدار نحوها. يختار الصف الأول العمود صفر والثاني العمود واحد. يحتاج بديل الأهداف الاحتمالية شكلاً وعقد توزيع آخرين؛ ولا يحدد تغيير النوع وحده تلك المهمة.
2. خسارتا رمزين صالحين 0.2 و1.4 مع موضع حشو. ما متوسطهما وما أثر القسمة على ثلاثة؟
اعرض الحل المشروح
المجموع الصالح 1.6 والعدد الصالح اثنان، فيعطي 0.8. تعطي القسمة على ثلاثة نحو 0.533333 وتجعل النتيجة معتمدة على الحشو المضاف. صرح بترجيح المشاهدة أو الرمز المختار وافحص اختزال المكتبة الفعلي عند وجود أوزان أو وسوم متجاهلة.
أهم ما تعلمته
- يتبع اختيار الخسارة معنى الهدف وتمثيل المدخل الموثق.
- افحص الشكل والقيم قبل الاختزال.
- الأقنعة والأوزان والمقامات أجزاء من الهدف.