خطوات الاستخدام
أدخل قيم التدرجات (gradient values): قم بإدخال قيم التدرجات المحسوبة من كل طبقة أو معلمة في الشبكة العصبية. هذه القيم تمثل اتجاه وحجم التحديثات التي ستطبق على الأوزان. يجب أن تكون قيم رقمية تفصل بينها فواصل. مثلاً: 0.5, -0.2, 1.3, -0.8. كلما زادت القيمة المطلقة، زاد تأثيرها على التحديث. إذا كانت القيم كبيرة جداً، قد تؤدي إلى عدم استقرار التدريب.
أدخل الحد الأعلى (clip threshold): هذا هو الحد الأقصى المسموح به للـ L2 norm الكلي لجميع التدرجات. يتم حساب L2 norm (المعيار الإقليدي) لجميع قيم التدرجات ثم مقارنته بهذا العتبة. إذا كان المعيار أكبر من العتبة، يتم قياس جميع قيم التدرجات بنفس النسبة لتقليص المعيار إلى قيمة العتبة. اختيار العتبة يعتمد على التجربة والمشكلة، وعادة ما يكون قيماً مثل 1.0 أو 5.0.
حساب المعيار الإقليدي (L2 norm): يحتسب الجذر التربيعي لمجموع مربعات جميع قيم التدرجات. رياضياً: ||g|| = sqrt(∑ g_i²). هذا يمثل المقدار الكلي للتدرجات.
مقارنة المعيار بالحد الأعلى: إذا كان ||g|| ≤ clip_threshold، لا يتم تعديل التدرجات. أما إذا كان ||g|| > clip_threshold، يتم تطبيق القص (clipping). في هذه الحالة، يتم ضرب كل تدرج بعامل القياس (scaling factor) = clip_threshold / ||g||. هذا يضمن أن المعيار الجديد يساوي clip_threshold، مع الحفاظ على اتجاهات التدرجات.
إخراج عامل القياس: بعد الحساب، تظهر النتيجة كعامل القياس الذي سيتم ضرب كل تدرج به. إذا لم يتم القص، يكون العامل 1. وإذا تم القص، يكون العامل أقل من 1. هذا العامل يستخدم في تحديث الأوزان بدلاً من التدرجات الأصلية.
أمثلة محلولة
تطبيقات عملية على قص التدرجات بخطوات الحل كاملة.
الحل
لنفترض أن لدينا قيم تدرجات من طبقتين: [2.0, -1.5, 3.0, -2.5, 1.2]. أولاً، نحسب المعيار الإقليدي: sqrt(2.0² + (-1.5)² + 3.0² + (-2.5)² + 1.2²) = sqrt(4 + 2.25 + 9 + 6.25 + 1.44) = sqrt(22.94) ≈ 4.7896. إذا اخترنا clip_threshold = 3.0، فإن 4.7896 > 3.0، لذا نحتاج إلى القص. عامل القياس = 3.0 / 4.7896 ≈ 0.6264. يتم ضرب كل تدرج في 0.6264: ينتج قيم جديدة: [1.2528, -0.9396, 1.8792, -1.5660, 0.7517]. المعيار الجديد = 3.0 بالضبط. تستخدم هذه القيم في تحديث الأوزان، مما يمنع القفزات الكبيرة ويحسن الاستقرار.
الحل
في شبكة RNN ذات 10 خطوات زمنية، قد تتراكم التدرجات بشكل هائل. لنفترض أن لدينا 10 تدرجات: [0.1, -0.05, 100, -200, 0.2, -0.15, 300, -400, 0.02, -0.01]. الحساب: مربع كل قيمة: 0.01, 0.0025, 10000, 40000, 0.04, 0.0225, 90000, 160000, 0.0004, 0.0001. المجموع = 10000 + 40000 + 90000 + 160000 + 0.0755 = 300,000.0755. المعيار = sqrt(300,000.0755) ≈ 547.72. إذا كان clip_threshold = 5.0، فالعامل = 5 / 547.72 ≈ 0.00913. هذا يعني أن جميع التدرجات ستقلّص بشدة: التدرج -400 يصبح -400 × 0.00913 ≈ -3.65، و 300 يصبح 2.74، أي أن المعيار الجديد 5.0 بالضبط مع بقاء الاتجاه. هذه التقنية أساسية لتدريب الشبكات العميقة بنجاح.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة قص التدرجات.
تدرجات [2,-1.5,3,-2.5,1.2] مع عتبة 3: عامل 0.6264
- قيم التدرجات (مفصولة بفواصل)
- 2.0, -1.5, 3.0, -2.5, 1.2
- عتبة القص
- 3
متجه 3-4-5 عند عتبة 5: لا قص، العامل 1 بالضبط
- قيم التدرجات (مفصولة بفواصل)
- 3, 4
- عتبة القص
- 5
نفس المتجه بعتبة 2.5: عامل 0.5 والمعياريصبح 2.5
- قيم التدرجات (مفصولة بفواصل)
- 3, 4
- عتبة القص
- 2.5
انفجار التدرجات في RNN: عامل 0.00913 يُنزل المعياريلى 5
- قيم التدرجات (مفصولة بفواصل)
- 100, -200, 300, -400, 0.1, -0.05, 0.2, -0.15, 0.02, -0.01
- عتبة القص
- 5