Chapter 37

ডিফিউশন মডেল

Diffusion Models
🎬 Noise থেকে শিল্প
Diffusion Model একটি ইমেজে ধাপে ধাপে noise যোগ করে শুধুই random noise বানায়, তারপর শেখে — কীভাবে সেই process উল্টিয়ে noise থেকে আবার ইমেজ বানানো যায়।

Forward Process — Noise যোগ

q(x_t | x_{t-1}) = N(x_t; √(1-β_t) x_{t-1}, β_t I)

x_0 → x_1 → ... → x_T  ≈ pure noise (T ≈ 1000)

Closed-form:
x_t = √(ᾱ_t) x_0 + √(1-ᾱ_t) ε,    ε ~ N(0, I)

Reverse Process — Noise সরানো

একটি neural net (সাধারণত U-Net) শেখে: noisy x_t থেকে কোন noise (ε) যোগ হয়েছিল তা predict করা। Sampling-এ ε predict করে ধাপে ধাপে x_t → x_{t-1} → ... → x_0।

Training Loss (DDPM)

L = E_{x_0, ε, t}  || ε - ε_θ(x_t, t) ||²

# অ্যালগরিদম:
1) x_0 sample
2) t ~ Uniform(1..T)
3) ε ~ N(0, I)
4) x_t = √ᾱ_t·x_0 + √(1-ᾱ_t)·ε
5) MSE(ε, model(x_t, t)).backward()

মূল উপাদান

  • Noise schedule (β): linear, cosine।
  • U-Net backbone: Conv + attention + time embedding।
  • Time embedding: sinusoidal — t কে network-এ inject।
  • Sampler: DDPM (slow), DDIM (faster), DPM-Solver।

সরল PyTorch ধাপ

betas = torch.linspace(1e-4, 0.02, T)
alphas = 1 - betas
alpha_bar = torch.cumprod(alphas, 0)

def q_sample(x0, t, eps):
    return (alpha_bar[t].sqrt()*x0 +
            (1-alpha_bar[t]).sqrt()*eps)

# training
t = torch.randint(0, T, (B,))
eps = torch.randn_like(x0)
x_t = q_sample(x0, t, eps)
loss = F.mse_loss(model(x_t, t), eps)

Sampling (DDPM)

x = torch.randn(B, C, H, W)
for t in reversed(range(T)):
    eps = model(x, t)
    coef = (1 - alphas[t]) / (1 - alpha_bar[t]).sqrt()
    mean = (x - coef * eps) / alphas[t].sqrt()
    noise = torch.randn_like(x) if t > 0 else 0
    x = mean + betas[t].sqrt() * noise

GAN বনাম Diffusion

বৈশিষ্ট্য
GAN
Diffusion
Training
Adversarial, unstable
Simple MSE, stable
Quality
Sharp, sometimes artifact
SOTA, diverse
Speed
1 step
10–1000 step
Mode coverage
দুর্বল
চমৎকার

Conditioning (Text/Class)

Text condition যোগ হয় cross-attention দিয়ে — যেখানে text embedding (CLIP/T5) key/value হিসেবে। Classifier-Free Guidance (CFG) দিয়ে condition-এর প্রভাব বাড়ানো যায়।

🔑 কেন এত শক্তিশালী?
Diffusion likelihood-based; mode collapse নেই। U-Net + attention + scale → DALL·E, Stable Diffusion, Imagen, Sora — সব এর উপর দাঁড়িয়ে।

অনুশীলন

১. MNIST-এ ছোট DDPM train করে digit generate করুন।

২. T = 100/500/1000 — quality ও speed তুলনা।

৩. DDIM sampler দিয়ে 50 step-এ inference করুন।

সারসংক্ষেপ

✨ এই অধ্যায়ে যা শিখলাম
  • Forward: noise add, Reverse: noise predict।
  • U-Net + time embedding + MSE loss।
  • DDIM/DPM-Solver দিয়ে fast sampling।