إسماعيل بن علا

GAN Workbench

عشرة أنواع من GAN على حلقة تدريب واحدة

الذكاء الاصطناعي التوليدي · أكتوبر 2026 · مكتمل

عشرة أنواع من GAN خلف حلقة تدريب واحدة: البيانات نفسها والميزانية نفسها والمقاييس نفسها، فلا يتغير إلا الأسلوب.

التقنياتPyTorchtorchvisionMatplotlibpytestKaggle

GAN Workbench — نظرة عامة

نظرة عامة

شبكة GAN هي شبكتان تُدرَّبان إحداهما ضد الأخرى: مولّد يحوّل الضجيج إلى صور، ومميِّز يحاول تمييزها عن الصور الحقيقية. ومنذ 2014 رُقِّعت هذه اللعبة مرات كثيرة بدوال خسارة جديدة وشبكات جديدة وطرق جديدة لكبح المميِّز، ونادرًا ما تقارن الأوراق البحثية بينها في الظروف نفسها. أردتُ أن أرى أثر كل ترقيعة على حدة، فكتبتُ عشرة أنواع بـ PyTorch خالص: GAN الأصلي، وDCGAN، وGAN الشرطي، وACGAN، وLSGAN، وWGAN، وWGAN-GP، وSNGAN (hinge loss مع spectral norm)، وpix2pix، وCycleGAN.

تتشارك جميعها حلقة تدريب واحدة وخط معالجة بيانات واحدًا وتقييمًا واحدًا. الطريقة كائن صغير يعرّف خطوة واحدة للمميِّز وخطوة واحدة للمولّد؛ والحلقة هي التي تقرر متى تُنفَّذان وما الذي يُقاس، لذا يكفي تغيير خيار واحد للانتقال بين الطرق، ويحصل كل تشغيل على البذور نفسها وترتيب البيانات نفسه وعدد تحديثات المولّد نفسه. الشبكات صغيرة عمدًا (0.1-3 M معامل) كي يمكن مراقبة كل آلية على CPU في دقائق، ويشغّل دفتر Kaggle/Colab الشيفرة نفسها مدة أطول على GPU.

على MNIST فاز التكييف الشرطي (FID لـ cGAN ‏29.6، وACGAN ‏44.1)، وكانت spectral norm مع hinge loss أفضل طريقة غير شرطية (57.5)، وفشل WGAN مع قصّ الأوزان في التدرب ضمن الميزانية (1035.5) إلى أن حلّت عقوبة التدرج محل القصّ (127.2). وعلى الأشكال الاصطناعية، تعلّم pix2pix تحويل الصورة إلى قناع بشكل شبه مثالي (IoU 0.977)، بينما وجد CycleGAN اختصار «إخفاء المعلومات» (steganography) المعروف ولم يبلغ إلا IoU 0.28. نشأ المستودع من دفترين لمقرر دراسي؛ وأخطاؤهما الأحد عشر، ومنها مُحسِّنات بُنيت لشبكات استُبدلت لاحقًا، موثقة ومغطاة بالاختبارات.

السؤال

إذا تشاركت عشرة أنواع من GAN البيانات نفسها والميزانية نفسها والحلقة نفسها والمقاييس نفسها، فأيّ الفروق بينها (دالة الخسارة، التكييف الشرطي، ضبط شرط ليبشيتز، الالتفافات) يُحدث فرقًا فعليًا في تشغيل بحجم معالج مركزي (CPU)؟

أهم الميزات

كيف يعمل

  1. حلقة واحدة

    تنفّذ كل خطوة n_critic تحديثًا للمميِّز ثم تحديثًا واحدًا للمولّد، وتحدّث اختياريًا نسخة EMA من G، وتسجّل الخسائر وD(x) وD(G(z)) ونسب التحديث. الحلقة تقرر متى تُنفَّذ الأشياء؛ والطريقة تحدد ماهيتها.

  2. الطريقة خطوتان

    تعرّف كل من NoiseGAN وPix2Pix وCycleGAN خطوة لـ D وخطوة لـ G انطلاقًا من جدول METHODS الذي يحدد الشبكات ودالة الخسارة (BCE، المربعات الصغرى، Wasserstein، hinge) والتكييف الشرطي وضبط ليبشيتز والإعدادات الافتراضية للمُحسِّن.

  3. كبح المميِّز

    يعتمد DCGAN على BatchNorm؛ ويقصّ WGAN كل وزن في الناقد إلى ±0.01 بعد كل خطوة؛ ويعاقب WGAN-GP معيار التدرج على استيفاءات بين الحقيقي والمزيّف ويتخلى عن BatchNorm؛ ويقسم SNGAN كل طبقة في D على أكبر قيمة منفردة لها.

  4. من صورة إلى صورة

    يستخدم pix2pix مولّدًا من نوع U-Net، ومميِّزًا من نوع PatchGAN يحكم على أزواج (مدخل، مخرج)، وحدّ L1 بوزن 100x. ويستخدم CycleGAN شبكتي U-Net وشبكتي PatchGAN ودالة خسارة بالمربعات الصغرى وL1 للدورة بوزن 10x، دون أي أزواج إطلاقًا.

  5. التقييم

    تُقارن 5,000 عينة بـ 5,000 صورة اختبار في فضاء الميزات ذي 128 بعدًا للمصنِّف الصغير: مسافة فريشيه، ونظير لـ IS، وعدد الفئات التي تحظى بما لا يقل عن 1/(4K) من العينات، ودقة الوسوم للنماذج الشرطية.

