التعلم العميق2018متقدم9 دقيقة قراءة

المعادلات التفاضلية العادية العصبية

Neural Ordinary Differential Equations

Chen, T. Q. · Rubanova, Y. · Bettencourt, J. · Duvenaud, D. — NeurIPS

المشكلة

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

الإسهام

بدل تكديس طبقات منفصلة، نصف مشتقة بشبكة عصبية واحدة: dh/dt = f(h(t), t, θ). الناتج يُحسَب عبر حالّ معادلات تفاضلية يعمل كصندوق أسود. تُعطينا التدرجات الدقيقة بذاكرة ثابتة لا تنمو — دون الحاجة لتخزين أي تنشيطات وسيطة. النموذج يُعدِّل عمقه الفعلي لكل مدخل على حدة: الحالّ يتّخذ خطوات أكثر حين تكون المسألة معقّدة. كذلك تنبثق تدفقات التسوية المستمرة من هذا الإطار بصورة طبيعية، فتتيح بنى معمارية حرة وتدريباً بتعظيم الدقيقة من خلال صيغة تغيُّر المتغيّرات اللحظية.

الأثر

هذه الورقة (أفضل ورقة في NeurIPS 2018) فتحت جسراً بين عالم المعادلات التفاضلية . تفرّعت منها تدفقات التسوية المستمرة (FFJORD)، ونماذج المعادلات التفاضلية الكامنة للسلاسل الزمنية غير المنتظمة، والإطار النظري الذي مهّد لاحقاً للمطابقة الانسيابية والنماذج التوليدية القائمة على الدرجات. الرسالة المحورية: الشبكات العصبية ليست مجرد طبقات مُكدَّسة، بل يمكن فهمها كأنظمة ديناميكية — وهذه النظرة أعادت تشكيل تفكيرنا حول العمق والذاكرة والنمذجة التوليدية.

تخيّل أن ResNet سُلَّم عادي: عند كل درجة ترتفع مقداراً ثابتاً، والمهندس قرّر سلفاً كم درجة في السُّلَّم. لو أردت العودة فعليك تذكُّر كل درجة صعدتَها واحدةً واحدة.

تستبدل هذا السُّلَّم بـمنحدر ناعم: بدل أن تعدّ الدرجات، تصف ميل المنحدر عند كل نقطة، ثم تُدحرِج كرة من الأسفل فيتولّى توجيهها إلى القمة. الكرة تتسارع في الأجزاء المستوية وتتمهّل عند المنعطفات الحادة — تُكيّف جهدها من تلقاء نفسها. والعودة؟ يكفي دحرجة الكرة عكسياً من القمة دون حاجة لتذكّر كل نقطة مررت بها.

من ResNet إلى المعادلة التفاضلية: الحدّ المستمر

نقطة الانطلاق هي في شبكات ResNet. كل طبقة تحسب:

ht+1=ht+f(ht,θt)h_{t+1} = h_t + f(h_t, \theta_t)

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

السؤال الذي طرحه تشين وزملاؤه كان بديهياً: لماذا لا نذهب إلى النهاية؟ بدل أن نحدّد عدداً ثابتاً من الطبقات، لنصِف الديناميكيات المستمرة مباشرةً:

dh(t)dt=f(h(t),t,θ)\frac{dh(t)}{dt} = f(h(t), t, \theta)

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

افتح في المختبر
يساراً: ResNet تتقدّم بخطوات منفصلة ثابتة. يميناً: المعادلة التفاضلية العصبية ترسم منحنى مستمراً. غيِّر عدد خطوات أويلر وراقب كيف يقترب التقريب المنفصل من المنحنى المستمر.
تستيقظ التجربة عند وصولك…

الصياغة الرياضية: الحالة المخفية كنهر جارٍ

تخيّل أن الحالة المخفية لكل نقطة بيانات جُسيمٌ أُسقط في نهر. الشبكة العصبية ff ترسم تيّار هذا النهر — أي — عند كل موقع وكل لحظة. الجسيم ينجرف مع التيار، والنقطة التي يستقرّ عندها هي مخرجات الشبكة.

المعادلة المحورية هي مسألة القيمة الابتدائية:

h(t1)=h(t0)+t0t1f(h(t),t,θ)dth(t_1) = h(t_0) + \int_{t_0}^{t_1} f(h(t), t, \theta)\, dt
التمرير الأمامي للمعادلة التفاضلية العصبيةh(t₀) هو المدخل · f شبكة عصبية تحدّد السرعة · التكامل يُقيَّم بحالّ تفاضلي (مثل دورماند-برينس) · h(t₁) هو المخرج

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

افتح في المختبر
راقب كيف تتتبّع حلّالات مختلفة (أويلر، RK4، تكيُّفي) المسار نفسه. الحالّ التكيُّفي يُقلّل خطواته في المناطق الملساء ويُكثّفها عند المنعطفات الحادة.
تستيقظ التجربة عند وصولك…

الطريقة المرافقة: انتشار عكسي بذاكرة ثابتة

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

