النماذج التوليدية2013متوسط10 دقيقة قراءة
الترميز الذاتي بنهج بايز التبايُني
Auto-Encoding Variational Bayes
Kingma, D.P. · Welling, M. — ICLR
المشكلة
التقليدي يضغط البيانات إلى رمز حتمي ثابت، لكن المشكلة أن الناتج مليء بالثغرات — مناطق فارغة تُخرج نتائج مشوَّهة عند محاولة فكّ ترميزها. وفي المقابل، الاستدلال التبايُني التقليدي يحتاج اشتقاقات رياضية مخصصة لكل نموذج، ولا يتناسب مع البيانات الضخمة أو الشبكات العصبية العميقة.
الإسهام
الذاتي التبايُني (VAE) هو نموذج توليدي يُغلِّف المُرمِّز الذاتي بإطار احتمالي متين. المُرمِّز لا يُخرج متجهاً ثابتاً بل توزيعاً احتمالياً (متوسط + تباين)، وحيلة إعادة المَعلَمة تجعل سحب العيّنات قابلاً للتفاضل فيُدرَّب النظام بأكمله بالانتشار العكسي المعتاد. أما دالة الخسارة — الحدّ الأدنى للدليل (ELBO) — فتُوازن تلقائياً بين جودة إعادة البناء وانتظام الفضاء الكامن.
الأثر
أسّس الـ VAE الإطار الحديث للنماذج التوليدية العميقة. منه وُلد β-VAE للتمثيلات المفكَّكة، ومنه استُلهمت فكرة الفضاء الكامن التي تقوم عليها نماذج الانتشار (DDPM)، ولا يزال يشكِّل العمود الفقري لنماذج العالم في التعلم المعزز. كلما ولّد نظام ذكاء اصطناعي محتوى جديداً، أو انتقل بسلاسة بين نقطتين، أو «تخيّل» شيئاً لم يره — فالفضاء الكامن الاحتمالي للـ VAE هو الجدّ الأول لتلك القدرة.
تخيّل أن المُرمِّز الذاتي التقليدي آلة تصوير وثائق: يضغط كل مستند إلى رقم فهرسة ويسترجعه بدقة — لكن لو طلبت رقماً يقع بين مستندَيْن ستحصل على بقعة مشوَّشة لا معنى لها.
يستبدل خزانة الملفات بـسَرب من اليراعات: كل مستند يبث وهجاً خافتاً حول موقعه، والأوهاج المتداخلة تملأ الفراغات. مُدّ يدك إلى أي منطقة مضيئة وستسحب مستنداً متماسكاً جديداً يمزج سمات جيرانه.
المشكلة: المُرمِّز الذاتي يحفظ ولا يتخيّل
المُرمِّز الذاتي العادي يُمرِّر المُدخَل عبر ليحصل على رمز كامن ، ثم يُعيد بناء من هذا الرمز. الهدف هو تقليل — وهو يتقن ذلك فعلاً. لكن الفضاء الكامن الذي يبنيه يعاني من خلل جوهري: الرموز جُزر متناثرة يفصل بينها محيط ميّت.
لو اخترت نقطة تقع بين رمزَيْن وحاولت فكّ ترميزها، ستحصل على ضوضاء لا على مزيج ذي معنى. السبب بسيط: المُرمِّز الذاتي لم يتعلّم قط ماذا تعني كلمة «بين» لأنه لم يُجبَر على ملء الفراغات. ما حفظه هو جدول بحث ثابت وليس .
ما نحتاجه هو فضاء كامن تُنتج فيه كل نقطة شيئاً ذا معنى — مشهد متصل يمكن التنقل فيه بحرية. المُرمِّز الذاتي التبايُني يحقق ذلك بتغيير جذري واحد: بدلاً من ترميز كل مُدخَل كنقطة، رمِّزه كتوزيع احتمالي.
الأساس البايزي: لماذا نستخدم التوزيعات؟
المُرمِّز الذاتي التبايُني مبنيّ على . الفكرة أننا نفترض وجود عملية توليدية خفية: الطبيعة تختار أولاً من بسيط (غاوسي معياري)، ثم تُولِّد البيانات عبر (أي ). بعد أن نُلاحظ بيانات ، نريد حساب — يعني: «أيّ قيم كان يمكن أن تُنتج هذه ؟» — لكن حسابه يتطلب تكاملاً على جميع قيم الممكنة، وهذا عملياً.
الحل: نُقرِّب التوزيع البَعدي بـمُرمِّز مُتعلَّم يُخرج لكل مُدخَل. هذا النهج يُسمّى — نستبدل حساباً دقيقاً مستحيلاً بتقريب قابل .
بنية الـ VAE: رمِّز سحابةً واسحب منها عيّنة
يتألّف المُرمِّز الذاتي التبايُني من شبكتين عصبيتين تعملان معاً:
المُرمِّز يستقبل مُدخَلاً ويُخرج متجهَيْن: المتوسط ولوغاريتم التباين . هذان المتجهان يرسمان معاً سحابة غاوسية في الفضاء الكامن — أي تقدير النموذج للمنطقة التي ينتمي إليها هذا المُدخَل.
مفكّ الترميز يأخذ نقطة واحدة مسحوبة من تلك السحابة ويحاول إعادة بناء المُدخَل الأصلي. إن كان صورة فيُخرج قيم شدّة البكسلات، وإن كانت بيانات مستمرة يُخرج معاملات توزيع غاوسي.
وهنا يكمن السرّ: لأننا نُرمِّز توزيعات لا نقاطاً، فإن سُحب المُدخلات المتشابهة تتداخل وتملأ الفضاء الكامن بمحتوى ذي معنى في كل مكان.
الـ ELBO: دالة خسارة واحدة بقوّتين متعاكستين
لا نستطيع تعظيم الحقيقي مباشرة لأن ذلك يتطلب تكاملاً على جميع قيم . بدلاً من ذلك نُعظِّم حداً أدنى قابلاً للحساب يُسمّى . تخيّله كأرضية نرفعها تحت الهدف الحقيقي: كلما رفعنا الأرضية ارتفع الهدف معها حتماً.
ينقسم الـ ELBO إلى حدَّيْن يشدّان في اتجاهين متعاكسين، وهذا التوتر بينهما هو ما يُنتج فضاءً كامناً متوازناً:
تخيّل مدربَيْن يتناوبان على رياضي واحد. مدرب إعادة البناء يُصرّ على الدقة: «أعِد إنتاج المُدخَل كما هو بالضبط!» بينما مدرب يُصرّ على البساطة: «أبقِ تمثيلاتك قريبة من التوزيع الغاوسي المعياري ولا تُفرط في التخصيص!» النموذج عليه إرضاء الاثنين معاً، ونقطة التوازن المثلى هي فضاء كامن مُعبِّر ومنظَّم في آنٍ واحد.
حيلة إعادة المَعلَمة: كيف نجعل العشوائية قابلة للتفاضل
هنا تظهر عقبة حاسمة: المُرمِّز يُخرج توزيعاً احتمالياً ونحن نسحب منه . لكن السحب العشوائي عملية غير قابلة للتفاضل — لا يمكنك تمرير عبر مولّد أرقام عشوائية. وبدون تدرُّج لن يتعلّم المُرمِّز شيئاً.
تحلّ هذه المشكلة بأناقة. بدلاً من سحب مباشرة من ، نفعل التالي:
-
نسحب ضوضاء — مصدر عشوائي خارجي ثابت
-
نحسب
هكذا يصبح دالة حتمية في و (وهما مخرجات المُرمِّز القابلة للتفاضل) مضافاً إليها مصدر ضوضاء خارجي لا يحتاج تدرُّجات. العشوائية لا تزال موجودة لكنها انتقلت خارج . تخيّلها كنهر: لا نتحكّم في المطر، لكننا نبني قنوات توجّه الماء حيث نريد.
حدّ تباعد KL بصيغة مغلقة
حين يكون كلٌّ من والتوزيع القَبلي غاوسيَّيْن، يمتلك تباعد KL حلاً مغلقاً أنيقاً دون الحاجة لسحب عيّنات. لفضاء كامن ذي بُعداً:
الثمرة: فضاء كامن قابل للاستكشاف
ضغط تباعد KL نحو التوزيع القَبلي لا يحافظ على استقرار التدريب فحسب، بل يمنح الفضاء الكامن خاصيتين استثنائيتين:
الاتصال — النقاط المتجاورة في الفضاء الكامن تُفكّ إلى مخرجات متشابهة. تنقّل بسلاسة من الرقم «3» إلى «8» وسترى الرقم يتحوّل تدريجياً إلى الآخر دون قفزات مفاجئة.
الاكتمال — كل منطقة في الفضاء الكامن تُفكّ إلى شيء معقول. لا توجد «مناطق ميتة» تُنتج ضوضاء. السُّحب الغاوسية المتداخلة تضمن تغطية الفضاء بأكمله.
هاتان الخاصيتان تجعلان الفضاء الكامن أداة إبداعية: يمكنك الانتقال تدريجياً بين نقطتَيْ بيانات، أو توليد أمثلة جديدة كلياً، أو استكشاف الفضاء لاكتشاف ما تعلّمه النموذج.
الفكرة نفسها في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import torch
import torch.nn as nn
import torch.nn.functional as F
class VAE(nn.Module):
def __init__(self, input_dim=784, latent_dim=20):
super().__init__()
# المُرمِّز: مُدخَل → طبقة مخفية → (المتوسط، لوغاريتم التباين)
self.fc1 = nn.Linear(input_dim, 400)
self.fc_mu = nn.Linear(400, latent_dim)
self.fc_logvar = nn.Linear(400, latent_dim)
# مفكّ الترميز: z → طبقة مخفية → المُدخَل المُعاد بناؤه
self.fc3 = nn.Linear(latent_dim, 400)
self.fc4 = nn.Linear(400, input_dim)
def encode(self, x):
h = F.relu(self.fc1(x))
return self.fc_mu(h), self.fc_logvar(h) # مخرَجان!
def reparameterize(self, mu, log_var):
std = torch.exp(0.5 * log_var) # σ = exp(log_var / 2)
eps = torch.randn_like(std) # ε ~ N(0, I)
return mu + std * eps # z = μ + σ·ε
def decode(self, z):
h = F.relu(self.fc3(z))
return torch.sigmoid(self.fc4(h)) # احتمالات البكسلات
def forward(self, x):
mu, log_var = self.encode(x)
z = self.reparameterize(mu, log_var)
return self.decode(z), mu, log_var
# خسارة ELBO = إعادة البناء + تباعد KL
def vae_loss(recon_x, x, mu, log_var):
recon = F.binary_cross_entropy(recon_x, x, reduction='sum')
kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())
return recon + klالتدريب: خوارزمية AEVB
خوارزمية الترميز الذاتي بنهج بايز التبايُني (AEVB) بسيطة بشكل لافت. في كل :
-
ترميز: مرِّر كل نقطة بيانات عبر المُرمِّز للحصول على و
-
سحب عيّنة: اسحب باستخدام حيلة إعادة المَعلَمة
-
فكّ ترميز: أعِد بناء من عبر مفكّ الترميز
-
حساب خسارة الـ ELBO: خطأ إعادة البناء + تباعد KL
-
والتحديث: حدِّث (مفكّ الترميز) و (المُرمِّز) معاً
هذا كل شيء. المعتاد (أو ) يتكفّل بالباقي. لا خطوات ، ولا سلاسل ، ولا اشتقاقات مخصصة لكل نموذج. الخوارزمية تتوسّع لملايين نقاط البيانات لأنها تعمل بالدُفعات الصغيرة — تماماً كتدريب أي شبكة عصبية أخرى.
التوليد: كيف نُنتج بيانات جديدة
بعد انتهاء التدريب، يصبح التوليد في غاية البساطة: اسحب من التوزيع القَبلي ومرِّره عبر مفكّ الترميز. بما أن حدّ تباعد KL أجبر المُرمِّز أثناء التدريب على مطابقة التوزيع القَبلي، فإن مفكّ الترميز رأى عيّنات من ذلك التوزيع ويعرف كيف يتعامل معها.
هذا يختلف جذرياً عن التي تحتاج حلقة تدريب تنافسية. الـ VAE يُولِّد عبر : اسحب من التوزيع القَبلي ثم فكّ الترميز. لا ، ولا ، ولا عدم استقرار في التدريب.
الربط بـخوارزمية التوقُّع-التعظيم الاستدلال التبايُن
إطار الـ VAE يرتبط مباشرة بفكرتين تقليديتين راسختين:
خوارزمية التوقُّع-التعظيم تتناوب بين استنتاج المتغيِّرات الكامنة () وتحديث معاملات النموذج (). الـ VAE ينفِّذ الخطوتين معاً عبر — فالمُرمِّز يؤدي «خطوة توقُّع عصبية» ومفكّ الترميز يؤدي «خطوة تعظيم عصبية».
الاستدلال التبايُني التقليدي يتطلب اشتقاق معادلات تحديث يدوية لكل نموذج على حدة. الفكرة المحورية في الـ VAE: دَعِ الشبكات العصبية تُمثِّل كلاً من التوزيع البَعدي التقريبي والنموذج التوليدي، ثم حسِّن الكل بـالانتشار العكسي. هذا ما يُسمّى — شبكة المُرمِّز تتعلّم إجراء الاستدلال لـأيّ مُدخَل عبر واحد، بدلاً من تشغيل حلقة أمثَلَة مستقلة لكل نقطة بيانات.
لماذا أحدث هذا العمل فرقاً
2013
المُرمِّز الذاتي التبايُني (هذه الورقة)
حيلة إعادة المَعلَمة مكّنت من تدريب النماذج التوليدية العميقة ذات المتغيرات الكامنة من البداية إلى النهاية. نُشرت بالتزامن مع نهج مشابه لـ Rezende وآخرين.
2014
الشبكات التوليدية التنافسية (GAN)
قدّم Goodfellow بديلاً تنافسياً: مولِّد ومُميِّز يتنافسان. النتيجة صور أوضح لكن بلا مُرمِّز ولا استدلال على المتغيرات الكامنة، مع عدم استقرار في التدريب.
2017
β-VAE
تكبير وزن تباعد KL فوق 1 يفصل أبعاد الفضاء الكامن بحيث يلتقط كل بُعد عامل تغيُّر واحداً (وضعية، لون، حجم). هذا أتاح التحكّم الدقيق في التوليد.
2017
VQ-VAE
استبدل الرموز الكامنة الغاوسية المستمرة بمدخلات من كتاب رموز منفصل، فجمع إطار الـ VAE مع التكميم المتجهي لتوليد صور وصوت بجودة عالية.
2020
DDPM (نماذج الانتشار)
نماذج إزالة الضوضاء بالانتشار تعمل في إطار يشبه الفضاء الكامن. مرحلة المُرمِّز الذاتي في الـ VAE أصبحت لاحقاً ركيزة أساسية للانتشار الكامن (Stable Diffusion).
2018
نماذج العالم
استخدم Ha و Schmidhuber الـ VAE لضغط إطارات اللعبة إلى تمثيل كامن، ثم درّبا عميل تعلّم معزّز بالكامل داخل هذا «العالم الحُلمي» الكامن.
2018
التدفقات التسوِّية
وسّعت فكرة الـ VAE بتحويلات قابلة للعكس تسمح بحساب الأرجحية بدقة تامة — متجاوزةً مشكلة «ضبابية المخرجات».
إرث الـ VAE لا يقتصر على النموذج نفسه — بل يمتدّ إلى الفكرة الجوهرية: أنه بالإمكان تدريب نماذج توليدية عميقة بـدالة خسارة بسيطة ومتينة نظرياً. كل نموذج ذي متغيِّرات كامنة جاء بعده — من نماذج الانتشار إلى VQ-VAE إلى نماذج العالم — مدين لورقة 2013 التي أظهرت كيف نجعل العشوائية قابلة للتفاضل.
المرجعKingma, Welling. Auto-Encoding Variational Bayes. ICLR, 2014.
مصطلحات هذه الورقة
- المرمّز التلقائي المتغير الاحتماليVariational Autoencoder (VAE)
- حيلة إعادة البَرمَتَةReparameterization Trick
- الحد الأدنى للدليلEvidence Lower Bound (ELBO)
- الاستدلال الاحتمالي المتغيِّرVariational Inference
- الاستدلال المُعمَّمAmortized Inference
- خطأ إعادة البناءReconstruction Error
- تباعد KLKL Divergence
- الاحتمال البعدي التقريبيApproximate Posterior
- السحب الأصليAncestral Sampling
- انهيار الاحتمال البعديPosterior Collapse