PyTorch / حالة التدريب وواجهات المعمارية / الدرس 8
تراكم التدرج وقصه وجداول التعلم
احفظ ترجيح الهدف وحدود خطوة المحسن عند تغيير معالجة الدفعات الجزئية.
في هذه الصفحة
أهداف الدرس
- تراكم مشتقات موزونة بالمشاهدات عند معاملات ثابتة.
- تطبيق قص المعيار على التدرج المجمع المقصود.
- تقديم المجدول وفق ساعة تحديثه الموثقة.
لا تعيد الدفعات الجزئية تعريف الهدف تلقائياً
يمكن معالجة دفعة منطقية كبيرة بأجزاء أصغر متعددة مع بقاء المعاملات ثابتة. لإعادة هدف متوسط لكل مثال، راكم مجاميع الخسائر المقصودة مقسومة على إجمالي عدد الأمثلة الصالحة، أو استخدم ترجيحاً مكافئاً جبرياً. يعطي متوسط متساوٍ لمتوسطات أجزاء غير متساوية هدفاً آخر. يقسم المثال مجموعي الجزأين على ثلاثة، بما فيه الجزء الأخير ذو المثال الواحد. يتعلق التكافؤ بالحساب المعلن؛ فقد يمنع تطبيع يعتمد على الدفعة أو عمليات عشوائية أو حالة أخرى تطابق نموذج كامل مع مرور أكبر واحد تماماً.
صفر وحدث عند الحد المنطقي
يبدأ النموذج العددي التوضيحي من الصفر ويعالج ثلاثة مدخلات ثابتة في جزأين من اثنين وواحد. تحدث zero_grad مرة قبل التراكم، وoptimizer.step مرة بعد استدعائي backward. يقيّم التحديث بينهما المشتقة الثانية عند حالة معاملات أخرى، فينشئ مساراً مختلفاً. مشتقة الدفعة الكاملة سالب أربعة عشر مقسوماً على ثلاثة. احفظ العدد الصالح الفعلي لنافذة التراكم الأخيرة الناقصة بدلاً من عدد ثابت من الاستدعاءات. سجل هل يستهلك تحديث متجاوز البيانات أو يقدم جدولاً وفق السياسة المختارة.
import torch
w = torch.nn.Parameter(torch.tensor(0.0,dtype=torch.float64,device="cpu"))
x = torch.tensor([1.0,2.0,3.0],dtype=torch.float64,device="cpu")
y = x.clone()
optimizer = torch.optim.SGD([w],lr=0.1)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer,step_size=1,gamma=0.5)
optimizer.zero_grad(set_to_none=True)
for start,end in [(0,2),(2,3)]:
(0.5*((w*x[start:end]-y[start:end])**2).sum()/len(x)).backward()
print(f"accumulated={w.grad.item():.6f}")
norm = torch.nn.utils.clip_grad_norm_([w],max_norm=1.0,error_if_nonfinite=True)
optimizer.step()
scheduler.step()
print(f"preclip norm={norm.item():.6f}; weight={w.item():.6f}")
rate = optimizer.param_groups[0]["lr"]
print(f"next rate={rate:.6f}")
accumulated=-4.666667
preclip norm=4.666667; weight=0.100000
next rate=0.050000
تستخدم مجاميع الجزأين مقام الأمثلة الثلاثة الكامل، ثم قصاً وتحديثاً مجمعين واحدين؛ والقيم المعروضة مقربة ومشتقة لا نتائج torch منفذة.
يحول قص المعيار التدرج قبل استهلاكه
تحسب clip_grad_norm_ معياراً عبر تدرجات المعاملات المقدمة كمتجه مجمع وتعدل تلك التدرجات موضعياً. تصف القيمة المعادة المعيار الكلي المستخدم قبل القص، لا تحديث المعامل النهائي. يطلب المثال خطأ عند معيار غير منتهٍ وحداً واحداً. يقرب العرض الخطوة المشتقة إلى 0.100000؛ لكن تثبيت التنفيذ ودقة العائم يعنيان عدم افتراض مساواة رياضية تامة. قص كل عنصر مستقلاً تحويل آخر. لا يصلح القص أهدافاً باطلة أو مسار رسم مفقوداً أو حساباً أمامياً غير منتهٍ أصلاً.
للمجدول حدث وحالة محددان
يستخدم البرنامج StepLR بحدث جدولة واحد لكل تحديث محسن، ويخفض المعدل بعد ذلك التحديث إلى النصف للخطوة التالية. تستخدم جداول أخرى ساعات مختلفة أو مقياس تحقق؛ فاقرأ الواجهة الفعلية وعقد ترتيب الاستدعاء. يؤدي التقديم لكل جزء إلى تسريع هذا الجدول أكثر من المطلوب. احفظ حالة المحسن والمجدول المناسبة للمتابعة وافحص معدلاتهما المسترجعة بانتقال معلوم. عند استخدام تحجيم خسارة في إجراء آخر، ألغ التحجيم عند حده الموثق قبل قص مقصود للتدرجات غير المحجمة؛ ولا يستخدم المثال محجماً أو بيئة دقة مختلطة.
استخدم الحساب لكشف تغير ترجيح عرضي
يقارن المرافق متوسط المشاهدات المقصود بمتوسط متساوٍ لمتوسطَي جزأين ويحسب قص معيار عددي مثالياً. لا يتحقق من تثبيت PyTorch الداخلي أو عداداته أو مخازن تدرجاته. افحص الأعداد الصالحة ومعايير التدرج وتغيرات المعامل الفعلية والمعدل المطبق في كل خطوة ببيئة مدعومة. أدرج نافذة نهائية غير متساوية وسياسة انعدام الأهداف الصالحة وتدرجاً غائباً عمداً. يبقى برنامج الإطار غير منفذ لغياب torch؛ ولم يشغل إلا حساب المكتبة القياسية المعطى دون قياس إنتاجية التدريب أو ذاكرته.
gradients = [-1.0,-4.0,-9.0]
combined = sum(gradients)/len(gradients)
mean_of_means = ((gradients[0]+gradients[1])/2+gradients[2])/2
scale = min(1.0,1.0/abs(combined))
clipped = combined*scale
print(f"sample mean={combined:.6f}")
print(f"mean of microbatch means={mean_of_means:.6f}")
print(f"mathematical clipped step={-0.1*clipped:.6f}")
sample mean=-4.666667
mean of microbatch means=-5.750000
mathematical clipped step=0.100000
يفحص المرافق ترجيح الهدف الدقيق وقص معيار عددي مثالي. ولا يعيد ثابت تثبيت التنفيذ أو عدادات المجدول أو تخزين تدرج الإطار.
الأخطاء الشائعة وإصلاحها
خالف التراكم متوسط الدفعة المنطقية المقصود
- لماذا يحدث؟
- تلقت متوسطات أجزاء غير متساوية أوزاناً متساوية.
- كيف تصلحه؟
- راكم البسط المقصود باستخدام المقام الصالح الفعلي.
- كيف تتجنب تكراره؟
- اختبر مشاهدتين ثم واحدة مقابل هدف كامل صريح.
خفض المجدول المعدل قبل التحديثات المقصودة
- لماذا يحدث؟
- تقدم لكل جزء بدلاً من الحدث المعلن.
- كيف تصلحه؟
- قدمه وفق ساعة تحديثه أو مقياسه الموثقة.
- كيف تتجنب تكراره؟
- سجل عدادي الجزء وخطوة المحسن معاً.
بدا القص غير متسق بعد تغيير سياسة الدقة
- لماذا يحدث؟
- طبق الحد على تدرج ذي مقياس مختلف.
- كيف تصلحه؟
- راجع التراكم وأي إلغاء تحجيم والقص وترتيب التحديث معاً.
- كيف تتجنب تكراره؟
- قارن تدرجاً مجمعاً صغيراً معلوماً وفق السياسة الصريحة.
اختبر فهمك
1. لماذا متوسط متوسطات الجزأين غير الموزون -5.75 لا -14/3؟
اعرض الحل المشروح
متوسط أول مشتقتين -2.5 ومشتقة المفرد -9. يساوي إعطاء المتوسطين وزناً متساوياً (-2.5-9)/2=-5.75. يجمع ترجيح المشاهدات بدلاً من ذلك -14 ويقسم على ثلاثة. كلا الحسابين صحيح، لكن واحداً فقط يطابق هدف متوسط الأمثلة المعلن.
2. ما الذي يخبرك به معيار دالة القص المعاد هنا؟
اعرض الحل المشروح
يصف التدرج المتراكم المقدم قبل القص، ونحو قيمته 4.666667. ليس معيار الأوزان بعد التحديث أو ضماناً لحجم خطوة المحسن النهائية لكل خوارزمية. يجعل مثال SGD العددي البسيط التحديث اللاحق مفهوماً بصورة مستقلة.
أهم ما تعلمته
- احفظ البسط والمقام عبر الدفعات الجزئية.
- اقص التدرج المقصود عند حد موثق.
- حالة المجدول وساعة التحديث جزء من إجراء التدريب.