Phase 08: Generative AI

المواد المزروعة في المواد المزروعة

كانت خدعة غودفيلو في عام 2014 هي تجاوز الكثافة بالكامل. شبكتين. واحد يصنع مزيفات. واحد يلتقطهم. يناضلون حتى تكون مزيفة لا يمكن التمييز بينها والواقعية. لا ينبغي أن تعمل. غالباً ما لا تعمل. عندما تفعل ذلك، فإن العينات لا تزال أكثر حيوية في الأدب للمناطق الضيقة.

Type: Build

Languages: Python

Prerequisites: Phase 3 · 02 (Backprop), Phase 3 · 08 (Optimizers), Phase 8 · 02 (VAE)

Time: ~75 minutes

المشكلة

تنتج VAEs عينات مشمسة لأن فقدان مُشفِّر MSE الخاص بهم هو مطلوب بـ Bayes لـ المتوسط الصورة ومتوسط العديد من الأرقام المُثبتة هو رقم غامض. تريد خسارة مكافأة المُثبتة ، وليس القرب الحكسي لأي هدف واحد. لا يوجد شكل مغلق للمُثبتة. عليك أن تتعلم ذلك.

فكرة (غويدفيلو) ، تدريب مصنفD(x)لتفرق الصور الحقيقية عن المزيفة.G(z)للاستحواذDإشارة الخسارةGهو ما هوDيعتقد حالياً أنّه يجعل شيئاً ما يبدو حقيقياًGتحسن، مطاردة هدف متحرك إذا التقيت الشبكاتGتعلمت توزيع البيانات دون أن تكتبlog p(x). . .

هذا تدريب معارض، الرياضيات هي لعبة "الحد الأدنى"

min_G max_D  E_real[log D(x)] + E_fake[log(1 - D(G(z)))]

في عام 2026 لم تعد GAN مولد SOTA (الانتشار والتطابق في التدفق أكلت هذه التاج). ولكن StyleGAN 2/3 لا تزال أشد نماذج الوجه التي تم شحنها على الإطلاق، يتم استخدام مميزات GAN كـ خسائر تصورية في تدريب التنشر، وتدريب العدائي يزود بتصفيات سريعة في خطوة واحدة (SDXL-Turbo، SD3-Turbo، LCM) التي تسمح لك بتشحن التنشر في الوقت الحقيقي.

المفهوم

!GAN training: generator and discriminator in minimax

Generator G(z).خريطة متجه الضوضاءz ~ N(0, I)إلى عينةx̂شبكة تشبه المفكّر (مكتظة أو مُتحولة).

Discriminator D(x).خريطة العينة إلى احتمالية (أو درجة) المتعددة. حقيقية → 1 ، مزيفة → 0.

Loss.تحديثان متناوبان:

  • Train D: loss_D = -[ log D(x) + log(1 - D(G(z))) ]. إنتروبيّة ثنائيّة على حقيقية = 1، وهمية = 0
  • Train G: loss_G = -log D(G(z))هذه هي الشكل غير المشبعة الذي استخدمه (البدء)log(1 - D(G(z)))يملئ ويقتل التدرج عندماD(تثق)

Training loop.خطوة واحدة منD، خطوة واحدة منGأكرر

Why it works.إذاGيطابق تماماًp_data، ثمDلا يمكن أن تفعل أفضل من فرصة والخروج 0.5 في كل مكان.Gلا يوجد أي تراجع بعد الآن.

