نجمّع مرة واحدة، ونشتق في كل مكان ✛

الأصل: "Compile Once, Differentiate Everywhere: A Differentiable Meta-Circular Interpreter"
· Lucas Sheneman
arXiv:2606.09930 · 2026-06-07 · CC BY 4.0 · 3 دقيقة
مفسّر Scheme مُصرَّح إلى رسم بياني قابل للاشتقاق يتيح تحسين أي برنامج بوصفه بيانات.

السياق

لفترة طويلة، كانت الحدود بين تنفيذ البرامج والتحسين بالتدرجات تقيّد استخدام الكود كنموذج علمي قابل للتدريب. عادةً، كان يتعين إعادة كتابة كل نموذج يدويًا في إطار عمل قابل للاشتقاق. يقف هذا العمل إلى جانب الأبحاث حول المفسّرات القابلة للاشتقاق والبرمجة العصبية الرمزية، لكنه يتميز بأن المفسّر نفسه يصبح قابلاً للاشتقاق، وليس البرامج الفردية. وهذا يفتح الطريق أمام المعايرة التلقائية لأي برامج، مثل تلك التي تولّدها النماذج اللغوية.

المنهجية

طوّر المؤلفون مترجمًا يحوّل الكود المصدري بلغة Scheme إلى تمثيل وسيط يُدعى ComputeGraph، ثم إلى وحدات PyTorch أو JAX. السمة الأساسية هي المفسّر التفاضلي متعدد الدوائر (metacircular interpreter): مفسّر Scheme مكتوب بلغة Scheme نفسها، يُصرَّح مرة واحدة ثم يمكنه تنفيذ برامج عشوائية تُمرَّر كبيانات. جميع القيم ممثلة بمتجهات ذات 14 بُعدًا: وسم نوع one-hot بعشرة أبعاد وحمولة مفيدة بأربعة أبعاد. الكومة منفذة كقاموس أحادي الكتابة، مما يحافظ على صحة التدرجات. بالنسبة للاستدعاءات الذيلية، يُستخدم ترامبولين (trampoline).

النتائج

التدرجات المحسوبة عبر المفسّر المُصرَّح تطابق تلك الناتجة عن الترجمة المباشرة بفارق يصل إلى 7×10⁻⁷ في دالة الخسارة على 171 زوجًا (برنامج، قيمة ابتدائية). في بيانات حقيقية لتدهور البطاريات، أدى البحث المشترك عن البنية والمعاملات إلى استعادة بنية التدهور ذات الشكل الركبي من تقريب ابتدائي أملس، وحسّن الاستقراء على البيانات المحجوزة. في مسألة النمذجة العكسية لظاهرة النينيو، أتاح المفسّر التفاضلي تحسين دالة الاحتمال لمرشح كالمان بمعاملات يصل عددها إلى 611، بينما فشل البحث غير التدرجي. المعالجة بالدفعات حققت تسارعًا يصل إلى 875 ضعفًا في الإنتاجية.

الأهمية

يتميز هذا العمل عن الأساليب المجاورة بأن المفسّر نفسه يصبح قابلاً للاشتقاق، وليس البرامج الفردية. وهذا يزيل الحاجة إلى إعادة كتابة كل نموذج جديد بصيغة قابلة للاشتقاق. بالمقارنة مع التفاضل التلقائي على مستوى اللغة (مثل JAX أو Zygote) ومع المفسّرات التفاضلية المصنوعة يدويًا (مثل TerpreT)، يحقق هذا العمل مزيجًا من التطبيق الذاتي، والوضع العكسي، والترجمة. وهذا يوسع نطاق الانحدار الرمزي والبحث العصبي الرمزي من التعبيرات المغلقة إلى البرامج القابلة للتنفيذ ذات الحالة.

التطور المستقبلي

تشمل الاتجاهات المحتملة نقل المفسّر إلى JAX عبر إعادة كتابة الترامبولين كطول ثابت lax.scan مع إخفاء. كما أن استخدام MLIR وEnzyme واعد لتقليل التكاليف الإضافية للحسابات الفردية. كما أن دراسة تنعيم التفرعات (smooth interpretation أو DiscoGrad) قد تحل مشكلة التدرجات الصفرية للمعاملات التي تؤثر فقط على شروط التفرع. وعلى نطاق أوسع، يفتح هذا الطريق أمام التحسين الذاتي التدرجي للبرامج.

