Google DeepMind تكتشف عيبًا في softmax: التدرّج ينعدم عند فارق 16,6

في 22 أكتوبر 2026 نشر جوناثان بارون ودان غنانابراغاسام ومايكل تشانن من Google DeepMind الورقة البحثية الأولية A Fix for Softmax and Cross-Entropy. وصف الباحثون فيها عيبين عدديين في التنفيذين القياسيين لـ softmax وcross-entropy في PyTorch وJAX، هما Softmax Collapse وSoftmax Cancellation. عندما يتجاوز فارق اللوجيت الصحيح عن منافسيه نحو 16,6، يتحول التدرّج في float32 إلى صفر آلي، مع أنه سالب رياضيًا. ويقوم الإصلاح على كتابة 1/(1+r) − 1 على الصورة −r/(1+r)، فتبقى القيمة الصغيرة في البسط ولا تضيع عند جمعها مع الواحد. • عتبة الفارق في bfloat16 نحو 5,54، وفي float16 نحو 7,62، وفي float64 نحو 36,74 • يُعالَج Cancellation في التقطير عبر expm1 وlog1p • يربط المؤلفون هذا العيب بتأثير Slingshot في Adam

معالج بواسطة الذكاء الاصطناعي من Habr AI؛ بتحرير Hamidun News
Google DeepMind تكتشف عيبًا في softmax: التدرّج ينعدم عند فارق 16,6
المصدر: Habr AI. كولاج: Hamidun News.
استمع للمقال
بطاقة الحقائق والأرقام
المعيارالتفاصيل
المصدر الأصليHabr AI ↗
رئيس التحرير
حقيقة رئيسية #1عتبة الفارق في bfloat16 نحو 5,54، وفي float16 نحو 7,62، وفي float64 نحو 36,74
حقيقة رئيسية #2يُعالَج Cancellation في التقطير عبر expm1 وlog1p
حقيقة رئيسية #3يربط المؤلفون هذا العيب بتأثير Slingshot في Adam

في 22 أكتوبر 2026 نشر جوناثان بارون ودان غنانابراغاسام ومايكل تشانن من Google DeepMind الورقة البحثية الأولية A Fix for Softmax and Cross-Entropy. حلّل المؤلفون عيبين عدديين في التنفيذين القياسيين لـ softmax وcross-entropy اللذين تستخدمهما PyTorch وJAX. العيب الأول، Softmax Collapse، يصفّر تدرّج الفئة الصحيحة في float32 عندما يتجاوز فارقها عن المنافسين نحو 16,6. أما الثاني، Softmax Cancellation، فيضيف تدرّجًا غير صفري في التقطير حتى لو طابق النموذج الطالب النموذج المعلّم تمامًا. ويمكن علاج العيبين بإعادة ترتيب حدود المعادلة دون تغيير الرياضيات نفسها.

أين يفقد float32 الرقم الصغير

الصيغة القياسية محمية أصلًا من الفيض: يُطرح الحد الأقصى من اللوجيتات فلا تنفجر الدالة الأسية. لكن الحماية من overflow لا تضمن دقة الفروق الصغيرة. لنأخذ اللوجيتات [20, 0] في float32. احتمال الفئة الثانية يساوي 2,06·10⁻⁹، وهذا الرقم يُخزَّن جيدًا. أما احتمال الفئة الأولى فيُقرَّب إلى 1 تمامًا، لأن إضافة 10⁻⁹ إلى الواحد لا تتسع لها سبعة أرقام معنوية. وبعد طرح الواحد يصبح تدرّج الفئة الصحيحة صفرًا، مع أنه ينبغي أن يكون نحو −2,06·10⁻⁹. في المقابل تبقى تدرّجات المنافسين كما هي، فلا يعود مجموع المشتقات صفرًا.

إذا رمزنا إلى فارق الإجابة الصحيحة بـ m، وإلى r = e^(−m)، فإن الصيغة المعتادة تحسب 1/(1+r) − 1، بينما تحسب الصيغة المصحّحة −r/(1+r). الدالة هي نفسها، لكن القيمة الصغيرة تقع في البسط ولا تُقرَّب مع الواحد. الاختبار في float32: عند m = 17 تعطي الصيغة المعتادة 0، وتعطي المصحّحة −4,14·10⁻⁸. وعند m = 20 تكون النتيجة −2,06·10⁻⁹، وعند m = 30 تكون −9,36·10⁻¹⁴.