Why it breaks.انقطاع الوضع (Gيجد وضع واحدDلا يمكن تصنيفه و يختمله للأبد) ، التراجع المتلاشى (Dيتعلم بسرعة كبيرة وlog D(معدلات التعلم، حجم الحزم، أي شيء).

الإختلافات التي جعلت GANs تعمل

YearInnovationFix
2015DCGANConv/deconv, batch norm, LeakyReLU — the first stable architecture.
2017WGAN, WGAN-GPReplace BCE with Wasserstein distance + gradient penalty. Fixes vanishing gradient.
2017Spectral normalizationLipschitz-bound the discriminator. Still used in 2026 discriminators.
2018Progressive GANTrain low-res first, add layers. First megapixel results.
2019StyleGAN / StyleGAN2Mapping network + adaptive instance norm. State of the art for fixed-domain photorealism.
2021StyleGAN3Alias-free, translation-equivariant — still the face gold standard in 2026.
2022StyleGAN-XLConditional, class-aware, larger scale.
2024R3GANRebrands with stronger regularization; works on 1024² without tricks.

بناءها

code/main.pyتدرب GAN صغيرة على بيانات 1-D: مزيج من غوسيان. مولد ومتمييز هي MLPs ذات طبقة واحدة مخفية. نطبق للأمام والخلف ، والحلقة minimax يدويا. الهدف هو رؤية وضعين الفشل الرئيسية (انهيار الوضع + تراجع التلاشى) كما يحدث.

الخطوة الأولى: خسارة غير مشبعة

الخسارة الفانيليا Goodfellowlog(1 - D(G(z)))يصل إلى 0 عندما تصنف D G مزيفة كزائفة مع ثقة عالية. عند هذه النقطة تراجع ل G هو في الأساس صفر G لا يمكن تحسينه.-log D(G(z))لديه العكس من التشريح: فإنه ينفجر عندما D هو واثق، مما يعطي G إشارة قوية.

pythondef g_loss(d_fake):
    # maximize log D(G(z))  <=>  minimize -log D(G(z))
    return -sum(math.log(max(p, 1e-8)) for p in d_fake) / len(d_fake)

الخطوة الثانية: خطوة تمييز واحدة لكل خطوة مولد

pythonfor step in range(steps):
    # train D
    real_batch = sample_real(batch_size)
    fake_batch = [G(z) for z in sample_noise(batch_size)]
    update_D(real_batch, fake_batch)

    # train G
    fake_batch = [G(z) for z in sample_noise(batch_size)]  # fresh fakes
    update_G(fake_batch)

مزيفات جديدة لـ (ج) ، وإلا فإن التراجعات قديمة

الخطوة الثالثة: مراقبة انهيار الوضع

pythonif step % 200 == 0:
    samples = [G(z) for z in sample_noise(500)]
    mode_a = sum(1 for s in samples if s < 0)
    mode_b = 500 - mode_a
    if min(mode_a, mode_b) < 50:
        print("  [!] mode collapse: one mode is starved")

العرض القنوني: توقف إحدى النظرتين الحقيقيتين عن التوليد، ويقف المتمييز عن تصحيحه لأنه لم يُنظر إليه أبداً كزيء.

الفخاخ

  • Discriminator too strong.خفض معدل تعلم D بنسبة 2-5x، أو أضف ضجيج مثالي/طبقة. إذا وصل D إلى دقة >95%، فإن G ميت.
  • Generator memorizes a mode.إضافة الضوضاء إلى مدخلات D، استخدام طبقة ميني-بارت-متمييز، أو الانتقال إلى WGAN-GP.
  • Batch norm leaking statistics.اللحظة الحقيقية + اللحظة المزيفة التي تتدفق عبر نفس طبقة BN تضمين إحصائهم. استخدم معايير الحالة أو المعايير الطيفية بدلاً من ذلك.
  • Inception-score gaming.FID و IS ضجيج عند عدد العينات المنخفضة. استخدم عينة ≥10k عند تقييم.
  • One-shot sampling is a lie for conditional tasks.ما زلت تحتاج إلى مقياسات CFG، خدوش التخفيض، وإعادة العينات للحصول على نتائج قابلة للاستخدام.

استخدمها

كومة 2026 GAN:

SituationPick
Photoreal human faces, fixed poseStyleGAN3 (sharpest, smallest)
Anime / stylized facesStyleGAN-XL or Stable Diffusion LoRA
Image-to-image translationPix2Pix / CycleGAN (Phase 8 · 04) or ControlNet (Phase 8 · 08)
Fast 1-step text-to-imageAdversarial distillation of diffusion (SDXL-Turbo, SD3-Turbo)
Perceptual loss inside a diffusion trainerSmall GAN discriminator on image crops
Anything multi-modal, open-endedDon't — use diffusion or flow matching

إن النقاط النقدية النقدية الحادة، ولكن الضيقة. بمجرد فتح نطاقك للصور، يتم إرسال نص تعسفي، وتحول الفيديو إلى التوزيع. تتواصل الخدعة المعادلة ككون (الخسائر الفكرية، التقطير) ، وليس مولد مستقل.

أرسله

إنقاذoutputs/skill-gan-debugger.md. تتخذ مهارة إدارة GAN الفاشلة (تعابير الخسارة، شبكة العينات، حجم مجموعة البيانات) وتخرج قائمة مرتبة بالأسباب المحتملة، وتصحيحات خط واحد، وبروتوكول إعادة الإعداد.

التمارين

  1. Easy.أركضcode/main.pyمع إعدادات الأسهم ثم تعيين D_LR = 5 * G_LRو إعادة التشغيل. كم سرعة انهيار خسارة (جي) إلى ثابت؟
  2. Medium.استبدل خسارة Goodfellow BCE بخسارة WGAN: loss_D = E[D(fake)] - E[D(real)]،loss_G = -E[D(fake)]، وقطع وزن D إلى [-0.01, 0.01]هل التدريب أكثر استقراراً؟
  3. Hard.تمديد مثال 1-D إلى بيانات 2-D (خليط من 8 غوسيان على حلقة). تتبع عدد الحالات الثمانية التي يتم التقاطها من قبل المولد في الخطوات 1k، 5k، 10k. تنفيذ التمييز الحصري وإعادة القياس.

الشروط الرئيسية

TermWhat people sayWhat it actually means
Generator"G"Noise-to-sample network, G: z → x̂.
Discriminator"D"Classifier D: x → [0, 1], real vs fake.
Minimax"The game"min_G max_D of a joint objective.
Non-saturating loss"The fix"Use -log D(G(z)) for G instead of log(1 - D(G(z))).
Mode collapse"G memorized one thing"Generator produces few distinct outputs despite diverse data.
WGAN"Wasserstein"Replace BCE with Earth-Mover distance + gradient penalty; smoother gradient.
Spectral norm"Lipschitz trick"Constrain D's weight norms to bound its slope; stabilizes training.
StyleGAN"The one that works"Mapping network + AdaIN; best-in-class for faces, still in 2026.

ملاحظة الإنتاج: استنتاج واحد هو ميزة دائمة لـ GAN

لم تعد GAN تفوز بجودة العينات لإنتاج النطاق المفتوح ، لكنها لا تزال تفوز بتكلفة الاستنتاج. في المفردات الأدبية الإنتاجية-الإستنتاجية ، تمتلك GAN:

  • No prefill, no decode stages.واحدG(z)المضي قدماً، التلفزيون المتأخر
  • No KV-cache pressure.الحالة الوحيدة هي الوزن حجم الحزمة محدد من خلال ذاكرة التفعيل وليس الاحتفاظ
  • Trivial continuous batching.نظرًا لأن كل طلب يحصل على نفس FLOPs الثابتة ، فإن دفعة ثابتة في الموقع المستهدف للخادم عادة ما تكون مثالية. لا حاجة إلى خريط جدول أثناء الرحلة.

هذا هو السبب في أن عملية تصفية GAN (SDXL-Turbo ، SD3-Turbo ، ADD ، LCM) هي التقنية المهيمنة للتصوير السريع من النص إلى الصورة في عام 2026: إنها تنهار خط أنابيب التوزيع 20-50 خطوة إلى 1-4 مرسلات إلى الأمام على النمط GAN مع الحفاظ على توزيع قاعدة التوزيع.

المزيد من القراءة

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.