Training Process of GAN

अब हम समझते हैं GAN का Training Process, जो deep learning में सबसे रोचक और चुनौतीपूर्ण processes में से एक है।
यह एक दो neural networks के बीच का “game” है — Generator vs Discriminator, जो एक-दूसरे को हराने की कोशिश करते हैं।


🔶 1. Overview: GAN कैसे Train होता है?

GAN दो parts से मिलकर बनता है:

Modelकाम
🎨 Generator (G)नकली data generate करता है
🕵️‍♂️ Discriminator (D)Decide करता है कि data असली है या नकली

दोनों को बारी-बारी से train किया जाता है — Discriminator असली और नकली data में फर्क करना सीखता है, और Generator उसे बेवकूफ बनाने की कोशिश करता है।


🔁 2. Training Process Step-by-Step:

✅ Step 1: Real Data और Noise Prepare करें

  • एक mini-batch असली data x∼pdata​ से लें
  • Generator के लिए random noise vector z∼N(0,1) generate करें

✅ Step 2: Generator से Fake Data बनाएँ

  • Generator को noise vector zinput दें
  • वह fake sample generate करेगा: x^=G(z)

✅ Step 3: Discriminator को Train करें

  • उसे real data xxx और fake data x^ दोनों input दें
  • D को binary classification करना सिखाएँ:
    • D(x)→1
    • D(G(z))→0
  • Loss Function (Binary Cross-Entropy):

Discriminator के parameters को update करें


✅ Step 4: Generator को Train करें

  • अब Generator को better fake data generate करने के लिए update करें
  • उसके लिए Discriminator को fool करना लक्ष्य होता है:
  • Generator के parameters को update करें
    (Discriminator को freeze करके)

✅ Step 5: Repeat…

  • Step 1 से 4 को कई epochs तक repeat करें
  • धीरे-धीरे Generator realistic data generate करने लगेगा
  • और Discriminator उसे पहचानने में fail होने लगेगा (50% confidence)

🧠 PyTorch-Style Training Loop (Pseudo Code)

for epoch in range(num_epochs):
for real_data in dataloader:

# --- Train Discriminator ---
z = torch.randn(batch_size, latent_dim)
fake_data = generator(z)

real_pred = discriminator(real_data)
fake_pred = discriminator(fake_data.detach())

d_loss = loss_fn(real_pred, ones) + loss_fn(fake_pred, zeros)
d_optimizer.zero_grad()
d_loss.backward()
d_optimizer.step()

# --- Train Generator ---
z = torch.randn(batch_size, latent_dim)
fake_data = generator(z)
fake_pred = discriminator(fake_data)

g_loss = loss_fn(fake_pred, ones) # Want discriminator to say "real"
g_optimizer.zero_grad()
g_loss.backward()
g_optimizer.step()

⚠️ 3. Challenges in GAN Training

ProblemExplanation
❌ Mode CollapseGenerator बार-बार same output देता है
❌ Non-ConvergenceLosses oscillate करते रहते हैं
❌ Vanishing GradientsDiscriminator बहुत strong हो जाता है
✅ SolutionLearning rate tuning, label smoothing, Wasserstein GAN, etc.

📊 4. When is Training Successful?

  • Generated data बहुत realistic लगने लगे
  • Discriminator की accuracy 50% के आसपास होने लगे (confused!)
  • Losses stabilize हो जाएँ

📌 Summary Table

StepDescription
1️⃣Noise vector से fake data generate करें
2️⃣Real और fake data से Discriminator train करें
3️⃣Discriminator को fix करके Generator train करें
4️⃣पूरे process को बार-बार repeat करें (epochs)
दोनों networks धीरे-धीरे बेहतर होते हैं

📝 Practice Questions:

  1. GAN में training loop कैसे चलता है?
  2. Generator और Discriminator को alternate कैसे train करते हैं?
  3. GAN का objective function क्या होता है?
  4. GAN training में challenges क्या हैं?
  5. Mode collapse से कैसे बचा जा सकता है?