التأثير

يمكن أن تؤثر هذه الطريقة على النمذجة العلمية الآلية، حيث تولّد النماذج اللغوية فرضيات في شكل كود، ويقوم المفسّر التفاضلي بمعايرة معاملاتها. كما أنها مفيدة لمهام الانحدار الرمزي والتوليف العصبي الرمزي للبرامج.

الخطوات التالية

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

المسائل المفتوحة الرئيسية

يرتبط هذا العمل مباشرة بالمشكلة غير المحلولة في التوليف التلقائي للبرامج: كيف نبحث بكفاءة في الفضاء المنفصل للبنى باستخدام إشارة تدرجية. ويُظهر أن اشتقاق المفسّر يحل مشكلة معايرة المعاملات، لكنه لا يحل مشكلة البحث المنفصل عن البنية، والتي تظل صعبة.

نظرة آلة المعرفة

هذا القسم موجَّه إلى مؤلف العمل وزملائه. الأعمال المجاورة عثر عليها بحثٌ دلالي في أرشيفنا، لا بتطابق الكلمات. نحن لا نقيّم العمل: نعرض الحقل من حوله.

ماذا يفعل هذا العمل

تقدم هذه الورقة مترجمًا يحول مجموعة فرعية من لغة Scheme إلى رسوم بيانية حسابية قابلة للاشتقاق. الفكرة الأساسية هي أن المترجم يترجم المفسر نفسه، وليس البرامج الفردية، مما يسمح لأي برنامج يُقدَّم كبيانات بالحصول تلقائيًا على الانتشار العكسي للتدرجات. يثبت المؤلفون صحة التدرجات في كل مكان تقريبًا ويوضحون تطبيق ذلك للبحث المشترك عن بنية البرامج ومعاملاتها في مسائل علمية حقيقية.

أين تكمن قوته

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

إلى أين يمكن المضي

يستحق التجربة

  • التحقق من إمكانية استخدام التحقق الرسمي لإثبات صحة التحسينات في الكود المترجم.
  • استكشاف كيف يمكن للمفسر التفاضلي أن ينقل البنى البرمجية المدربة بين مسائل علمية مختلفة.

لماذا قد يكون هذا مهمًا

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

مفسّر Scheme المكتوب بلغة Scheme نفسها يتكون من 288 سطرًا فقط. ومع ذلك، فهو يدعم الإغلاقات (closures)، والاستدعاء الذاتي (recursion)، والقوائم، والاستدعاءات الذيلية، بما يكفي لتحقيق التطبيق الذاتي.

فكرة برنامج يمكنه تعديل وتحسين نفسه عبر التدرجات تتردد مع مفهوم آلات غودل (Gödel machines) ليورغن شميدهوبر، كما وصفها في أعماله حول التحسين الذاتي الشامل.

\frac{\|\nabla_{\theta} L_{\text{DMCI}} - \nabla_{\theta} L_{\text{direct}}\|_2}{\|\nabla_{\theta} L_{\text{direct}}\|_2} \approx 0
الخطأ النسبي للتدرج قريب من الصفر، مما يؤكد صحته.
\text{throughput speedup} = \frac{\text{time sequential}}{\text{time batched}}
نسبة زمن التنفيذ التسلسلي إلى زمن التنفيذ بالدفعات.
L(\theta) = \ell(\pi(\text{eval}(P(\theta), x)))
تُحسب الخسارة كدالة قابلة للاشتقاق لمخرج المفسّر.

أرقام رئيسية

  • خطأ التدرج: 0 (ضمن الدقة الرقمية)
  • فرق الخسارة: أقل من 7×10⁻⁷
  • تسريع المعالجة بالدفعات: حتى 875×
  • المعاملات في مسألة النينيو: حتى 611
  • عدد أسطر كود المفسّر: 288
العلماء
Niels BohrPascual JordanWerner HeisenbergJoseph Fourier
المفاهيم
مصنف المشفر الذاتي مفكك ترميز إعادة بناء البيانات بالشبكات العصبية التصحيح الذاتي للذكاء الاصطناعي تحليل المكونات المستقلة الذكاء الاصطناعي القابل للتفسير (XAI) حساب نموذج توليدي واجهة دماغ-حاسوب إكس جي بوست شبكة عصبية عميقة معالجة متوازية الشكل التفاضلي تقليل الأبعاد معالجة اللغة الطبيعية