النماذج التوليدية2018متوسط9 دقيقة قراءة
النمو التدريجي لشبكات GAN لتحسين الجودة والاستقرار والتنوع
Progressive Growing of GANs for Improved Quality, Stability, and Variation
Karras, T. · Aila, T. · Laine, S. · Lehtinen, J. — ICLR
المشكلة
بحلول 2017 كانت تنتج صوراً مقبولة عند دقة صغيرة (64×64 إلى 256×256)، لكن كل محاولة للوصول إلى دقة 1024×1024 كانت تنتهي بالفشل. السبب أن المولّد والمميِّز يدخلان في سباق تسلّح مدمِّر: التدرّجات تنفجر أو تتلاشى، والمولّد يلجأ إلى إنتاج حفنة من المخرجات المتشابهة بدل التنويع (وهو ما نسمّيه انهيار النمط)، فينحرف كلياً. المشكلة الجوهرية بسيطة: مطالبة شبكة عشوائية التهيئة بتعلّم كل تفاصيل الصورة — من الخطوط العريضة إلى أدق الملامح — دفعةً واحدة مهمة أكبر من أن تنجح.
الإسهام
تطبيق مبدأ التعلّم المنهجي المتدرّج على تدريب الشبكات التنافسية: يبدأ المولّد والمميِّز معاً من دقة 4×4، ثم تُضاف طبقات التفافية تُضاعف الدقة في كل مرحلة، مع إدخال كل طبقة جديدة بسلاسة عبر معامل مزج ألفا. يُكمَل ذلك بثلاث تقنيات للاستقرار: (تقييس الأوزان لحظة التشغيل بدل الاعتماد على تهيئة مدروسة)، والتسوية البكسلية لمتجه السمات داخل المولّد، والانحراف المعياري على مستوى الدفعة المصغّرة في المميِّز لمقاومة انهيار النمط. النتيجة: أول صور وجوه واقعية بدقة 1024×1024 مع تسريع التدريب 5.4 مرة.
الأثر
شبكة GAN التدريجية كانت أول نموذج ينتج وجوهاً واقعية بدقة عالية، وأثبتت أن الشبكات التوليدية التنافسية قادرة على تجاوز حدودها السابقة بمراحل. المنهجية التي قدّمتها — مع تقنيات الاستقرار — أصبحت ممارسة أساسية في المجال، ومهّدت مباشرةً لظهور StyleGAN التي ورثت فكرة النمو التدريجي وأضافت إليها التحكم بالأنماط. ومجموعة بيانات CelebA-HQ التي أُعدّت لهذا البحث لا تزال مرجعاً أساسياً في أبحاث توليد الوجوه.
أن تطلب من شبكة توليدية تنافسية إنتاج صور بدقة 1024×1024 من الصفر يشبه أن تُلقي بطالب فنون مبتدئ أمام جدارية ضخمة في أول يوم له — كمّ التفاصيل المطلوبة يُربكه فلا ينتج إلا فوضى، أو لا ينتج شيئاً أصلاً.
النمو التدريجي يعتمد نهجاً مختلفاً تماماً: ابدأ بـلوحة صغيرة جداً (4×4 بكسل) لا تتطلب سوى ضبط الألوان الرئيسية والشكل العام للوجه، ثم وسِّعها خطوة بخطوة مضيفاً تفاصيل أدق في كل مرحلة — العيون، الأنف، الشفاه، نسيج الجلد، خصلات الشعر المنفردة. حين يصل الطالب أخيراً إلى الجدارية الكاملة يكون قد اكتسب مهاراته طبقةً بعد طبقة.
المشكلة: الشبكات التوليدية التنافسية عاجزة عن التوسع لدقة عالية
حتى عام 2017 كانت الشبكات التوليدية التنافسية عالقة عند سقف دقة لم تستطع تجاوزه. نماذج مثل DCGAN أنتجت وجوهاً مقبولة بدقة 64×64، وبكثير من الضبط الهندسي وصلت الجودة إلى 256×256، لكن القفز إلى 1024×1024 كان يفشل في كل مرة. وراء هذا الفشل ثلاث مشكلات متشابكة:
-
عدم الاستقرار. عند يتفوق بسرعة على في بداية التدريب، فتتولّد تدرّجات حادة تُزعزع كلتا الشبكتين. النتيجة سباق تسلّح لا يصل فيه أيٌّ منهما إلى .
-
. حين يكون المميِّز قوياً جداً، يلجأ المولِّد إلى الحل الأسهل: إنتاج مجموعة صغيرة من المخرجات «الآمنة» التي تخدع المميِّز بدل أن يغطي التوزيع الحقيقي للبيانات. بعبارة أخرى، يُضحّي بالتنوع من أجل البقاء.
-
التكلفة الحوسبية. التدريب بالدقة الكاملة من البداية يجعل كل تكرار مكلفاً للغاية، ومعظم هذا الحساب يذهب هدراً في الأولى حين لا يُنتج المولِّد سوى ضجيج.
الفكرة المحورية: نمِّ الشبكة دقةً بعد دقة
الفكرة الجوهرية هنا هي تطبيق مبدأ على توليد الصور. بدلاً من مواجهة مشكلة 1024×1024 دفعةً واحدة، نُقسّمها إلى سلسلة من المسائل المتصاعدة في الصعوبة:
المرحلة 1 (4×4): المولِّد يأخذ ويحوّله إلى بحجم 4×4، بينما يتعلم المميِّز تصنيف صور بالحجم نفسه. عند هذه الدقة لا يوجد سوى نحو 48 بكسل يجب ضبطها، فتتعلم الشبكة بسرعة الألوان السائدة والتركيب العام.
المرحلة 2 (8×8): تُضاف جديدة لكلٍّ من المولِّد والمميِّز فتتضاعف الدقة المكانية. المولِّد مطالب الآن بإنتاج صور متماسكة بحجم 8×8، لكنه ينطلق من أساس متين لأنه يعرف الخطوط العريضة سلفاً.
المراحل 3–9 (16×16 ← 1024×1024): تتكرر العملية ذاتها. كل مستوى دقة جديد يُضيف طبقة تفصيل إضافية — الحواف عند 16×16، ملامح الوجه عند 64×64، مسام الجلد عند 512×512، وخصلات الشعر المنفردة عند 1024×1024.
الحيلة الهندسية الأهم هي أن الطبقات الجديدة لا تُقحَم فجأةً، بل تُدمَج بالتدريج عبر معامل مزج يرتفع خطياً من 0 إلى 1 على مدار آلاف التكرارات. بهذه الطريقة لا تتعرض الطبقات المدرَّبة سلفاً لأي صدمة مفاجئة في التدرّجات.
الأمر أشبه بمفتاح إضاءة تدريجي: في البداية الناتج القديم مضاء بالكامل والطبقة الجديدة مُطفأة تماماً. على مدار آلاف التكرارات نُحرّك المفتاح ببطء — نُخفت القديم ونُضيء الجديد — حتى تعمل الطبقة الجديدة بكامل طاقتها ويختفي المسار القديم. بهذا الأسلوب لا تشهد الشبكة أي قفزة مفاجئة.
أدوات الاستقرار: ثلاث تقنيات تُبقي التدريب سليماً
النمو التدريجي وحده لا يكفي. الشبكات التوليدية التنافسية تعاني من مشكلة معروفة: المولِّد والمميِّز يُضخّمان مخرجات بعضهما البعض في حلقة تغذية راجعة تتصاعد فيها مقادير الإشارات بلا ضابط. لذلك تطرح الورقة ثلاث تقنيات متكاملة — لا تحتوي أيٌّ منها على معاملات قابلة للتعلّم — تتحكم معاً في هذا التصاعد وتُحافظ على التنوع.
جولة في البنية: من المتجه الكامن إلى وجه بملايين البكسلات
نقطة البداية في المولِّد هي متجه كامن بأبعاد 512 يُسحَب من التوزيع الطبيعي المعياري. هذا المتجه يُعاد تشكيله إلى خريطة سمات بحجم 4×4×512 — فكّر فيها كبذرة مضغوطة للغاية تحمل في داخلها كل التنويعات التي ستفردها الشبكة لاحقاً.
في كل مرحلة دقة تُضاف كتلة من طبقتين التفافيتين (مرشّحات 3×3) مع كـ، مسبوقة بعملية بأقرب جار (×2) لمضاعفة الأبعاد المكانية. عدد خرائط السمات يتناقص كلما ارتفعت الدقة: يبدأ من 512 عند 4×4 وينخفض إلى 16 عند 1024×1024. المنطق هنا يشبه عمل الرسّام — الاختيارات اللونية الكبرى أولاً، ثم ضربات الفرشاة الدقيقة أخيراً.
المميِّز هو صورة معكوسة لهذا المسار: يستقبل صورة بالدقة الكاملة ويمرّرها عبر تُنصِّف الأبعاد المكانية في كل كتلة، حتى يصل إلى حكم عددي واحد — حقيقي أم مزيّف. أما طبقات toRGB وfromRGB (التفافات 1×1) فمهمتها الربط بين فضاء السمات الداخلي وفضاء الألوان RGB عند كل مستوى دقة.
النمو التدريجي في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import torch
import torch.nn as nn
import torch.nn.functional as F
class FadeInBlock(nn.Module):
"""انتقال سلس عند إضافة كتلة دقة جديدة."""
def __init__(self, old_block, new_block):
super().__init__()
self.old_block = old_block # المسار المختصر (الدقة المنخفضة بعد رفع الحجم)
self.new_block = new_block # الطبقات الالتفافية الجديدة
self.alpha = 0.0 # يرتفع تدريجياً من 0 إلى 1
def forward(self, x):
# المسار القديم: رفع الحجم ثم تحويل إلى RGB
old_out = F.interpolate(self.old_block(x), scale_factor=2)
# المسار الجديد: المعالجة الالتفافية الكاملة
new_out = self.new_block(x)
# المزج: نبدأ من القديم وننتقل تدريجياً إلى الجديد
return (1 - self.alpha) * old_out + self.alpha * new_out
class PixelNorm(nn.Module):
"""تسوية متجه السمات عند كل بكسل ليصبح بطول وحدة."""
def forward(self, x):
return x / (x.pow(2).mean(dim=1, keepdim=True).sqrt() + 1e-8)
class EqualizedConv2d(nn.Module):
"""طبقة التفافية مع تقييس الأوزان لحظة التشغيل لضمان معدّل تعلّم متساوٍ."""
def __init__(self, in_ch, out_ch, kernel_size, **kw):
super().__init__()
self.conv = nn.Conv2d(in_ch, out_ch, kernel_size, **kw)
nn.init.normal_(self.conv.weight) # تهيئة من N(0,1)
self.scale = (2 / (in_ch * kernel_size**2)) ** 0.5 # ثابت He
def forward(self, x):
return self.conv(x * self.scale) # التقييس يحدث عند كل تمرير، لا عند التهيئة فقطالنتائج: جودة وسرعة غير مسبوقتين
حققت شبكة GAN التدريجية عدة إنجازات دفعةً واحدة. على مجموعة بيانات CelebA-HQ التي أُعدّت خصيصاً لهذا البحث، أنتجت لأول مرة صور وجوه واقعية بدقة 1024×1024 من شبكة توليدية تنافسية — صوراً مقنعة لدرجة أن المُشاهدين البشر عجزوا عن تمييزها عن الصور الفوتوغرافية الحقيقية.
من ناحية السرعة، كان النهج التدريجي أسرع بـ5.4 مرة من التدريب المباشر بالدقة الكاملة. السبب بديهي: معظم تكرارات التدريب تجري عند دقة منخفضة حيث الحساب رخيص وسريع.
على مجموعة CIFAR-10 سجّل النموذج درجة Inception Score تبلغ 8.80، وهو رقم قياسي جديد في التوليد غير المُوجَّه للصور في ذلك الوقت. كما قدّمت الورقة مقياس الشريحية (SWD) كأداة تقييم متعددة المقاييس تقيس الجودة والتنوع معاً، لتُكمِّل مقياس (مسافة فريشيه).
الأثر والإرث
تأثير شبكة GAN التدريجية يتجاوز نتائجها المباشرة بكثير. نموذج التدريب التدريجي وتقنيات الاستقرار التي طرحتها أصبحت لبنات أساسية بنى عليها الجيل التالي من النماذج التوليدية:
2014
الشبكة التوليدية التنافسية (Goodfellow وآخرون)
الإطار التنافسي الأصلي: مولّد يحاول خداع مميِّز. أنتج صوراً ضبابية صغيرة لكنه أرسى الفكرة التأسيسية التي بُني عليها كل ما جاء لاحقاً.
2016
DCGAN — الشبكة التنافسية الالتفافية العميقة
مجموعة إرشادات معمارية لتدريب مستقر باستخدام الطبقات الالتفافية. وصلت إلى 64×64 بجودة مقبولة وأصبحت خط الأساس المعتمد في المجال.
2017
WGAN / WGAN-GP
استخدام مسافة Wasserstein كدالة خسارة مع عقوبة على التدرّجات لتحقيق تدريب أكثر استقراراً. حسّنت الاستقرار لكنها بقيت محدودة في الدقة.
2018
شبكة GAN التدريجية (هذه الورقة)
التدريب التدريجي مع تقنيات الاستقرار أنتج أول وجوه واقعية بدقة 1024×1024، وأثبت أن التعلّم المنهجي المتدرّج هو المفتاح لتوليد صور عالية الدقة.
2019
StyleGAN
بُنيت على أساس شبكة GAN التدريجية، وأضافت التسوية التكيفية لكل نسخة للتحكم بالنمط عند كل مستوى دقة. أنتجت وجوهاً أكثر إقناعاً مع قدرة على التحكم بكل سمة على حدة.
2020
StyleGAN2
تخلّت عن النمو التدريجي واستعاضت عنه بوصلات تخطّي، لكنها احتفظت بمعدّل التعلّم المتساوي وكثير من مبادئ الاستقرار التي أرستها ProGAN.
المرجعKarras, Aila, Laine, Lehtinen. Progressive Growing of GANs for Improved Quality, Stability, and Variation. ICLR, 2018.
مصطلحات هذه الورقة
- الشبكات التوليدية التنافسيةGenerative Adversarial Network (GAN)
- الموّلد التخليقيGenerator
- الـمُميِّز الحاكمDiscriminator
- التدريب التدريجيProgressive Training
- انهيار الأنماطMode Collapse
- معدّل التعلّم المتساويEqualized Learning Rate
- مسافة فريشيه للبدايةFID
- الدقة العاليةHigh-Resolution
- التعلم المتدرج (المنهجي)Curriculum Learning
- تسوية الدفعات الحسابيةBatch Normalization
- المعايرة القياسية للبياناتNormalization