التعلم العميق / التمثيل وأدلة القبول / الدرس 16
الدقة والذاكرة والكفاءة
ميز بين الأعداد الرياضية والصيغ العددية والقياسات في بيئة تنفيذ فعلية.
في هذه الصفحة
أهداف الدرس
- شرح التقريب والمدى وتحجيم الخسارة.
- بناء تقدير صريح لذاكرة التدريب.
- تقييم الكفاءة مع تثبيت عقد الصحة.
للصيغة العددية مدى ودقة
تخزن الأعداد العائمة إشارة وأساً وجزءاً دالاً. يحدد عرض الأس مدى المقادير، وتحدد دقة الجزء الدال تباعد الأعداد قرب قيمة معينة. قد توفر الصيغة الأصغر الذاكرة لكنها تفقد فروقاً صغيرة أو تفيض عند قيم تمثلها صيغة أوسع. تختلف صيغ الستة عشر بتاً، فلا يكفي عرض البتات لوصفها. يتوقف الاستقرار أيضاً على العمليات التي تجمع بدقة أعلى. وثق صيغ المعاملات والتنشيطات والاختزال والتدرجات وحالة المحسن بدلاً من وصف الإجراء كله بدقة مبهمة واحدة.
افحص ضياع تحديث قابل للعرض
يحزم المثال عدداً بصيغة binary16 عبر struct ثم يفكه. تظهر إضافة 0.0001 إلى الواحد في حساب Python المعتاد، لكن التقريب إلى الصيغة الصغيرة يفقد الزيادة. يوضح ذلك الحاجة إلى تجميع تحديثات بدقة أوسع ولو استخدم المرور الأمامي صيغة أصغر. لا ينفذ البرنامج نواة مصفوفة نصفية أو تدريباً مختلطاً أو عملية GPU. يثبت خاصية تخزين للقيمة المحددة، ولا يقيس سرعة أو يصف سياسة تحويل تلقائي في إطار معين.
import struct
def half(value):
return struct.unpack("e", struct.pack("e", value))[0]
w, delta = 1.0, 0.0001
print(f"full update={w+delta:.7f}")
print(f"half update={half(w+delta):.7f}")
print("half bytes", struct.calcsize("e"))
full update=1.0001000
half update=1.0000000
half bytes 2
يفقد تقريب binary16 الزيادة الصغيرة قرب الواحد؛ وهذا عرض تخزين لا حساب مسرع.
لتحجيم التدرج حد جبري واضح
يضرب تحجيم الخسارة بمعامل موجب مشتقاتها بالمعامل نفسه في الحساب الدقيق. يجب إلغاء التحجيم قبل تحديث المحسن المعتاد ما لم تُعرّف خوارزمية مختلفة عمداً. قد يحفظ التحجيم تدرجات صغيرة في حسابات محدودة المدى، لكنه لا يصلح مدخلات غير صالحة أو صيغة أمامية غير مستقرة. تحتاج التدرجات غير المنتهية سياسة تجاوز أو استرداد. يغير قص التدرج قبل إلغاء تحجيمه الحد الفعلي. وتهم حالة التحجيم التكيفية ووقوع التحديث عند الجدولة والاستئناف.
احسب كل فئة ذاكرة مسماة
يعد المثال الأوزان والتدرجات ومصفوفتي محسن مفترضتين وتنشيطاً محفوظاً واحداً. يغفل عمداً تنشيطات أخرى ومساحات عمل وكائنات الإطار وحجوزات المخصص ونسخ الدقة الإضافية. لذلك لا يتنبأ عدد المعاملات وحده بذروة الذاكرة. يزيد حجم الدفعة كثيراً من التنشيطات مع ثبات المعاملات، وقد تنمو درجات الانتباه تربيعياً مع الطول في تنفيذ كثيف. يقايض حفظ نقاط التنشيط التخزين بإعادة الحساب ويجب أن يحافظ على العشوائية والحالة وفق التنفيذ. هذه تحليلات وليست قياسات فعلية.
parameters = 1000
weight_bytes = parameters * 4
gradient_bytes = parameters * 4
optimizer_bytes = parameters * 2 * 4
activation_bytes = 8 * 16 * 4
print("weights", weight_bytes)
print("assumed training total", weight_bytes+gradient_bytes+optimizer_bytes+activation_bytes)
print("double batch activations", 2*activation_bytes)
weights 4000
assumed training total 16512
double batch activations 1024
يفترض العدد أوزاناً وتدرجات ومصفوفتي محسن float32 وتنشيطاً واحداً، ويغفل تخزين التنفيذ الإضافي.
قس التحسن مع ثبات حدود المهمة
افحص الدقة الأقل أو الدفعة أو النواة أو المعمارية الجديدة مقابل سماحيات الخرج وسلوك التقييم المطلوبين. قس ذروة الذاكرة والزمن على الجهاز الفعلي بإجراء متزامن مناسب، وأدخل المعالجة والنقل إذا كانا ضمن مسار المستخدم. وثق الأشكال والدفعة والإحماء والعتاد والبرمجيات وتوزيع الأزمنة. لا يجري المساق معيار عتاد؛ بل تعلم الأعداد والتقريب صياغة تجربة مبررة، وتترك أدوات قياس تنفيذ الأطر لمساقاتها المتخصصة.
الأخطاء الشائعة وإصلاحها
اختفى تحديث صغير عند التخزين منخفض الدقة
- لماذا يحدث؟
- صغرت الزيادة عن التباعد العددي المحلي.
- كيف تصلحه؟
- استخدم تجميعاً أوسع مناسباً وافحص دلالات تحديثه.
- كيف تتجنب تكراره؟
- اختبر مقادير معاملات وزيادات ممثلة.
اشتد القص بعد تحجيم الخسارة
- لماذا يحدث؟
- قُص التدرج المحجم قبل إلغاء تحجيمه.
- كيف تصلحه؟
- ألغ التحجيم في موضعه الموثق قبل تطبيق الحد الأصلي.
- كيف تتجنب تكراره؟
- افحص ترتيب الدقة والقص والتحديث معاً.
تجاوزت الذاكرة حجم الأوزان كثيراً
- لماذا يحدث؟
- أُغفلت التنشيطات والتدرجات وحالة المحسن والتخزين المؤقت.
- كيف تصلحه؟
- ابن ميزانية شاملة وقسها.
- كيف تتجنب تكراره؟
- وثق الافتراضات وقارن التقدير بالذروة الفعلية.
اختبر فهمك
1. إذا ضُربت الخسارة في 128، فكيف يدخل التدرج إلى التحديث المعتاد نفسه؟
اعرض الحل المشروح
اقسم التدرج المحجم على 128 قبل التحديث لاستعادة المشتقة في الحساب الدقيق. تبقى معالجة الدقة والقيم غير المنتهية ضرورية. لا تغير معدل التعلم آلياً دون مراعاة القص وحالة المحسن وسياسة التحجيم.
2. لماذا لا يضمن تنصيف بايتات الأوزان تنصيف ذروة الذاكرة؟
اعرض الحل المشروح
الأوزان فئة واحدة بجانب التدرجات وحالة المحسن والتنشيطات ومساحات العمل وكلفة التنفيذ. قد تبقى بعضها بدقة أوسع وتتغير أخرى مع الدفعة أو الطول. قدر الفئات وقس البيئة الفعلية؛ فنسبة حجم ملف الأوزان ليست قياساً لذروة التدريب.
أهم ما تعلمته
- يختلف مدى الصيغة عن دقتها.
- حافظ على اتساق التحجيم والقص وترتيب التحديث.
- تحتاج الأعداد التحليلية قياساً قبل ادعاءات الأداء.