أمثلة

تقدّم التدريب على MNIST لـ DCGAN وcGAN وSNGAN وWGAN-GP: الضجيج الثابت نفسه (والوسوم نفسها في حالة cGAN) يُعاد تمريره عبر لقطات من تشغيل قصير على CPU، من رمادي موحّد عند الخطوة 0 حتى ظهور الأرقام.
pix2pix على صور أشكال اختبار لم يرها النموذج. الصفوف: الصورة المُدخلة، ومخرج المولّد، والقناع الحقيقي؛ ينتقل الصف الأوسط من رمادي موحّد عند الخطوة 0 إلى أقنعة نظيفة بعد 800 خطوة.
مولّدات غير مدرّبة مقابل مدرّبة بالمتجه z نفسه: يُخرج المولّد غير المدرّب رماديًا موحّدًا لكل مُدخل لأن أوزانه N(0, 0.02) تُبقي tanh الأخيرة قريبة من 0.
مولّدات غير مدرّبة مقابل مدرّبة بالمتجه z نفسه: يُخرج المولّد غير المدرّب رماديًا موحّدًا لكل مُدخل لأن أوزانه N(0, 0.02) تُبقي tanh الأخيرة قريبة من 0.
عينات من الطرق الثماني التي تولّد الصور من الضجيج بعد 2,000 خطوة للمولّد على MNIST. يبقى WGAN مع قصّ الأوزان (FID 1035.5) رماديًا ومنهارًا؛ بينما يرسم cGAN ‏(29.6) وACGAN ‏(44.1) الرقم المطلوب.
عينات من الطرق الثماني التي تولّد الصور من الضجيج بعد 2,000 خطوة للمولّد على MNIST. يبقى WGAN مع قصّ الأوزان (FID 1035.5) رماديًا ومنهارًا؛ بينما يرسم cGAN ‏(29.6) وACGAN ‏(44.1) الرقم المطلوب.
رحلة ذهاب وإياب في CycleGAN بعد 2,000 خطوة. الصفوف: a، وG_AB(a)، وG_BA(G_AB(a))، والمحيط الحقيقي. يُخفي G_AB الشكل المملوء في نمط خافت يقرؤه G_BA من جديد، فيكون خطأ الدورة ضئيلًا (0.013) بينما لا يتجاوز IoU ‏0.28.
رحلة ذهاب وإياب في CycleGAN بعد 2,000 خطوة. الصفوف: a، وG_AB(a)، وG_BA(G_AB(a))، والمحيط الحقيقي. يُخفي G_AB الشكل المملوء في نمط خافت يقرؤه G_BA من جديد، فيكون خطأ الدورة ضئيلًا (0.013) بينما لا يتجاوز IoU ‏0.28.

المدخل

gans-train --method cgan --dataset mnist --steps 2000 && gans-eval checkpoints/cgan/last.pt

المخرج

FID (clf) 29.64, IS (clf) 8.02, modes 10/10, label accuracy 87.5% (0.27 M / 0.04 M parameters, 9.7 min on one CPU thread)

صف cGAN في جدول النتائج. يُحسب FID في فضاء ميزات مصنِّف صغير لـ MNIST لا في Inception، لذا لا يصلح إلا لترتيب التشغيلات داخل هذا المستودع.

التقنيات المستخدمة

ما تعلمته

الحدود

الكلمات المفتاحية

GAN · الشبكات التوليدية التنافسية · DCGAN · GAN الشرطي · ACGAN · LSGAN · WGAN · WGAN-GP · عقوبة التدرج · التطبيع الطيفي · hinge loss · pix2pix · CycleGAN · تحويل صورة إلى صورة · انهيار الأنماط · FID · MNIST · PyTorch · النماذج التوليدية