GAN Workbench
عشرة أنواع من GAN على حلقة تدريب واحدة
عشرة أنواع من GAN خلف حلقة تدريب واحدة: البيانات نفسها والميزانية نفسها والمقاييس نفسها، فلا يتغير إلا الأسلوب.
- FID لـ cGAN 29.6
- IoU لـ pix2pix 0.977
- مقارنة 8 نماذج GAN
التقنياتPyTorch
torchvisionMatplotlib
pytest
Kaggle

نظرة عامة
شبكة 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)؟
أهم الميزات
- عشر طرق خلف خيار واحد --method (gan, dcgan, cgan, acgan, lsgan, wgan, wgan-gp, sngan, pix2pix, cyclegan)، لكل منها شبكاتها ودالة خسارتها وتكييفها الشرطي وضبط ليبشيتز والإعدادات الافتراضية لمُحسِّنها.
- حيل مشتركة في صورة خيارات للحلقة نفسها: تنعيم الوسوم (label smoothing)، وTTUR، وعدد n من خطوات الناقد، ومولّد EMA، وعقوبة R1، ومطابقة الميزات (feature matching)، ودالة الخسارة المشبعة الأصلية.
- تقييم مصمم لأرقام بحجم 28 px: FID على ميزات مصنِّف ونظير لـ Inception Score مستمدان من شبكة CNN صغيرة لـ MNIST (دقة 98.6% على بيانات الاختبار)، وتغطية الأنماط، ودقة الوسوم، إضافة إلى L1 وIoU للأقنعة وL1 للدورة في طرق تحويل صورة إلى صورة.
- أربعة أوامر: gans-data وgans-train وgans-sample (شبكات صور، وشبكات لكل فئة، واستيفاءات في الفضاء الكامن، وتحويلات) وgans-eval، إضافة إلى ستة نصوص أمثلة قابلة للتشغيل.
- ثلاث مجموعات بيانات اصطناعية دون اتصال (أشكال، وأشكال مقترنة لـ pix2pix، وأشكال غير مقترنة لـ CycleGAN) يُعرف فيها الجواب الصحيح بدقة، فتصبح جودة التحويل من صورة إلى صورة رقمًا لا حكمًا شخصيًا.
- منحنيات تدريب بثلاث لوحات: الخسائر، وD(x) مقابل D(G(z))، ونسبة التحديث الفعلية لكل خطوة في كل شبكة مقيسة على خطوة Adam الحقيقية.
- 43 اختبارًا على CPU في دقيقة تقريبًا، منها «DCGAN يتعلم صورة واحدة» و«pix2pix يحفظ دفعة واحدة»، وهي تثبت أن التدرجات تصل إلى الأوزان الصحيحة.
كيف يعمل
حلقة واحدة
تنفّذ كل خطوة n_critic تحديثًا للمميِّز ثم تحديثًا واحدًا للمولّد، وتحدّث اختياريًا نسخة EMA من G، وتسجّل الخسائر وD(x) وD(G(z)) ونسب التحديث. الحلقة تقرر متى تُنفَّذ الأشياء؛ والطريقة تحدد ماهيتها.
الطريقة خطوتان
تعرّف كل من NoiseGAN وPix2Pix وCycleGAN خطوة لـ D وخطوة لـ G انطلاقًا من جدول METHODS الذي يحدد الشبكات ودالة الخسارة (BCE، المربعات الصغرى، Wasserstein، hinge) والتكييف الشرطي وضبط ليبشيتز والإعدادات الافتراضية للمُحسِّن.
كبح المميِّز
يعتمد DCGAN على BatchNorm؛ ويقصّ WGAN كل وزن في الناقد إلى ±0.01 بعد كل خطوة؛ ويعاقب WGAN-GP معيار التدرج على استيفاءات بين الحقيقي والمزيّف ويتخلى عن BatchNorm؛ ويقسم SNGAN كل طبقة في D على أكبر قيمة منفردة لها.
من صورة إلى صورة
يستخدم pix2pix مولّدًا من نوع U-Net، ومميِّزًا من نوع PatchGAN يحكم على أزواج (مدخل، مخرج)، وحدّ L1 بوزن 100x. ويستخدم CycleGAN شبكتي U-Net وشبكتي PatchGAN ودالة خسارة بالمربعات الصغرى وL1 للدورة بوزن 10x، دون أي أزواج إطلاقًا.
التقييم
تُقارن 5,000 عينة بـ 5,000 صورة اختبار في فضاء الميزات ذي 128 بعدًا للمصنِّف الصغير: مسافة فريشيه، ونظير لـ IS، وعدد الفئات التي تحظى بما لا يقل عن 1/(4K) من العينات، ودقة الوسوم للنماذج الشرطية.
أمثلة



المدخل
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)
التقنيات المستخدمة
الشبكات ودوال الخسارة وحلقة التدريب والتقييم
تنزيل MNIST وFashionMNIST وCIFAR-10
منحنيات التدريب وشبكات العينات وأشكال المقارنة
43 اختبارًا على CPU، منها اختبارا «يتعلم» الشاملان
دفتر لتشغيلات أطول على GPU مع MNIST وCIFAR-10 وFacades
ما تعلمته
- التكييف الشرطي هو المكسب الأكبر: إعطاء الوسم لـ G وD يُزيل أصعب جزء من المسألة، وهو اختيار الرقم الذي سيُرسم
- الالتفافات أهم من دالة الخسارة: دالة خسارة BCE نفسها تنتقل من FID 399 مع شبكات MLP إلى 94 مع شبكات DCGAN
- يستطيع CycleGAN إرضاء خسارة الدورة بإخفاء المُدخل في نمط عالي التردد خافت بدل تعلّم التحويل الحقيقي
الحدود
- كل الأرقام ناتجة عن تشغيلات قصيرة على CPU بخيط واحد (2,000 خطوة للمولّد، 0.1-3 M معامل)، وليست معايير مرجعية؛ ويستخدم FID مصنِّفًا صغيرًا لـ MNIST بدل Inception، فلا تصح المقارنة به إلا داخل هذا المستودع
- لم يُحَل CycleGAN إلا جزئيًا بهذه الميزانية (IoU 0.28 مقارنةً بالمحيط الحقيقي)
الكلمات المفتاحية
GAN · الشبكات التوليدية التنافسية · DCGAN · GAN الشرطي · ACGAN · LSGAN · WGAN · WGAN-GP · عقوبة التدرج · التطبيع الطيفي · hinge loss · pix2pix · CycleGAN · تحويل صورة إلى صورة · انهيار الأنماط · FID · MNIST · PyTorch · النماذج التوليدية