النماذج التوليدية2015متقدم10 دقيقة قراءة

الاستدلال المتغيّري بالتدفقات التسوِيَّة

Variational Inference with Normalizing Flows

Rezende, D. J. · Mohamed, S. — ICML

المشكلة

في الاستدلال المتغيّري نحتاج إلى اختيار توزيع تقريبي q(z|x) يحاكي التوزيع الخلفي الحقيقي. الطريقة الشائعة هي استخدام غاوسيات مستقلة البُعد (تقريب الحقل المتوسط)، لكن هذا التقريب لا يرى إلا شكلاً بيضاوياً وحيد القمة محاذياً للمحاور. المشكلة تظهر حين يكون التوزيع الخلفي الحقيقي متعدد القمم أو منحرفاً أو فيه ارتباطات معقدة: التقريب الغاوسي يعجز تماماً عن ملاحقة هذا الشكل، فيصبح حد ELBO فضفاضاً وتتدهور جودة التمثيلات الكامنة. والمعضلة أن أي محاولة سابقة لجعل التوزيع التقريبي أغنى كانت تُوقعنا في حسابات مستعصية.

الإسهام

تقترح الورقة التدفقات التسوِيَّة: نبدأ من توزيع بسيط q₀ كالغاوسي، ثم نُمرّره عبر سلسلة من K تحويل وقابل للاشتقاق f₁, f₂, …, fₖ. كل تحويل يُعيد تشكيل الكثافة، وصيغة — عبر محدِّد جاكوبي لكل خطوة — تُعطينا الكثافة الدقيقة للمتغير الناتج. تُقدّم الورقة عائلتين بتكلفة حسابية O(D): التدفقات المستوية التي تقصّ الفضاء على طول مستويات فائقة، والتدفقات الشعاعية التي توسِّع أو تُنكمش حول نقطة. تُدمج هذه التدفقات في حد ELBO للمرمّز التلقائي المتغيّر فتُحكِمه دون خسارة قابلية التوسّع. كذلك تربط الورقة التدفقات المنتهية بالتدفقات متناهية الصِّغَر (ديناميكا لانجفان وهاملتون) في إطار نظري موحّد.

الأثر

تحولت التدفقات التسوِيَّة إلى ركيزة أساسية في النمذجة التوليدية والاستدلال الاحتمالي. فتحت الباب أمام سلسلة نماذج مؤثرة: NICE وRealNVP وGlow (التفافات عكوسة 1×1 لتوليد الصور) والتدفقات الانعكاسية الذاتية IAF والتدفقات الذاتية المقنَّعة MAF والتدفقات التسوِيَّة المستمرة عبر المعادلات التفاضلية العصبية FFJORD. كذلك أثّرت فكرة تغيير المتغيرات تأثيراً بالغاً في النماذج التوليدية القائمة على دالة القيمة وفي مطابقة التدفق، وكلاهما يقود اليوم أحدث أنظمة توليد الصور والفيديو.

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

تمنح النحّات سلسلة من القوالب. كل قالب يُجري تشويهاً بسيطاً — شدّ من هنا وضغط من هناك — ولأن كل قالب عكوس (تستطيع دائماً التراجع عنه)، يمكنك تتبّع تغيّر الحجم بدقة في كل خطوة. بعد عدد كافٍ من القوالب، تتحول الكرة الأصلية إلى أي شكل تقريباً: هلال أو نجمة أو حلقة ملتوية. الفكرة الجوهرية هي أنك لا تفقد أبداً القدرة على حساب الكثافة، لأن كل تشويه يُسجِّل مقدار تغيّر الحجم عبر محدِّد .

المشكلة: التوزيع الغاوسي عاجز عن التقاط الأشكال المعقدة

في المرمّز التلقائي المتغيّر، الهدف هو استنتاج z التي أنتجت المُلاحظة x. المشكلة أن الحقيقي p(z|x) — أي توزيع الرموز الكامنة التي كان يمكنها إنتاج x — يكاد يكون مستعصياً حسابياً دائماً. الحل المعتاد هو تقريبه بتوزيع أبسط q(z|x)، وغالباً ما يكون غاوسياً قُطرياً تُحدِّد معاملاته شبكة .

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

هذا التفاوت له عواقب ملموسة: حد ELBO يصبح فضفاضاً، والنموذج يُهمل الفضاء الكامن ()، والعينات المُولَّدة تفتقر إلى التنوع. ما نحتاجه هو طريقة تجعل q(z|x) مرناً بما يكفي لمطابقة التوزيع الخلفي الحقيقي، دون أن نفقد القدرة على حساب الكثافة.

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

الأداة المحورية: صيغة تغيير المتغيرات