تعتمد العتبات على عدد بتات الجزء الكسري في صيغة الحساب:

  • bfloat16، 7 بتات: عتبة الفارق ≈ 5,54؛
  • float16، 10 بتات: ≈ 7,62؛
  • float32، 23 بتًا: ≈ 16,63؛
  • float64، 52 بتًا: ≈ 36,74.

هذه عتبات حسابية خاصة بالعملية المعنية. وتخزين الأوزان بصيغة bfloat16 لا يعني أن softmax والخسارة تُحسبان بهذه الصيغة أيضًا: ففي الدقة المختلطة كثيرًا ما تُنفَّذ العمليات الحساسة في float32.

الطالب طابق المعلّم، لكن التدرّج بقي

يظهر العيب الثاني في التقطير. يتعلم النموذج الطالب تكرار احتمالات معلّم ثابت، وعند التطابق التام ينبغي أن يكون التدرّج بالنسبة إلى اللوجيتات صفرًا. وتبقى cross-entropy في هذه الحالة مساوية لإنتروبيا المعلّم، بينما يصبح كل من التدرّج وتباعد KL صفرًا.

لكن عمليًا كثيرًا ما تُحسب احتمالات المعلّم والطالب بطريقتين مختلفتين: إحداهما بقسمة الأسّيات، والأخرى بالدالة الأسية لناتج log_softmax. وفي حالة اللوجيتات [2, 1, 0] في float32 يبلغ الفرق نحو 1,49·10⁻⁸ في مكوّنين، وتبلغ نظيمة الضجيج 2,1·10⁻⁸. فاللوجيتات متطابقة، لكن التدرّج غير متطابق.

يقترح المؤلفون مقارنة اللوجيتات أولًا ثم الانتقال إلى الاحتمالات. يُحسب الفرق بين لوجيتات الطالب والمعلّم، ويُطرح منه المتوسط المرجّح باحتمالات المعلّم، ثم تُحسب التصحيحة الصغيرة عبر expm1 وlog1p. تحافظ هاتان الدالتان على الدقة عندما تكون القيمة المُدخلة صغيرة. وعند تطابق اللوجيتات يكون الناتج صفرًا دقيقًا: expm1(0) تعيد 0.

لماذا يصل 10⁻⁸ إلى التدريب

يبدو تدرّج بحدود 10⁻⁹ غير ضار، لكن Adam يطبّع الخطوة بتقدير لمقياس التدرّج، ولذلك فإن الصغر المطلق للإشارة لا يحمي من العواقب. في Softmax Collapse اختفى تدرّج اللوجيت المستهدف وبقي تدرّج المنافسين. وتمر الإشارة المشوّهة عبر الشبكة وتصل إلى المحسِّن التكيفي. ويربط المؤلفون هذا اللاتناظر بتأثير Slingshot: بعد فترة من الخسارة (loss) المنخفضة تظهر قفزات حادة.

أُجريت تجارب الورقة في float32 على خمس عمليات تشغيل بقيم seed مختلفة. في التجربة الأولى استُخدم الجمع بالنمط 31 مع weight decay بقيمة λ = 1 وقيمة Adam ε = 10⁻⁸. وفي الثانية استُخدمت المعادلة (a² + b²) mod 97 مع λ = 0 وε = 10⁻¹⁶. وفي الحالتين يزيل إصلاح الصيغة العددية القفزات ويغيّر ديناميكية التدريب اللاحقة. وهذه نتيجة على نماذج ومهام محددة، ولا تثبت أن كل قفزة في loss لدى LLM سببها softmax.

ولحساب hard-label loss بصورة مستقرة يستخدم المؤلفون logsumexp على المنافسين وsoftplus بدلًا من الجمع المباشر مع الواحد. أما المثال التعليمي بـ NumPy في التحليل فيعمل فقط عندما تكون الفئة الصحيحة هي المتصدّرة، ولا يحل محل autograd.

ما الذي يجب فحصه في شيفرتك

يغيّر الإصلاح ترتيب العمليات لا البنية المعمارية، ولا يتطلب معلمات جديدة ولا ذاكرة إضافية. وبالنسبة إلى الفرق التي تدرّب نماذج ذات loss منخفض، فهو فحص منخفض التكلفة.

  • أدخِل إلى نواة الخسارة لوجيتات بفارق 17–30 في float32 وتحقق مما إذا كان تدرّج الفئة الصحيحة ينعدم.
  • تأكد من أن softmax والخسارة تُحسبان فعلًا في float32 ضمن نظام الدقة المختلطة لديك، لا في bfloat16 أو float16.
  • في التقطير، أعطِ الطالب لوجيتات المعلّم. يجب أن يكون التدرّج صفرًا تامًا، لا بحدود 10⁻⁸.
  • قارن السلوك عند قيم ε مختلفة في Adam: فهذا المعامل يحدد مدى تحوّل الضجيج إلى خطوة تحديث.
  • إذا ظهرت قفزات في loss بعد استقرار طويل في التدريب، فافحص الصيغة العددية قبل تغيير المعاملات الفائقة.

