النماذج التوليدية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) تُحسب بصيغة تغيير المتغيرات. الفكرة بديهية لو فكّرت فيها فيزيائياً: حين يمطّ تحويلٌ ما منطقةً من الفضاء فيجعلها أكبر، فإن كثافة الاحتمال فيها يجب أن تنخفض بالنسبة ذاتها — لأن الكتلة الاحتمالية نفسها صارت موزّعة على حجم أوسع. محدِّد جاكوبي هو بالضبط ما يقيس هذا التغيّر المحلي في الحجم.
تخيّل بالوناً على شكل حيوان: حين تلوي مقطعاً منه فيصبح أنحف، يتركّز الهواء (الاحتمال) فيه وتزداد كثافته. محدِّد جاكوبي هو السجل الرياضي لكل لَيّ وضغط، يُمكِّنك من معرفة كثافة الهواء في أي نقطة بدقة تامة.
تسلسل التحويلات: من البسيط إلى المعقد
تحويل عكوس واحد قدرته محدودة. القوة الحقيقية تظهر حين نُسلسل عدة تحويلات: نُطبّق f₁ ثم f₂ وهكذا حتى fₖ. كل خطوة تُشوِّه الكثافة قليلاً، والتغيّر الإجمالي في الكثافة يساوي حاصل ضرب محدِّدات جاكوبي الفردية — أو ما يكافئه: مجموع لوغاريتماتها.
هذا بالضبط معنى كلمة «تدفق» في التدفقات التسوِيَّة: الكثافة الابتدائية تتدفق عبر أنبوب من التحويلات العكوسة، وتتحوّل تدريجياً من غاوسي بسيط إلى توزيع ثري ومُعبِّر. أما كلمة «التسوِيَّة» فتعني أن العملية تعمل بالاتجاه المعاكس أيضاً: أي توزيع معقد يمكن تسويته وإرجاعه إلى غاوسي بعكس سلسلة التحويلات.
عائلتان من التدفقات: المستوية والشعاعية
التحدي الهندسي الأساسي هو أن حساب محدِّد جاكوبي لمصفوفة 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) أيضاً لمحدِّد جاكوبي.
كل عائلة بمفردها ليست شديدة التعبير، لكن حين نُكدّس عدداً كبيراً منها ونمزج بين المستوية والشعاعية، نستطيع تقريب توزيعات بالغة التعقيد.
التدفقات داخل المرمّز التلقائي المتغيّر: حد ELBO أكثر إحكاماً
الآن نصل إلى المكسب العملي: نستبدل التوزيع الغاوسي البسيط q(z|x) في المرمّز التلقائي المتغيّر بـتدفق تسوِيّ. شبكة المُرمِّز تظلّ تُخرج غاوسياً z₀ ~ N(μ, σ²)، لكن z₀ يمرّ بعدها عبر K خطوة تدفق لينتج zₖ. يصبح حد ELBO على النحو التالي:
أناقة هذه الصياغة تكمن في أننا نحتاج فقط إلى سحب عينة z₀ من الغاوسي البسيط (عبر )، ثم تمريرها أمامياً عبر التدفق وجمع حدود لوغاريتم محدِّد جاكوبي. لا نحتاج إلى عكس التدفق أثناء . والأهم أن معاملات التدفق يمكن أن تعتمد على البيانات: شبكة المُرمِّز تُخرج ليس فقط μ وσ بل أيضاً معاملات التدفق لكل مُدخل x، وبذلك نحصل على بتوزيع خلفي غني.
ما وراء الخطوات المنتهية: التدفقات متناهية الصِّغَر
من أعمق إسهامات الورقة ربطها بين التدفقات المنتهية وديناميكا الزمن المستمر. الفكرة: بدلاً من K خطوة منفصلة، تخيّل عدداً لا نهائياً من الخطوات متناهية الصِّغَر — مساراً سلساً من z₀ إلى zₖ تحكمه المعادلة التفاضلية dz/dt = f(z, t).
في هذا الإطار، يتطوّر لوغاريتم الكثافة وفق صيغة التغيير اللحظي للمتغيرات، التي تستبدل مجموع لوغاريتمات محدِّدات جاكوبي المنفصلة بتكامل تباعد حقل السرعة. هذا يربط التدفقات التسوِيَّة بعائلتين فعّالتين من الديناميكا:
تدفق لانجفان — يتبع تدرّج لوغاريتم الكثافة مع إضافة ضجيج غاوسي، فيسير على سطح الطاقة نحو مناطق الاحتمال العالي في التوزيع الخلفي. تخيّل كرةً تتدحرج في منحدر مع اهتزازات عشوائية تمنعها من الوقوع في حُفر محلية.
تدفق هاملتون — يُضيف متغيّرات زخم تمنح التدفق القدرة على اجتياز التوزيعات الخلفية المعقدة بكفاءة، كقرص بلا احتكاك ينزلق على سطح التوزيع الخلفي فيحافظ على طاقته ويغطّي مساحة أوسع بكثير من الانحدار التدرّجي وحده.
هذا المنظور المستمر ألهم لاحقاً المعادلات التفاضلية العصبية (Chen وآخرون، 2018) ونموذج FFJORD (Grathwohl وآخرون، 2018)، حيث يُصاغ التدفق كشبكة عصبية تُحدّد حقل السرعة ويُحَلّ بمكامل معادلات تفاضلية.
الفكرة في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
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 تُحكِم الحد الأدنى)لماذا غيّرت هذه الورقة مجرى النمذجة التوليدية
2014
NICE (ديه وآخرون)
تقدير المكونات المستقلة اللاخطي — طبقات اقتران حافظة للحجم بمحدِّد جاكوبي بديهي (= 1). أول بنية عميقة عكوسة قابلة للتطبيق عملياً.
2015
هذه الورقة (ريزيندي ومحمد)
أسّست إطار التدفقات التسوِيَّة للاستدلال المتغيّري، وقدّمت التدفقات المستوية والشعاعية. ربطت التدفقات المنتهية بديناميكا لانجفان وهاملتون.
2016
RealNVP (ديه وآخرون)
طبقات اقتران تآلفية بمقياس مُتعلَّم — عكوسة بالتصميم وسهلة حساب محدِّد جاكوبي. أول نموذج تدفق يُولِّد صوراً مقنعة فعلاً.
2016
IAF (كينغما وآخرون)
التدفق الانعكاسي الذاتي — وظّف البنية الذاتية الانحدارية لسحب عينات سريع بمصفوفات جاكوبي مثلثية. حسّن جودة التوزيع الخلفي في VAE بشكل مباشر.
2018
Glow (كينغما ودهاريوال)
التفافات عكوسة 1×1 مع بنية متعددة المقاييس. ولّدت وجوهاً عالية الدقة مع حساب دقيق لدالة الترجيح. أثبتت أن التدفقات تنافس شبكات GAN في جودة الصور.
2018
المعادلات التفاضلية العصبية وFFJORD
أخذت فكرة التدفق متناهي الصِّغَر إلى منتهاها: صِغ حقل السرعة بشبكة عصبية وحُلّه بمكامل معادلات تفاضلية. استخدم FFJORD مُقدِّر هَتشنسون للأثر بتكلفة O(D).
2020
النماذج التوليدية القائمة على دالة القيمة
ربطت عمليات الانتشار بمطابقة دالة القيمة والتدفقات التسوِيَّة المستمرة. بيّنت أن تعلّم دالة القيمة يُتيح التوليد دون الحاجة إلى حساب الكثافة صراحةً.
2022
مطابقة التدفق (ليبمان وآخرون)
إطار موحّد يربط التدفقات التسوِيَّة المستمرة بالنقل الأمثل. تدريب أبسط من النماذج القائمة على دالة القيمة، ويُشغِّل اليوم أحدث مولِّدات الصور.
المرجعRezende, D. J. & Mohamed, S.. Variational Inference with Normalizing Flows. ICML, 2015.
مصطلحات هذه الورقة
- التدفق التسوِيّNormalizing Flow
- الاستدلال الاحتمالي المتغيِّرVariational Inference
- تغيير المتغيراتChange of Variables
- عكوسInvertible
- مصفوفة جاكوبيJacobian
- التدفق المستويPlanar Flow
- التدفق الشعاعيRadial Flow
- الحد الأدنى للدليلEvidence Lower Bound (ELBO)
- الاحتمال البعدي التقريبيApproximate Posterior
- المتغير الكامنLatent Variable
- تقدير الكثافةDensity Estimation
- حيلة إعادة البَرمَتَةReparameterization Trick
- الاستدلال المُعمَّمAmortized Inference
- تباعد KLKL Divergence