تقوم التدفقات التسوِيَّة على مبرهنة واحدة من نظرية الاحتمالات: إذا طبّقت على متغيّر عشوائي z دالةً عكوسة وقابلة للاشتقاق f، فإن كثافة الناتج z' = f(z) تُحسب بصيغة تغيير المتغيرات. الفكرة بديهية لو فكّرت فيها فيزيائياً: حين يمطّ تحويلٌ ما منطقةً من الفضاء فيجعلها أكبر، فإن كثافة الاحتمال فيها يجب أن تنخفض بالنسبة ذاتها — لأن الكتلة الاحتمالية نفسها صارت موزّعة على حجم أوسع. محدِّد جاكوبي هو بالضبط ما يقيس هذا التغيّر المحلي في الحجم.

q(z)=q(z)detfz1q(\mathbf{z}') = q(\mathbf{z}) \left| \det \frac{\partial f}{\partial \mathbf{z}} \right|^{-1}
صيغة تغيير المتغيرات — محرّك التدفقات التسوِيَّةq(z) = الكثافة قبل التحويل · f = دالة عكوسة · محدِّد جاكوبي يقيس مقدار تمطيط f أو ضغطه للحجم · المقلوب (⁻¹) يُنقص الكثافة حيث يتمدد الفضاء ويزيدها حيث ينكمش

تخيّل بالوناً على شكل حيوان: حين تلوي مقطعاً منه فيصبح أنحف، يتركّز الهواء (الاحتمال) فيه وتزداد كثافته. محدِّد جاكوبي هو السجل الرياضي لكل لَيّ وضغط، يُمكِّنك من معرفة كثافة الهواء في أي نقطة بدقة تامة.

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

تسلسل التحويلات: من البسيط إلى المعقد

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

هذا بالضبط معنى كلمة «تدفق» في التدفقات التسوِيَّة: الكثافة الابتدائية تتدفق عبر أنبوب من التحويلات العكوسة، وتتحوّل تدريجياً من غاوسي بسيط إلى توزيع ثري ومُعبِّر. أما كلمة «التسوِيَّة» فتعني أن العملية تعمل بالاتجاه المعاكس أيضاً: أي توزيع معقد يمكن تسويته وإرجاعه إلى غاوسي بعكس سلسلة التحويلات.

lnqK(zK)=lnq0(z0)k=1Klndetfkzk1\ln q_K(\mathbf{z}_K) = \ln q_0(\mathbf{z}_0) - \sum_{k=1}^{K} \ln \left| \det \frac{\partial f_k}{\partial \mathbf{z}_{k-1}} \right|
لوغاريتم الكثافة بعد K خطوة تدفقنبدأ من ln q₀ (كثافة التوزيع الأساسي البسيط)، ثم نطرح مجموع لوغاريتمات محدِّدات جاكوبي — واحد لكل تحويل. كل حد يُسجّل مقدار توسيع أو ضغط تلك الخطوة للحجم المحلي.
افتح في المختبر
شاهد توزيعاً غاوسياً يتدفق عبر 1 و2 و4 و8 و16 تحويلاً. كل خطوة تضيف تشويهاً طفيفاً، لكنها معاً تبني بنية غنية.
تستيقظ التجربة عند وصولك…

عائلتان من التدفقات: المستوية والشعاعية

التحدي الهندسي الأساسي هو أن حساب محدِّد جاكوبي لمصفوفة D×D يكلّف عادةً O(D³). لكي تصبح التدفقات عملية، نحتاج تحويلات ذات بنية خاصة تجعل حساب المحدِّد رخيصاً. تُقدّم الورقة عائلتين من هذا النوع:

تقطع الفضاء بمستوى فائق وتُشوِّه الكثافة على أحد جانبيه. الصيغة هي f(z) = z + u·h(wᵀz + b)، حيث u وw متّجهان بأبعاد D وb عدد حقيقي وh دالة لاخطية ملساء كـ tanh. بفضل مبرهنة محدِّد المصفوفة، ينخفض محدِّد جاكوبي إلى قيمة عددية واحدة: |1 + uᵀ·h'(wᵀz + b)·w| — بتكلفة O(D) فقط.

تُوسِّع الكثافة أو تُنكمشها حول نقطة مرجعية z₀. الصيغة هي f(z) = z + β/(α + r)·(z − z₀) حيث r = ‖z − z₀‖. هذا يُنشئ نتوءات أو تجويفات موضعية في الكثافة، بتكلفة O(D) أيضاً لمحدِّد جاكوبي.

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

f(z)=z+uh(wz+b),detfz=1+uψ(z)f(\mathbf{z}) = \mathbf{z} + \mathbf{u}\, h(\mathbf{w}^\top \mathbf{z} + b), \qquad \left| \det \frac{\partial f}{\partial \mathbf{z}} \right| = \left| 1 + \mathbf{u}^\top \psi(\mathbf{z}) \right|
التدفق المستوي ومحدِّد جاكوبي بتكلفة O(D)ψ(z) = h'(wᵀz + b)·w · المستوى الفائق wᵀz + b = 0 يقسم الفضاء · u يتحكم في اتجاه التشويه ومقداره · h (مثل tanh) تجعله سلساً ومحدوداً
f(z)=z+βα+zz0(zz0)f(\mathbf{z}) = \mathbf{z} + \frac{\beta}{\alpha + \|\mathbf{z} - \mathbf{z}_0\|} (\mathbf{z} - \mathbf{z}_0)
التدفق الشعاعي — توسيع أو انكماش حول نقطة مركزيةz₀ = مركز التحويل · α > 0 يتحكم في الانتشار · β يتحكم في الاتجاه: قيمة موجبة تدفع الكثافة للخارج وسالبة تسحبها للداخل
افتح في المختبر
بدِّل بين التدفقات المستوية والشعاعية. عدِّل المعاملات لترى كيف يُشوِّه كل نوع كثافة غاوسية.
تستيقظ التجربة عند وصولك…

التدفقات داخل المرمّز التلقائي المتغيّر: حد ELBO أكثر إحكاماً

الآن نصل إلى المكسب العملي: نستبدل التوزيع الغاوسي البسيط q(z|x) في المرمّز التلقائي المتغيّر بـتدفق تسوِيّ. شبكة المُرمِّز تظلّ تُخرج غاوسياً z₀ ~ N(μ, σ²)، لكن z₀ يمرّ بعدها عبر K خطوة تدفق لينتج zₖ. يصبح حد ELBO على النحو التالي:

F(x)=Eq0(z0)[lnq0(z0)lnp(x,zK)k=1Klndetfkzk1]\mathcal{F}(\mathbf{x}) = \mathbb{E}_{q_0(\mathbf{z}_0)} \Big[ \ln q_0(\mathbf{z}_0) - \ln p(\mathbf{x}, \mathbf{z}_K) - \sum_{k=1}^{K} \ln \left| \det \frac{\partial f_k}{\partial \mathbf{z}_{k-1}} \right| \Big]
حد الطاقة الحرة مع التدفقات التسوِيَّةq₀(z₀) = كثافة الغاوسي الابتدائية · p(x, zₖ) = الاحتمال المشترك للنموذج مُقيَّماً عند مخرج التدفق النهائي · مجموع لوغاريتمات محدِّدات جاكوبي يُعوِّض عن تغيّرات الكثافة عبر التدفق · تقليل F يُحكِم حد ELBO

أناقة هذه الصياغة تكمن في أننا نحتاج فقط إلى سحب عينة z₀ من الغاوسي البسيط (عبر )، ثم تمريرها أمامياً عبر التدفق وجمع حدود لوغاريتم محدِّد جاكوبي. لا نحتاج إلى عكس التدفق أثناء . والأهم أن معاملات التدفق يمكن أن تعتمد على البيانات: شبكة المُرمِّز تُخرج ليس فقط μ وσ بل أيضاً معاملات التدفق لكل مُدخل x، وبذلك نحصل على بتوزيع خلفي غني.

افتح في المختبر
انقر على كل مرحلة من أنبوب VAE + التدفق لترى ما يحدث لـ z والكثافة.
تستيقظ التجربة عند وصولك…

ما وراء الخطوات المنتهية: التدفقات متناهية الصِّغَر

من أعمق إسهامات الورقة ربطها بين التدفقات المنتهية وديناميكا الزمن المستمر. الفكرة: بدلاً من K خطوة منفصلة، تخيّل عدداً لا نهائياً من الخطوات متناهية الصِّغَر — مساراً سلساً من z₀ إلى zₖ تحكمه المعادلة التفاضلية dz/dt = f(z, t).

في هذا الإطار، يتطوّر لوغاريتم الكثافة وفق صيغة التغيير اللحظي للمتغيرات، التي تستبدل مجموع لوغاريتمات محدِّدات جاكوبي المنفصلة بتكامل تباعد حقل السرعة. هذا يربط التدفقات التسوِيَّة بعائلتين فعّالتين من الديناميكا:

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

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

هذا المنظور المستمر ألهم لاحقاً المعادلات التفاضلية العصبية (Chen وآخرون، 2018) ونموذج FFJORD (Grathwohl وآخرون، 2018)، حيث يُصاغ التدفق كشبكة عصبية تُحدّد حقل السرعة ويُحَلّ بمكامل معادلات تفاضلية.

lnq(z(t))t=tr(fz(t))\frac{\partial \ln q(\mathbf{z}(t))}{\partial t} = -\text{tr}\left(\frac{\partial f}{\partial \mathbf{z}(t)}\right)
التغيير اللحظي للمتغيرات (تدفقات الزمن المستمر)لوغاريتم الكثافة يتطوّر بسالب الأثر (وليس المحدِّد!) لمصفوفة جاكوبي — أرخص بكثير من حساب المحدِّد الكامل، بتكلفة O(D) بدلاً من O(D³)

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

التدفق المستوي وحساب لوغاريتم الكثافةpython

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

import numpy as np

def planar_flow(z, u, w, b):
    """خطوة تدفق مستوي واحدة: f(z) = z + u * h(w^T z + b)"""
    h = np.tanh(np.dot(w, z) + b)           # تنشيط عددي
    return z + u * h                          # تشويه z في اتجاه u

def log_det_jacobian_planar(z, u, w, b):
    """log |det df/dz| للتدفق المستوي — بتكلفة O(D)."""
    h_prime = 1 - np.tanh(np.dot(w, z) + b)**2   # مشتقة tanh
    psi = h_prime * w                              # ψ(z) = h'(w^T z + b) * w
    return np.log(np.abs(1 + np.dot(u, psi)))      # مبرهنة محدِّد المصفوفة

def apply_flow_chain(z0, flow_params):
    """طبِّق K تدفق مستوي واجمع تغيّر لوغاريتم الكثافة."""
    z = z0
    log_det_sum = 0.0
    for (u, w, b) in flow_params:
        log_det_sum += log_det_jacobian_planar(z, u, w, b)
        z = planar_flow(z, u, w, b)
    return z, log_det_sum

# في VAE مع تدفقات:
# 1. المُرمِّز يُخرج μ و σ ومعاملات التدفق {u_k, w_k, b_k}
# 2. اسحب z₀ ~ N(μ, σ²I) بخدعة إعادة المعامَلة
# 3. zₖ, Σ log|det| = apply_flow_chain(z₀, flow_params)
# 4. ELBO = E[log p(x|zₖ)] - KL₀ + Σ log|det|
#    (حدود log-det تُحكِم الحد الأدنى)

لماذا غيّرت هذه الورقة مجرى النمذجة التوليدية

  1. 2014

    NICE (ديه وآخرون)

    تقدير المكونات المستقلة اللاخطي — طبقات اقتران حافظة للحجم بمحدِّد جاكوبي بديهي (= 1). أول بنية عميقة عكوسة قابلة للتطبيق عملياً.

  2. 2015

    هذه الورقة (ريزيندي ومحمد)

    أسّست إطار التدفقات التسوِيَّة للاستدلال المتغيّري، وقدّمت التدفقات المستوية والشعاعية. ربطت التدفقات المنتهية بديناميكا لانجفان وهاملتون.

  3. 2016

    RealNVP (ديه وآخرون)

    طبقات اقتران تآلفية بمقياس مُتعلَّم — عكوسة بالتصميم وسهلة حساب محدِّد جاكوبي. أول نموذج تدفق يُولِّد صوراً مقنعة فعلاً.

  4. 2016

    IAF (كينغما وآخرون)

    التدفق الانعكاسي الذاتي — وظّف البنية الذاتية الانحدارية لسحب عينات سريع بمصفوفات جاكوبي مثلثية. حسّن جودة التوزيع الخلفي في VAE بشكل مباشر.

  5. 2018

    Glow (كينغما ودهاريوال)

    التفافات عكوسة 1×1 مع بنية متعددة المقاييس. ولّدت وجوهاً عالية الدقة مع حساب دقيق لدالة الترجيح. أثبتت أن التدفقات تنافس شبكات GAN في جودة الصور.

  6. 2018

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

    أخذت فكرة التدفق متناهي الصِّغَر إلى منتهاها: صِغ حقل السرعة بشبكة عصبية وحُلّه بمكامل معادلات تفاضلية. استخدم FFJORD مُقدِّر هَتشنسون للأثر بتكلفة O(D).

  7. 2020

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

    ربطت عمليات الانتشار بمطابقة دالة القيمة والتدفقات التسوِيَّة المستمرة. بيّنت أن تعلّم دالة القيمة يُتيح التوليد دون الحاجة إلى حساب الكثافة صراحةً.

  8. 2022

    مطابقة التدفق (ليبمان وآخرون)

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

المرجعRezende, D. J. & Mohamed, S.. Variational Inference with Normalizing Flows. ICML, 2015.

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