النماذج التوليدية2016متوسط13 دقيقة قراءة
الشبكات العصبية التكرارية على مستوى البكسل
Pixel Recurrent Neural Networks
van den Oord, A. · Kalchbrenner, N. · Kavukcuoglu, K. — ICML
المشكلة
تُعدّ نمذجة توزيع الصور الطبيعية من أصعب المسائل في التعلّم غير المُوجَّه. قبل كانت النماذج التوليدية تقع في مفارقة: إما أن تكون بسيطة بما يكفي لحساب لكنها عاجزة عن التقاط تعقيد الصور (كمزيج الغاوسيات)، أو أن تُنتج صوراً جيدة لكن دون أي طريقة لحساب الأرجحية (كشبكات GAN). لم يكن هناك نموذج واحد يجمع ثلاثة أهداف معاً: قدرة تعبيرية تلتقط غنى الصور الطبيعية، وحساب دقيق للأرجحية دون تقريب، وقابلية التوسّع إلى مجموعات بيانات ضخمة كـ ImageNet.
الإسهام
تقوم فكرة PixelRNN على تمثيل التوزيع المشترك لبكسلات الصورة بوصفه حاصل ضرب توزيعات شرطية عبر ، بحيث يُتنبَّأ بكل بكسل بالترتيب وفق . تطرح الورقة بنيتَي LSTM ثنائيتَي الأبعاد — — لالتقاط العلاقات المكانية في الصورة. كما تقترح بديلاً التفافياً أسرع يعتمد على الالتفافات المُقنَّعة. تستخدم هذه النماذج توزيع softmax منفصلاً من 256 فئة لكل قناة لونية مع اتصالات تخطّي عبر ما يصل إلى 12 طبقة تكرارية، وحقّقت أفضل أرجحية لوغاريتمية على MNIST وCIFAR-10 وImageNet.
الأثر
أثبتت PixelRNN أنّ النماذج الذاتية الانحدارية قادرة على منافسة أقوى المناهج في توليد الصور. ألهمت مباشرةً WaveNet التي طبّقت المبدأ نفسه على الصوت عيّنةً بعيّنة، وVQ-VAE الذي استخدم PixelCNN كتوزيع مسبق على رموزه الكامنة، وعائلة كاملة من النسخ المحسَّنة من PixelCNN. الفكرة بأنّ الصور يمكن توليدها بكسلاً تلو الآخر مع حساب دقيق للأرجحية فتحت مساراً جديداً مختلفاً تماماً عن شبكات GAN والمُرمِّزات التلقائية المتغيِّرة.
تخيّل رسّاماً يلتزم بترتيب صارم: يبدأ من الزاوية العلوية اليسرى ويتقدّم نقطة بنقطة، من اليسار إلى اليمين، صفاً بصف. قبل كل نقطة يتوقّف وينظر إلى كل ما رسمه على اللوحة حتى الآن ويسأل نفسه: «ما اللون الأنسب هنا؟»
رسّام مبتدئ سيختار الألوان عشوائياً. لكن رسّاماً تدرَّب على آلاف الصور يُدرك أنّ بكسلات السماء عادةً تتبعها بكسلات سماء، وأنّ الحواف تمتدّ في منحنيات ناعمة، وأنّ الظلال تسقط في اتجاهات متوقَّعة.
PixelRNN هو ذلك الرسّام المُدرَّب — استوعبت الأنماط الإحصائية للصور الطبيعية بعمقٍ يكفي لأن ترسم صوراً جديدة، نقطةً بنقطة، تبدو واقعية بشكل مذهل.
التحدي: كيف تُنمذج صورة؟
لنأخذ صورة ملوّنة صغيرة بأبعاد 32×32: هذه الصورة تتكوّن من 3,072 قيمة (32 × 32 × 3 قنوات). كل قناة في كل تأخذ عدداً صحيحاً بين 0 و255، أي أنّ عدد الصور الممكنة نظرياً هو — رقم يتجاوز عدد الذرات في الكون المرصود بفوارق لا تُحصى.
المطلوب من أن يتعلّم أيّ هذه التوليفات الهائلة تشبه صوراً حقيقية. قبل PixelRNN، كان لكل منهج رئيسي ثغرة جوهرية:
- يوفّر حدوداً قابلة للحساب على الأرجحية، لكن صوره تميل إلى الضبابية لأنّ يُجري نوعاً من المتوسط على عدم اليقين في .
- تُنتج صوراً حادة الملامح، لكنها لا تعطيك أرجحية مطلقاً — ليس بإمكانك قياس مدى «احتمالية» صورة وفق النموذج.
- نماذج المزيج قابلة للحساب لكنها أبسط من أن تلتقط تعقيد الصور الطبيعية.
السؤال الذي طرحه المؤلفون: هل نستطيع نمذجة التوزيع المشترك الدقيق لجميع البكسلات بطريقة قابلة للحساب وقابلة للتوسّع؟
الفكرة الجوهرية: الصورة بوصفها تسلسلاً
الفكرة في صميمها بسيطة بشكل مدهش: استخدم قاعدة السلسلة في الاحتمالات لتفكيك التوزيع المشترك لجميع البكسلات إلى حاصل ضرب توزيعات شرطية. عملياً، تُفرد الصورة ثنائية الأبعاد في تسلسل أحادي البُعد عبر مسحها من اليسار إلى اليمين ومن الأعلى إلى الأسفل — ما يُعرف بـالمسح السطري — ثم يُنمذَج كل بكسل كـ مشروط بجميع البكسلات التي سبقته.
بهذا التحويل تتحوّل مسألة توليد الصور إلى مسألة تنبؤ تسلسلي — وهي تحديداً نوع المسائل التي صُمّمت شبكات لحلّها. والنقطة الحاسمة أنّ هذا التفكيك دقيق تماماً: لا تقريب ولا حدود دنيا. حاصل ضرب جميع الاحتمالات الشرطية هو ذاته الاحتمال المشترك.
الأمر أشبه بلعبة أحجية: الشكل النهائي يظهر تدريجياً كلّما وضعتَ قطعة جديدة تتوافق مع ما سبقها. البكسل الأول حرّ تماماً — يختار النموذج لونه دون قيود. البكسل الثاني يعتمد على الأول. البكسل رقم 100 يعتمد على الـ 99 بكسلاً التي سبقته. وحين يصل النموذج إلى البكسل الأخير، يكون كل بكسل سابق قد أسهم في تشكيل القرار.
القنوات اللونية: أحمر، ثم أخضر، ثم أزرق
كل بكسل ليس رقماً واحداً بل ثلاثة أرقام: أحمر وأخضر وأزرق. لذلك يُفكّك النموذج توزيع كل بكسل إلى سلسلة من ثلاثة تنبؤات فرعية متتابعة:
القناة الحمراء مشروطة فقط بالبكسلات السابقة. القناة الخضراء تستفيد من جميع البكسلات السابقة بالإضافة إلى قيمة الأحمر في البكسل الحالي. القناة الزرقاء تستفيد من كل ذلك بالإضافة إلى قيمة الأخضر الحالية أيضاً.
ثلاث بنيات، مبدأ واحد
تقدّم الورقة ثلاث بنيات كلّها تُطبّق مبدأ نفسه، لكنها تختلف في الطريقة التي تلتقط بها سياق البكسلات السابقة:
Row LSTM يعالج الصورة صفاً بصف من الأعلى إلى الأسفل. في كل صف، يُحسب مكوّن الإدخال باستخدام أحادي البُعد مُقنَّع (لا يرى إلا البكسلات السابقة)، بينما ينتقل مكوّن الحالة تكرارياً من الصف الذي فوقه. النتيجة مثلثي الشكل — يرى كل ما هو فوقه لكن تبقى لديه نقطة عمياء في أعلى اليمين.
Diagonal BiLSTM يعالج الصورة على طول أقطارها عبر حيلة هندسية تُسمّى التحريف: كل صف يُزاح بموضع واحد بالنسبة لسابقه، فتتحوّل الشبكة المستطيلة إلى متوازي أضلاع. شبكتا LSTM تمسحان من زاويتين متقابلتين ثم تُدمَج مخرجاتهما. هذا يعطي الحقل الاستقبالي المثالي: كل بكسل سابق مرئي في كل طبقة دون أي نقاط عمياء.
PixelCNN يستغني عن التكرار كلياً ويستبدله بـ مُكدَّسة. ميزته أنّ أسرع بكثير لأنّ كل البكسلات تُحسب بالتوازي، لكن حقله الاستقبالي محدود بعدد الطبقات، فيلتقط سياقاً أقل من البنيتين التكراريتين.
Row LSTM: صفوف سريعة ورؤية مثلثية
Row LSTM طبقة أحادية الاتجاه تمرّ على الصورة صفاً بصف من الأعلى إلى الأسفل. في كل صف، تُحسب مُدخلات جميع المواضع دفعةً واحدة باستخدام التفاف مُقنَّع بأبعاد k×1 — وهذه هي حيلة التوازي. بعدها تنتقل الحالة التكرارية من بكسل إلى آخر داخل الصف.
تخيّل الأمر كآلة كاتبة تقرأ سطراً واحداً في كل مرة: تستطيع رؤية الصفحة كلها فوق السطر الحالي، لكنها في السطر الحالي تكتب من اليسار إلى اليمين وكل حرف يستفيد ممّا قبله. الالتفاف k×1 يسمح لها بإلقاء نظرة على بضعة بكسلات من الصف الذي فوقها، فيمنحها سياقاً مكانياً محلياً.
Diagonal BiLSTM: سياق كامل ومسح قطري
Diagonal BiLSTM يحقّق الهدف المثالي: في كل طبقة، يرى كل بكسل جميع البكسلات السابقة — بلا أي نقاط عمياء. السر في ذلك تحويل هندسي ذكي اسمه التحريف (Skewing).
الفكرة أنّ كل صف في خريطة الإدخال يُزاح بموضع واحد نسبةً إلى الصف الذي يسبقه، فتتحوّل الشبكة المستطيلة إلى شكل متوازي أضلاع. في هذا الفضاء المحرَّف، تصبح المعالجة عموداً بعمود مكافئة تماماً لمعالجة الصورة الأصلية على طول أقطارها. شبكتا LSTM اتجاهيتان تمسحان من زاويتين متقابلتين — واحدة من أعلى اليسار والأخرى من أعلى اليمين — ثم تُدمج السمات الناتجة.
بعد الحساب، تُعاد الخريطة إلى شكلها المستطيل الأصلي. ما يميّز هذا التصميم أنّ الالتفاف العمودي بأبعاد 2×1 في الفضاء المحرَّف يعالج بكسلاً واحداً من كل قطر في كل خطوة، فيحافظ على حقل الاعتمادية الكامل.
الالتفافات المُقنَّعة: حارس الترتيب الذاتي الانحداري
في الالتفاف العادي، ترى النواة بكسلات في جميع الاتجاهات — بما فيها بكسلات لم يولّدها النموذج بعد. هذا يكسر قيد النمذجة الذاتية الانحدارية: المفروض أنّ كل بكسل لا يعتمد إلا على البكسلات السابقة فقط.
الحل هو التقنيع: تصفير أوزان النواة التي تصل إلى البكسل الحالي أو أي بكسل لاحق. يُستخدم نوعان من الأقنعة:
- القناع A (في الطبقة الأولى): يحجب بكسل المركز وكل ما بعده، فالنموذج لا يرى القيمة التي يحاول التنبؤ بها.
- القناع B (في الطبقات التالية): يسمح ببكسل المركز. السبب أنّ السمات عند الموضع (i, j) بعد الطبقة الأولى أصبحت تمثّل ملخصاً لسياق ماضٍ صالح، فتضمينها لا ينتهك القيد.
عملياً، يُصفّر القناع أوزاناً محددة في مرشّح الالتفاف بعد كل تحديث لـ، مما يضمن الحفاظ على خاصية الترتيب الذاتي الانحداري في كل الأوقات.
PixelCNN: مقايضة السياق بالسرعة
PixelCNN يستغني عن التكرار كلياً ويعتمد بدلاً منه على التفافات مُقنَّعة مُكدَّسة فوق بعضها. بما أنّ الالتفافات لا تحتاج إلى ترتيب تسلسلي داخل الطبقة الواحدة، يمكن حساب سمات جميع البكسلات بالتوازي — وهذا يجعل التدريب أسرع بفارق كبير مقارنةً بـ Row LSTM أو Diagonal BiLSTM.
المقايضة واضحة: الحقل الاستقبالي. كل طبقة التفافية لا توسّع الحقل الاستقبالي إلا بمقدار حجم النواة، فحتى بعد تكديس طبقات كثيرة قد لا يرى PixelCNN البكسلات البعيدة. أمّا بنيتا LSTM فتستطيعان نظرياً التقاط علاقات عبر الصورة بأكملها من خلال حالتهما التكرارية.
في تجارب الورقة، حقّق Diagonal BiLSTM أفضل (3.00 بت/بُعد على CIFAR-10)، يليه Row LSTM بـ 3.06، ثم PixelCNN أخيراً بـ 3.14 — وهو بالضبط ترتيب أحجام حقولها الاستقبالية. هذه النتيجة أكّدت بوضوح أنّ توسيع الحقل الاستقبالي يرفع جودة التوليد مباشرةً.
اتصالات التخطّي في الشبكات التكرارية العميقة
نماذج PixelRNN تستخدم حتى 12 طبقة LSTM مُكدَّسة فوق بعضها. تدريب شبكات تكرارية بهذا العمق صعب جداً لأنّ التدرُّجات قد تتلاشى أو تنفجر أثناء مرورها عبر الطبقات. لذلك تتبنّى الورقة بين طبقات LSTM: مُدخلات كل طبقة تُضاف إلى مُخرجاتها قبل تمريرها إلى الطبقة التالية.
وحدة التخطّي تعمل كالتالي: خريطة الإدخال تحتوي 2h سمة. طبقة LSTM تختزلها إلى h سمة (وهي مخرجات البوّابات). ثم يُعيد إسقاط المخرجات إلى 2h سمة، ويُضاف الإدخال الأصلي. هذا المسار المختصر يسمح للتدرُّجات بالتدفق مباشرةً عبر الشبكة دون المرور بكل البوّابات، مما يُمكّن من تدريب نماذج عميقة بثبات.
PixelRNN متعدد المقاييس: من الخشن إلى الدقيق
الإصدار من PixelRNN يولّد الصور بطريقة تدريجية من العام إلى التفصيلي. في المرحلة الأولى، يولّد PixelRNN غير مشروط صورة صغيرة بأبعاد s×s. ثم في المرحلة الثانية، يأخذ PixelRNN مشروط هذه الصورة الصغيرة كسياق (بعد تكبيرها عبر طبقات ) ويولّد صورة أكبر بأبعاد n×n.
الأمر يشبه الرسم التخطيطي: أولاً ترسم الملامح العامة بدقة منخفضة — أين يلتقي الأفق بالأرض، وأين يقع الموضوع الرئيسي. ثم تقترب وتملأ التفاصيل مستخدماً الرسم الأوّلي كدليل.
هذا النهج يمكّن النموذج من التقاط البنية الشاملة في المقياس الخشن (حيث العلاقات البعيدة تمتد على بكسلات أقل)، ثم ملء التفاصيل الدقيقة في المقياس الأعلى دقة.
المبدأ الذاتي الانحداري في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def create_mask_a(kernel_size):
"""القناع A: يحجب بكسل المركز وكل ما بعده."""
mask = np.ones((kernel_size, kernel_size))
center = kernel_size // 2
# احجب ما بعد المركز في صفه وكل الصفوف أسفله
mask[center, center:] = 0
mask[center+1:, :] = 0
return mask
def create_mask_b(kernel_size):
"""القناع B: يسمح ببكسل المركز ويحجب ما بعده."""
mask = create_mask_a(kernel_size)
center = kernel_size // 2
mask[center, center] = 1 # اسمح لبكسل المركز
return mask
def masked_conv(image, kernel, mask):
"""طبّق التفافاً مُقنَّعاً — جوهر PixelCNN."""
return convolve2d(image, kernel * mask, mode='same')
def pixel_probability(model, image, position):
"""
للبكسل عند `position`، أعِد متجه احتمالات من 256 قيمة.
النموذج لا يرى إلا البكسلات السابقة في ترتيب المسح السطري.
"""
features = model.forward(image) # طبقات التفاف مُقنَّعة
logits = features[position] # 256 درجة خام
return softmax(logits) # 256 احتمال
# التوليد: أخذ عيّنة بكسل واحد في كل مرة، يسار←يمين، أعلى←أسفل
# التدريب: كل البكسلات تُحسب بالتوازي (التلقين المُوجَّه)التدريب مقابل التوليد: تعلّم متوازٍ ورسم تتابعي
هناك تباين جوهري بين مرحلتَي التدريب والتوليد لا بدّ من فهمه:
في التدريب، الصورة المستهدفة معروفة بالكامل مسبقاً. وبما أنّ الالتفافات المُقنَّعة تمنع كل موضع من رؤية البكسلات اللاحقة، يمكن حساب تنبؤات جميع البكسلات في تمريرة أمامية واحدة — توازٍ كامل. دالة الخسارة هي مجموع عند كل موضع بكسل.
في التوليد، الوضع مختلف تماماً: يجب أخذ عيّنة من كل بكسل قبل أن يتمكّن النموذج من التنبؤ بالبكسل التالي. لصورة بأبعاد 32×32، يعني هذا 3,072 تمريرة أمامية متتابعة (32 × 32 × 3 قنوات). النتيجة أنّ التوليد بطيء — لكن التدريب يبقى سريعاً وفعّالاً.
هذا التباين بين التدريب والتوليد سمة أساسية في النماذج الذاتية الانحدارية: تدريبها سهل ومتوازٍ لكن أخذ العيّنات منها بطيء وتتابعي.
النتائج ودلالتها
حقّقت الورقة أفضل أرجحية لوغاريتمية على كل معيار اختبرت عليه:
- MNIST (ثنائي): 79.20 نات (Diagonal BiLSTM)، مقارنةً بـ 84.55 لأفضل نتيجة سابقة (DRAW).
- CIFAR-10: 3.00 بت/بُعد (Diagonal BiLSTM)، مقارنةً بـ 3.24 لأفضل نتيجة سابقة (NICE).
- ImageNet 32×32: أول معايير أرجحية تُنشر على ImageNet لنماذج توليدية.
الترتيب بين البنيات كان ثابتاً في كل التجارب: Diagonal BiLSTM ثم Row LSTM ثم PixelCNN. وهو بالضبط ترتيب أحجام حقولها الاستقبالية، مما يؤكد أنّ توسيع السياق المتاح لكل بكسل يرفع جودة التوليد مباشرةً. الصور المولَّدة بدت حادة ومتنوعة ومتّسقة على المستوى الشامل — تحسّن واضح مقارنةً بالضبابية التي عُرفت بها المُرمِّزات التلقائية المتغيِّرة آنذاك.
لماذا غيّرت هذه الورقة المشهد — ثورة النماذج الذاتية الانحدارية
أثبتت PixelRNN أنّ والتوليد عالي الجودة يمكن أن يتحقّقا معاً في نموذج واحد. كان هذا تحوّلاً حقيقياً في طريقة التفكير. قبل هذه الورقة، سيطرت على مشهد النمذجة التوليدية الشبكات التوليدية التنافسية (صور حادة لكن بلا أرجحية) والمُرمِّزات التلقائية المتغيِّرة (حد أدنى للأرجحية لكن صور ضبابية). PixelRNN شقّت مساراً ثالثاً: نماذج ذاتية الانحدار بأرجحيات دقيقة وقابلة للحساب.
أفكار هذه الورقة امتدّت إلى ما هو أبعد من الصور بكثير. التفكيك الذاتي الانحداري نفسه والبنية المُقنَّعة طُوِّعا في عدة مجالات:
- الصوت: WaveNet طبّقت المبدأ نفسه على الموجات الصوتية عيّنةً بعيّنة، فأنتجت كلاماً بجودة لم تُسمع من قبل.
- الرموز الكامنة المنفصلة: VQ-VAE استخدم PixelCNN كتوزيع مسبق قوي على دفتر رموزه المنفصل، جامعاً بين نقاط قوة والنماذج الذاتية الانحدارية.
- نماذج اللغة: مبدأ النمذجة الذاتية الانحدارية بترتيب المسح السطري مطابق مفاهيمياً للنمذجة اللغوية من اليسار إلى اليمين، مما يربط هذا العمل بعائلة GPT.
2016
PixelRNN و PixelCNN
أرست النمذجة الذاتية الانحدارية للصور بأرجحية دقيقة، وقدّمت الالتفافات المُقنَّعة وشبكات LSTM ثنائية الأبعاد لتوليد الصور بكسلاً ببكسل.
2016
WaveNet
نقلت المبدأ الذاتي الانحداري من PixelRNN إلى الموجات الصوتية الخام، فولّدت كلاماً عيّنةً بعيّنة بطبيعية مذهلة.
2016
Gated PixelCNN
أضاف تنشيطات بوّابية وعالج النقطة العمياء في الحقل الاستقبالي لـ PixelCNN، فوصل إلى جودة PixelRNN بسرعة الشبكات الالتفافية.
2017
PixelCNN++
استبدل توزيع softmax ذا الـ 256 فئة بمزيج من التوزيعات اللوجستية لالتقاط استمرارية قيم البكسل، وحسّن الكفاءة والجودة معاً.
2017
VQ-VAE
دمج التكميم المتجهي مع المُرمِّز التلقائي، واستخدم PixelCNN كتوزيع مسبق على الرموز الكامنة المنفصلة — جامعاً بين عالمَي المُرمِّزات التلقائية والنماذج الذاتية الانحدارية.
خوارزمية PixelRNN خطوة بخطوة
المرجعvan den Oord, Kalchbrenner, Kavukcuoglu. Pixel Recurrent Neural Networks. ICML, 2016.
مصطلحات هذه الورقة
- النموذج التوليدي التراجعيAutoregressive Model
- الأرجحيةLikelihood
- البكسل (عنصر الصورة)Pixel
- شبكة الذاكرة الطويلة قصيرة المدىLSTM
- الالتفاف المُقنَّعMasked Convolution
- الوصلة التجاوزيةResidual Connection
- سوفت ماكسSoftmax
- المسح السطريRaster Scan
- الحقل الاستقبالي للعصبونReceptive Field
- النموذج التوليديGenerative Model