Generative Adversarial Networks (GANs) হল একটি শক্তিশালী deep learning ফ্রেমওয়ার্ক যা generator এবং discriminator নামক দুটি নেটওয়ার্ককে প্রতিযোগিতা করার মাধ্যমে নতুন ডেটা তৈরি করতে ব্যবহৃত হয়। GANs এর অনেক উন্নত এবং উন্নয়নশীল প্রযুক্তি রয়েছে, যা মডেলের স্থায়ীত্ব, কার্যকারিতা এবং উৎপাদন ক্ষমতা বাড়ানোর জন্য তৈরি করা হয়েছে। এর মধ্যে Wasserstein GAN (WGAN) এবং Conditional GAN (CGAN) বেশ গুরুত্বপূর্ণ।
1. Wasserstein GAN (WGAN)
Wasserstein GAN (WGAN) হল একটি উন্নত GAN প্রযুক্তি, যা Wasserstein Distance বা Earth Mover's Distance (EMD) ব্যবহার করে discriminator এর কাজের জন্য একটি নতুন দৃষ্টিকোণ তৈরি করে। WGAN-এ Jensen-Shannon Divergence পরিবর্তে Wasserstein Distance ব্যবহার করা হয়, যা মডেলের স্থায়ীত্ব এবং গুণমান বাড়াতে সাহায্য করে।
WGAN এর মূল সমস্যা এবং সমাধান:
GANs এ সাধারণত Jensen-Shannon Divergence বা KL Divergence ব্যবহার হয়, যা সমালোচনামূলক সমস্যা তৈরি করতে পারে, বিশেষ করে যখন mode collapse (একই আউটপুট তৈরি করা) হয়। WGAN এই সমস্যার সমাধান করে Wasserstein distance ব্যবহার করে, যা বেশি স্থিতিশীল এবং কনভার্জেন্স ভালো হয়।
WGAN এর বৈশিষ্ট্য:
- Wasserstein Distance: WGAN-এ Wasserstein distance ব্যবহার হয়, যা দুটি probability distribution এর মধ্যে "মাটি একে অপরের কাছে কোথায় রয়েছে" এটি পরিমাপ করে। এটি GANs এর প্রশিক্ষণকে আরও স্থিতিশীল করে তোলে।
- Critic (Discriminator): WGAN-এ Discriminator কে Critic বলা হয়, যেহেতু এটি জেনারেটরের কাজের মান পরিমাপ করে এবং মডেলকে ডেটা তৈরি করার জন্য গাইডলাইন দেয়। Critic এর জন্য কোন সিগময়েড ফাংশন ব্যবহার করা হয় না, এটি সরাসরি রিয়েল ভ্যালু আউটপুট দেয়।
- Weight Clipping: WGAN-এ Critic এর ওজন ক্লিপিং (weight clipping) ব্যবহার করা হয়, যাতে WGAN এর প্রশিক্ষণ আরও স্থিতিশীল হয়। Critic এর লিপসচিট কনস্ট্যান্টের জন্য একটি সীমা নির্ধারণ করা হয়।
WGAN এর প্রশিক্ষণ পদ্ধতি:
- Critic (Discriminator) মডেলকে প্রতি 5টি ব্যাচ আপডেট করার পর Generator আপডেট করা হয়।
- Critic মডেলটি এবং Generator মডেলটি পালাক্রমে ট্রেনিং করা হয়।
WGAN কোড উদাহরণ:
import torch
import torch.nn as nn
import torch.optim as optim
# Critic (Discriminator) network
class Critic(nn.Module):
def __init__(self):
super(Critic, self).__init__()
self.fc = nn.Sequential(
nn.Linear(28*28, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 1)
)
def forward(self, x):
return self.fc(x)
# Generator network
class Generator(nn.Module):
def __init__(self):
super(Generator, self).__init__()
self.fc = nn.Sequential(
nn.Linear(100, 256),
nn.ReLU(),
nn.Linear(256, 28*28),
nn.Tanh()
)
def forward(self, z):
return self.fc(z).view(-1, 28, 28)
# WGAN training loop
critic = Critic()
generator = Generator()
optimizer_c = optim.RMSprop(critic.parameters(), lr=0.00005)
optimizer_g = optim.RMSprop(generator.parameters(), lr=0.00005)
# Training loop for WGAN
for epoch in range(10000):
for real_data in dataloader:
# Critic update
for _ in range(5): # Update critic 5 times for every 1 generator update
optimizer_c.zero_grad()
real_data = real_data.view(-1, 28*28)
fake_data = generator(torch.randn(batch_size, 100)).detach() # Generate fake data
loss_c = -torch.mean(critic(real_data)) + torch.mean(critic(fake_data))
loss_c.backward()
optimizer_c.step()
# Generator update
optimizer_g.zero_grad()
fake_data = generator(torch.randn(batch_size, 100))
loss_g = -torch.mean(critic(fake_data))
loss_g.backward()
optimizer_g.step()
print(f"Epoch [{epoch}/10000], Loss_C: {loss_c.item()}, Loss_G: {loss_g.item()}")
2. Conditional GAN (CGAN)
Conditional GAN (CGAN) হল GANs এর একটি বিস্তৃত সংস্করণ যেখানে আপনি condition হিসাবে অতিরিক্ত তথ্য প্রদান করেন। সাধারণ GANs এ, generator এবং discriminator শুধুমাত্র noisy data বা random input থেকে কাজ করে। কিন্তু CGAN এ, additional labels বা conditional information প্রদান করা হয় যাতে generator নির্দিষ্ট ধরনের ডেটা (যেমন, একটি নির্দিষ্ট ক্লাস বা ক্যাটেগরি) তৈরি করতে সক্ষম হয়।
CGAN এর মূল ধারণা:
- Generator এবং Discriminator উভয়েই অতিরিক্ত ইনপুট (যেমন লেবেল বা class information) গ্রহণ করে।
- Conditional Information আউটপুট ডেটা তৈরি করার জন্য আরও সুনির্দিষ্ট নির্দেশনা প্রদান করে, যেমন একটি নির্দিষ্ট ক্যাটেগরি বা ক্লাস।
CGAN এর বৈশিষ্ট্য:
- Conditional Input (Labels): CGAN গুলি অতিরিক্ত condition ইনপুট হিসেবে labels বা extra information গ্রহণ করে, যা মডেলটিকে নির্দিষ্ট ধরনের ডেটা তৈরি করতে সাহায্য করে।
- Conditional Generator: Generator এবং Discriminator উভয়েই অতিরিক্ত তথ্য হিসেবে labels গ্রহণ করে, যেমন class labels অথবা অন্যান্য ভেরিয়েবল।
- Output Control: CGAN গুলি আপনার মডেল আউটপুটের জন্য আরো নিয়ন্ত্রিত এবং লক্ষ্যভিত্তিক ডেটা তৈরি করতে সাহায্য করে।
CGAN কোড উদাহরণ:
class Generator(nn.Module):
def __init__(self, z_dim, num_classes):
super(Generator, self).__init__()
self.fc = nn.Sequential(
nn.Linear(z_dim + num_classes, 256),
nn.ReLU(),
nn.Linear(256, 28*28),
nn.Tanh()
)
def forward(self, z, labels):
x = torch.cat([z, labels], dim=1) # Concatenate noise and labels
return self.fc(x).view(-1, 28, 28)
class Discriminator(nn.Module):
def __init__(self, num_classes):
super(Discriminator, self).__init__()
self.fc = nn.Sequential(
nn.Linear(28*28 + num_classes, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 1),
nn.Sigmoid()
)
def forward(self, x, labels):
x = torch.cat([x.view(-1, 28*28), labels], dim=1) # Concatenate image and labels
return self.fc(x)
# Generator and Discriminator setup for CGAN
z_dim = 100
num_classes = 10 # Number of classes in MNIST
generator = Generator(z_dim, num_classes)
discriminator = Discriminator(num_classes)
# Example of generating an image from random noise and labels
z = torch.randn(batch_size, z_dim)
labels = torch.randint(0, num_classes, (batch_size,)).long()
generated_image = generator(z, labels)
3. Benefits of WGAN and CGAN
WGAN এর উপকারিতা:
- Stable Training: WGAN স্থিতিশীল এবং গুণমান বৃদ্ধির জন্য প্রশিক্ষণ প্রক্রিয়া উন্নত করে, কারণ এটি Wasserstein distance ব্যবহার করে।
- Mode Collapse কমায়: WGAN মডেলটি সাধারণ GAN এর তুলনায় বেশি স্থিতিশীল থাকে এবং mode collapse সমস্যা কমে যায়।
CGAN এর উপকারিতা:
- Conditioned Generation: CGANs গুলি নির্দিষ্ট ডেটা তৈরি করতে সক্ষম, যেমন একটি নির্দিষ্ট ক্লাস বা ক্যাটেগরি থেকে ডেটা তৈরি করা।
- Output Control: অতিরিক্ত লেবেল তথ্য ব্যবহার করে আউটপুট নিয়ন্ত্রণ করা সহজ হয়।
- Improved Performance: নির্দিষ্টভাবে কন্ডিশন প্রদান করা হলে, CGAN গুলি আরও ভাল এবং সুনির্দিষ্ট ডেটা তৈরি করতে পারে।
সারাংশ:
- WGAN হল একটি শক্তিশালী GAN প্রযুক্তি যা Wasserstein distance ব্যবহার করে, যার ফলে মডেলের প্রশিক্ষণ অধিক স্থিতিশীল হয়।
- CGAN হল একটি উন্নত GAN যা অতিরিক্ত **conditional information
** ব্যবহার করে সুনির্দিষ্ট ধরনের ডেটা তৈরি করতে সাহায্য করে।
- WGAN এবং CGAN উভয়ই GAN মডেলের উন্নতি ঘটাতে সাহায্য করে, যেখানে WGAN প্রশিক্ষণকে স্থিতিশীল করতে সাহায্য করে এবং CGAN আউটপুট নিয়ন্ত্রণে সহায়ক।
Read more