طريقة الحساسية المرافقة (من نظرية التحكم الأمثل، بونترياغين 1962) تُقدّم مخرجاً أنيقاً. الفكرة: عرِّف الحالة المرافقة بوصفها تدرّج بالنسبة لـالحالة المخفية عند اللحظة tt:

a(t)=Lh(t)a(t) = \frac{\partial L}{\partial h(t)}

هذه الحالة المرافقة نفسها تخضع لمعادلة تفاضلية تسير عكسياً في الزمن:

da(t)dt=a(t)f(h(t),t,θ)h\frac{da(t)}{dt} = -a(t)^{\top} \frac{\partial f(h(t), t, \theta)}{\partial h}
معادلة المرافق التفاضلية — التدرّجات تسري عكسياًشغّل الديناميكيات عكسياً من t₁ إلى t₀. لا حاجة لتنشيطات مخزّنة — أعِد بناء h(t) أثناء السير. تكلفة الذاكرة: O(1) مهما كان عدد خطوات الحالّ.

تدرّج المعاملات θ\theta يُحسب هو الآخر بتكامل يسير عكسياً:

dLdθ=t1t0a(t)f(h(t),t,θ)θdt\frac{dL}{d\theta} = -\int_{t_1}^{t_0} a(t)^{\top} \frac{\partial f(h(t), t, \theta)}{\partial \theta}\, dt

من الناحية التطبيقية، الحالة الأمامية h(t)h(t) والحالة المرافقة a(t)a(t) وتدرّج المعاملات تُدمج كلها في جملة مُوسَّعة واحدة — حلّ تفاضلي عكسي واحد يقوم مقام الانتشار العكسي عبر جميع الطبقات.

افتح في المختبر
اضغط «أمامي» لمشاهدة الحالّ وهو يرسم المسار. ثم اضغط «عكسي» لترى الطريقة المرافقة وهي تحسب التدرّجات — لاحظ أنه لا تُخزَّن أي حالات وسيطة.
تستيقظ التجربة عند وصولك…

تدفقات التسوية المستمرة: نمذجة توليدية حرة البنية

فكرة تدفقات التسوية ببساطة: نبدأ بتوزيع بسيط (كالتوزيع الغاوسي) ونحوّله إلى توزيع معقّد عبر سلسلة تحويلات قابلة للعكس. لكنّ التحدي أننا لحساب أرجحية أي نقطة بيانات تحت النموذج نحتاج محدِّد مصفوفة جاكوبي لكل تحويل — وهذا الشرط يُكبّل البنية المعمارية في التدفقات المنفصلة بقيود شديدة.

المعادلات التفاضلية العصبية تفتح الباب أمام نسخة مستمرة من هذه الفكرة. بينما ينساب التوزيع عبر ، تتغيّر كثافته اللوغاريتمية وفق صيغة اللحظية:

logp(h(t))t=tr ⁣(fh(t))\frac{\partial \log p(h(t))}{\partial t} = -\text{tr}\!\left(\frac{\partial f}{\partial h(t)}\right)
تغيُّر المتغيّرات اللحظيالأثر (مجموع العناصر القُطرية) لمصفوفة جاكوبي يحلّ محل المحدِّد الكامل. هذا أرخص حسابياً بكثير ولا يفرض أي قيود على بنية الدالة f.

هنا يظهر الفارق الجوهري: كانت تستلزم طبقات قابلة للعكس مُصمَّمة بعناية (طبقات اقتران أو تحويلات انحدارية ذاتية). أما تدفقات التسوية المستمرة فتقبل أي بنية شبكة عصبية للدالة ff — لا قيود على قابلية العكس ولا بنية خاصة مطلوبة. السبب أن الديناميكيات التفاضلية السلسة تضمن قابلية العكس تلقائياً: مسارات المعادلة التفاضلية لا تتقاطع أبداً.

لاحقاً وسّع غراثوول وزملاؤه (2018) هذه الفكرة في FFJORD، مستخدمين مُقدِّر هاتشنسون للأثر لخفض التكلفة الحسابية أكثر.

افتح في المختبر
شاهد توزيعاً غاوسياً بسيطاً يتحوّل إلى شكل معقّد عبر تدفق مستمر. لاحظ أن المسارات لا تتقاطع أبداً — قابلية العكس مضمونة.
تستيقظ التجربة عند وصولك…

ثلاث مزايا في لمحة

المعادلات التفاضلية العصبية تتمتّع بثلاث خصائص يصعب على الشبكات المنفصلة مجاراتها:

  • ذاكرة ثابتة: الطريقة المرافقة تحسب التدرّجات الدقيقة دون تخزين تنشيطات وسيطة. الذاكرة لا تكبر بزيادة خطوات الحالّ.
  • حساب تكيُّفي: الحالّ يُوزّع الحساب تلقائياً — حصة أكبر للمدخلات المعقّدة وأقل للبسيطة. لا يوجد «عمق» مُحدَّد سلفاً، بل النموذج يقرّر أثناء العمل.
  • نماذج توليدية حرة البنية: تدفقات التسوية المستمرة لا تفرض قيوداً معمارية، ولا تحتاج سوى أثر مصفوفة جاكوبي بدل المحدِّد الكامل.