ينبغي أخذ التنفيذ الكامل للفوارق الكبيرة بين اللوجيتات من الورقة البحثية للمؤلفين: فالأمثلة المختصرة في التحليل تناسب الفروق الصغيرة ولا تحل محل الدالة الجاهزة.

القصة

أسئلة وأجوبة حول الخبر

ما أبرز التفاصيل حول أين يفقد float32 الرقم الصغير؟

الصيغة القياسية محمية أصلًا من الفيض: يُطرح الحد الأقصى من اللوجيتات فلا تنفجر الدالة الأسية. لكن الحماية من overflow لا تضمن دقة الفروق الصغيرة. لنأخذ اللوجيتات [20, 0] في float32. احتمال الفئة الثانية يساوي 2,06·10⁻⁹، وهذا الرقم يُخزَّن جيدًا. أما احتمال الفئة الأولى فيُقرَّب إلى 1 تمامًا، لأن إضافة 10⁻⁹ إلى الواحد لا تتسع لها سبعة أرقام معنوية. وبعد طرح الواحد يصبح تدرّج الفئة الصحيحة صفرًا، مع أنه ينبغي أن يكون نحو −2,06·10⁻⁹. في المقابل تبقى تدرّجات المنافسين كما هي، فلا يعود مجموع المشتقات صفرًا. إذا رمزنا إلى فارق الإجابة الصحيحة بـ m، وإلى r = e^(−m)، فإن الصيغة الم

ما أبرز التفاصيل حول الطالب طابق المعلّم، لكن التدرّج بقي؟

يظهر العيب الثاني في التقطير. يتعلم النموذج الطالب تكرار احتمالات معلّم ثابت، وعند التطابق التام ينبغي أن يكون التدرّج بالنسبة إلى اللوجيتات صفرًا. وتبقى cross-entropy في هذه الحالة مساوية لإنتروبيا المعلّم، بينما يصبح كل من التدرّج وتباعد KL صفرًا. لكن عمليًا كثيرًا ما تُحسب احتمالات المعلّم والطالب بطريقتين مختلفتين: إحداهما بقسمة الأسّيات، والأخرى بالدالة الأسية لناتج log_softmax. وفي حالة اللوجيتات [2, 1, 0] في float32 يبلغ الفرق نحو 1,49·10⁻⁸ في مكوّنين، وتبلغ نظيمة الضجيج 2,1·10⁻⁸. فاللوجيتات متطابقة، لكن التدرّج غير متطابق. يقترح المؤلفون مقارنة اللوجيتات أولًا ثم ال

ما أبرز التفاصيل حول لماذا يصل 10⁻⁸ إلى التدريب؟

يبدو تدرّج بحدود 10⁻⁹ غير ضار، لكن Adam يطبّع الخطوة بتقدير لمقياس التدرّج، ولذلك فإن الصغر المطلق للإشارة لا يحمي من العواقب. في Softmax Collapse اختفى تدرّج اللوجيت المستهدف وبقي تدرّج المنافسين. وتمر الإشارة المشوّهة عبر الشبكة وتصل إلى المحسِّن التكيفي. ويربط المؤلفون هذا اللاتناظر بتأثير Slingshot: بعد فترة من الخسارة (loss) المنخفضة تظهر قفزات حادة. أُجريت تجارب الورقة في float32 على خمس عمليات تشغيل بقيم seed مختلفة. في التجربة الأولى استُخدم الجمع بالنمط 31 مع weight decay بقيمة λ = 1 وقيمة Adam ε = 10⁻⁸. وفي الثانية استُخدمت المعادلة (a² + b²) mod 97 مع λ = 0 وε =

ZK
جمال حميدون — مدير المنتجات في Alpina Digital ومدير منتج AlpinaGPT. يبني منتجات الذكاء الاصطناعي منذ 2019. بدأ Hamidun News كمشروع شخصي ثم أصبح مُجمِّعًا إنتاجيًا بأكثر من 6000 قارئ.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
ما رأيك؟
جارٍ تحميل التعليقات…