من أين تأتي ارتفاعات المتدرجات
دفعة مصغرة هادئة وأخرى صادمة
معظم الدفع المصغرة تنتج متدرجات ذات أحجام معقولة. خسارة الإنتروبيا المتقاطعة لنموذج يتناسب بالفعل تقريبًا مع البيانات تبقى في نطاق ضيق؛ الانتشار الخلفي يحمل تلك الإشارة إلى الخلف كمتدرجات بحجم مشابه.
بعض الدفع المصغرة لا تفعل ذلك. ثلاث مصادر لارتفاعات المتدرجات:
1. أمثلة خارجة عن المألوف. تسلسل واحد يحتوي على تركيبة رمز نادرة للغاية ينتج خسارة بعيدة عن المتوسط & تدرج بعيد عن المتوسط.
2. حالات حافة عددية. مقسوم صغير جداً في الـsoftmax، تطبيع طبقة ينتج NaN، فائض FP16. كل منها يمكن أن ينتج تدرجات أكبر بأوامر من المقياس النموذجي.
3. تحولات التوزيع. تبديل مصادر البيانات أثناء تشغيل تدريب واحد يصدم النموذج بتوزيع جديد. يعيد ANDREA ترتيب أوزان المصادر كل 7 إلى 42 خطوة من خلال الـbandit. كل تبديل هو تحول توزيع صغير.
ANDREA-120M v1: سلسلة الارتفاعات
لم يكن للإصدار v1 قص تدرجات. انتقالات المصادر كل 7 إلى 42 خطوة من الـbandit زودت النموذج بانفجارات قصيرة من repo-docs (هيكل قائم على القوائم)، ثم gutenberg (نثر طويل)، ثم hermes3-general (أسئلة وأجوبة). أنتج كل انتقال ارتفاعات في التدرجات: دفع كل ارتفاع الأوزان نحو مجذبون تالفون على مقياس 120M.
حقيقة تجريبية رئيسية. نجت ANDREA-12M من نفس اللص دون قص. المصفوفات الوزنية الأصغر تبقى قوية أمام صدمات التدرج؛ لا يمكن لباتش سيء واحد أن يدفع 12 مليون معلمة إلى جاذبية هاربة كما يفعل مع 120 مليون. يصبح القص أكثر أهمية مع توسع النموذج.
قص معيار L2 العام
خياران: لكل تنسور أو عام
طريقتان لتقييد أحجام التدرجات:
قص لكل تنسور. قم بقص كل تنسور تدرج بشكل مستقل. يتم قص تدرج الترميز إلى معياره الخاص؛ يتم قص تدرج الاهتمام إلى معياره الخاص. بسيط، لكنه يشوه المقاييس النسبية: ارتفاع صغير في تنسور واحد (الآن تدرج صفر) يقترن بتدرج هائل في آخر (غير متأثر).
قص معيار L2 العام. عامل جميع التدرجات كفيكتور كبير واحد. احسب المعيار L2 الإجمالي عبر كل معلمة. إذا تجاوز المعيار max_norm، قم بتوسيط كل تدرج بنفس العامل. يحافظ على الأحجام النسبية عبر التنسورات.
يستخدم ANDREA القص العالمي. أظهر Pascanu et al. (2013) تجريبيًا أن القص العالمي يتفوق على القص لكل تنسور في تدريب المحولات.
الرياضيات
احسب معيار L2 العالمي:
norm = sqrt(sum over all params of g_i^2)
إذا كان norm <= max_norm، تمر التدرجات دون تغيير. إذا كان norm > max_norm، قم بتوسيط كل تدرج بـ max_norm / norm:
g_i_clipped = g_i * (max_norm / norm)
بعد التوسيط، يصبح المعدل الجديد يساوي max_norm تمامًا. تستخدم ANDREA max_norm = 1.0.
حساب عامل التوسيط
لماذا يحتاج حساب معدل التدرج المتدرج إلى ثلاثة نوى
الخوارزمية البسيطة لا يمكن تشغيلها على وحدة معالجة الرسوميات
شيفرة زائفة لحساب معدل L2 العالمي:
total = 0
لكل معامل p:
لكل عنصر g في p.grad:
total += g * g
norm = sqrt(total)
على وحدة معالجة الرسوميات (GPU)، يفشل هذا الحلقة البسيطة لسببين:
1. التراكم التسلسلي. يجبر متراكم total واحد كل خيط على الانتظار لكل خيط آخر، مما يهزم التزامنية المتوازية للوحدة الرسومية.
2. المتجهات غير المتجانسة. يحتوي ANDREA-120M على متجهات بأشكال مختلفة تمامًا: تضمين (8449 x 768)، انتباه QKV (768 x 768)، تطبيع الطبقة (768). لا يمكن لنواة واحدة التكرار على جميع الأشكال بكفاءة.
خط أنابيب النواة الثلاثي لـ ANDREA
قسم العمل إلى ثلاث نوى CUDA في microgpt_cuda.cu:
النواة 1: k_grad_norm_partial. لحساب مجموع جزئي لمربعات كل متجه معلمة. يقلل كل كتلة خيوط من قطعة من المتجه؛ تُكتب النتائج إلى مخزن مؤقت صغير. التزامنية: كتلة واحدة لكل قطعة، مئات الكتل عبر جميع المتجهات.
النواة 2: k_grad_norm_final. تقليل مخزن الخدش إلى قيمة عددية واحدة. أخذ جذرها التربيعي. نواة صغيرة واحدة، تعمل في ميكروثانية.
النواة 3: k_grad_scale. إذا norm > max_norm، احسب scale = max_norm / norm & اضرب كل عنصر تدرج بـ scale. مرور واحد على كل تنسور التدرج، متوازي بشكل محرج.
الترتيب مهم: قبل آدم
تعمل خط أنابيب القص قبل تحديثات AdamW لـ m، v، أو أي معلمة. لماذا؟
تُغذي التدرجات المقصوصة متوسطات التحرك الأسي لـ AdamW. إذا سُمح للارتفاع المفاجئ بالتدفق إلى m & v، فسيُفسد تلك المتوسطات الجارية & يُبطئ التعافي لعديد من الخطوات بعد الارتفاع. القص قبل Adam يحصر تأثير الارتفاع في الخطوة السيئة الواحدة.
لماذا ثلاثة نوى، لا واحدة؟
كيف قتلت No-Clipping الإصدار v1
انتقالات مصدر Bandit كل 7 إلى 42 خطوة
يعمل bandit الخاص بـ ANDREA في مراحل. تستمر كل مرحلة 7، 14، 21، 28، أو 42 خطوة (مختارة عشوائيًا). عند حدود كل مرحلة، تتغير أوزان المصادر: ربما يقفز repo-docs من 0.1 إلى 0.6، ينخفض gutenberg من 0.4 إلى 0.1، يرتفع hermes3-general من 0.5 إلى 0.7.
كل انتقال هو صدمة توزيعية للنموذج. يرتفع الخسارة لفترة قصيرة. ترتفع التدرجات معها: نموذج كان يقلل الخسارة ضد نثر بنكهة gutenberg الآن يرى هياكل قوائم بنكهة repo-docs، وتحمل التدرجات إشارة تصحيحية يمكن أن تكون 10x أو 100x قيمة النطاق النموذجي.
وضع فشل v1
بدون القص، تدفقت تلك الارتفاعات الحادة في التدرجات بنسبة 10-100x إلى متوسطات m و v في AdamW. سمح التمهيد في AdamW باستمرار تأثير الارتفاع لعديد من الخطوات بعد الدفعة السيئة الفعلية. مع عدم وجود انحلال الوزن (Adam الأصلي في v1)، تراكمت تحديثات الوزن الناتجة عن الارتفاعات عبر المراحل حتى انحرفت الوزنات إلى جاذب تدهوري: سيطر logit رمز واحد على softmax، كان الإخراج المُقتبَس ذلك الرمز، احتوى سياق التدريب على ذلك الرمز، عزز التدرج ذلك الرمز. إغلاق التكرار.
استقرار v2
أضاف v2 القص مع max_norm = 1.0، إلى جانب AdamW وتسخين LR. تأثير الارتفاع على m و v محدود؛ لا يمكن للوزنات الانحراف أسرع من lr max_norm = 0.0003 1.0 = 0.0003 لكل معامل لكل خطوة في الذروة. لا تزال التحولات الطورية تنتج ارتفاعات، لكن تلك الارتفاعات مقيدة قبل وصولها إلى المحسن.
النتيجة: وصل v2 (بعد تصفية البيانات v2.5 وتلميع v3) إلى استرجاع واقعي، تماسك متعدد الفقرات، ودرجات خارجية 9.5/10 على عينات البيولوجيا ومعالجة الإشارات.
اقتران السعة-الهشاشة
نفس اللص. نفس البيانات. نفس الهايبربارامترز باستثناء القص. لماذا نجت 12M بدون قص بينما انهارت 120M؟
عوامل متراكمة اثنان:
1. مصفوفات الأوزان الأكبر تخزن مغناطيسين أكثر. إسقاط الانتباه 768x768 يحتوي على 590K معلمة؛ حتى الانحراف الدقيق لكل معلمة ينتج تغييرات هامة في سلوك الانتباه. إسقاط الانتباه 384x384 يحتوي على 147K معلمة ويبقى في فضاء فرعي أكثر تقييداً.
2. المزيد من الطبقات يعني تفاعلات مضاعفة أكثر. v3 تحتوي على 12 طبقة محول (مقابل 6 لـ12M). الارتفاعات تنتشر عبر 12 طبقة من اللامتعددات غير الخطية المتراكمة؛ كل طبقة يمكن أن تضخم انحراف الطبقة السابقة.
الهشاشة تتراكم مع السعة. القص يصبح إلزامياً فوق عتبة حجم معينة؛ ANDREA تضع تلك العتبة في مكان ما بين 12M و120M معلمة.
تشخيص تسلسل v1
أين آخر يُطبق القص؟
أنشطة مجاورة
ثلاثة إخوة يرتبطون بالقص:
- النشاط 10: AdamW. القص يحمي m وv في AdamW من تلوث الارتفاعات. بدون القص، دفعة سيئة واحدة تفسد حالة المحسن لأكثر من 50 خطوة.
- النشاط 11: تسخين LR. التسخين يخفف lr؛ القص يخفف g. معاً: في الخطوة 1، أسوأ تحديث معلمة هو lr_after_warmup max_norm = 1.5e-7 1.0 = 1.5e-7، مقابل 0.0003 * 50 = 0.015 بدون أي حارس. تقليل بنسبة 100,000 مرة في شدة التحديث المبكر في أسوأ الحالات.
- النشاط 14: اللصوص متعددي الأذرع. مرحلة اللصوص (من 7 إلى 42 خطوة) قصيرة خصيصًا لمنع أي مصدر واحد من السيطرة؛ القص هو ما يجعل تلك الانتقالات المتكررة آمنة.
القص هو أرخص فوز بالاستقرار في تدريب المحول: 3 نوى CUDA صغيرة، ميكروثانية لكل خطوة، تأثير حاسم على ما إذا كانت نماذج 120M+ تتقارب أو تنهار.