افتح في المختبر
قارن استهلاك الذاكرة بين ResNet (يتصاعد مع العمق) والمعادلة التفاضلية العصبية (يبقى ثابتاً). اسحب شريط العمق وراقب الفرق.
تستيقظ التجربة عند وصولك…

الفكرة في شيفرة برمجية

التمرير الأمامي للمعادلة التفاضلية العصبية بمكتبة torchdiffeqpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import torch
import torch.nn as nn
from torchdiffeq import odeint

class ODEFunc(nn.Module):
    """الشبكة العصبية f التي تُعرِّف dh/dt."""
    def __init__(self, dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(dim, 64),
            nn.Tanh(),
            nn.Linear(64, dim),
        )

    def forward(self, t, h):
        # t الزمن الحالي، h الحالة المخفية
        return self.net(h)

class NeuralODE(nn.Module):
    def __init__(self, func, t_span):
        super().__init__()
        self.func = func        # حقل السرعة f
        self.t_span = t_span    # [t0, t1]

    def forward(self, h0):
        # الحالّ التفاضلي هو «التمرير الأمامي»
        # يتتبّع h من t0 إلى t1 باستخدام f
        solution = odeint(
            self.func, h0, self.t_span,
            method='dopri5'  # دورماند-برينس (تكيُّفي)
        )
        return solution[-1]  # h(t1)

# شبكة واحدة تقوم مقام ResNet بأكملها
func = ODEFunc(dim=64)
model = NeuralODE(func, t_span=torch.tensor([0.0, 1.0]))
h0 = torch.randn(32, 64)  # دفعة من 32 عيّنة، بُعد 64
h1 = model(h0)            # الناتج — الحالّ اختار عمقه بنفسه

المعادلات التفاضلية الكامنة: نمذجة السلاسل الزمنية غير المنتظمة

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

الآلية واضحة: يضغط المشاهدات إلى حالة في z(t0)z(t_0)، ثم تتولّى المعادلة التفاضلية تطوير zz أمامياً في زمن مستمر. ولأن المعادلة التفاضلية تتقبّل أي فاصل زمني بطبيعتها، لا حاجة لتقطيع الزمن إلى شرائح ثابتة أو لحشو القيم الناقصة. يستخرج التنبؤات عند أي لحظة نريدها.

أصبح نموذج المعادلة التفاضلية الكامنة أداةً أساسية في مجالات كالرعاية الصحية وعلوم المناخ وأي ميدان تصل فيه البيانات بصورة غير منتظمة.

افتح في المختبر
المشاهدات غير المنتظمة (النقاط) تُرمَّز إلى حالة كامنة. المعادلة التفاضلية تُطوّرها بشكل مستمر، فتُخرج تنبؤات عند أي لحظة مطلوبة.
تستيقظ التجربة عند وصولك…

لماذا غيَّرت كل شيء

  1. 2015

    ResNet

    هي وزملاؤها يُقدّمون الاتصالات المتبقية: h_{t+1} = h_t + f(h_t). عدّة باحثين يلتقطون الصلة بين هذه الصيغة وتقريب أويلر للمعادلات التفاضلية.

  2. 2018

    المعادلة التفاضلية العصبية (هذه الورقة)

    تشين وزملاؤه يمضون إلى النهاية: يستبدلون الطبقات المنفصلة بمعادلة تفاضلية مستمرة، ويستخدمون الطريقة المرافقة للتدريب، ويُقدّمون تدفقات التسوية المستمرة. حصدت جائزة أفضل ورقة في NeurIPS.

  3. 2019

    FFJORD

    غراثوول وزملاؤه يُوسّعون تدفقات التسوية المستمرة باستخدام مُقدِّر هاتشنسون للأثر، ممّا يجعلها عملية وقابلة للتوسّع في تقدير الكثافة.

  4. 2019

    المعادلات التفاضلية الكامنة

    روبانوفا وزملاؤها يدمجون المعادلات التفاضلية العصبية مع المُرمِّزات التلقائية التباينية لمعالجة سلاسل زمنية غير منتظمة، فيبتكرون إطاراً مناسباً لبيانات الرعاية الصحية والمستشعرات.

  5. 2020

    النماذج التوليدية القائمة على الدرجات

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

  6. 2022

    المطابقة الانسيابية

    ليبمان وزملاؤه يقترحون المطابقة الانسيابية — هدف تدريبي أبسط لتدفقات التسوية المستمرة يستغني عن المحاكاة أثناء التدريب تماماً.

الخط الذي يصل المعادلة التفاضلية العصبية بـالمطابقة الانسيابية خطّ مستقيم: تدفقات التسوية المستمرة ← النماذج التوليدية القائمة على الدرجات ← المطابقة الانسيابية. كل حلقة تستند إلى الرؤية الأساسية نفسها: التحويلات بين التوزيعات يمكن نمذجتها كتدفقات مستمرة تحكمها معادلات تفاضلية. توليد الصور والفيديو اليوم يقوم على هذا الأساس.

المرجعChen, Rubanova, Bettencourt, Duvenaud. Neural Ordinary Differential Equations. NeurIPS, 2018.

مصطلحات هذه الورقة