Lesson 20 · 約 22 分鐘
生成模型統一視角
VAE / GAN / Diffusion 三家族對比 + 為什麼 diffusion 一統江湖
20 ・ 生成模型統一視角:VAE / GAN / Diffusion
Lesson 01 講了 LLM 的「生成」 = 預測下一字。但圖片 / 影片 / 音訊的生成模型 不是這個機制 — 它們是 學一個機率分布,然後從裡面採樣。三個主流家族 (VAE / GAN / Diffusion)看似很不一樣,目標其實是同一個:學會一個能採 樣的
p(x)。這一講把這個視角講穿,讓你看到三條路其實在解同一個問題。
0. 一句話總結
1. 為什麼這事兒難?
直接學 p(x) 不行嗎?難在:
- 高維:256×256 RGB 圖 = 196,608 維。要寫出
p(x)的解析形式不可能 - 多模態(multimodal):同一個 prompt「一隻貓」 對應無數個合法圖,模型要 cover 整個 mode
- 採樣效率:即使學會
p,從 high-dim 分布採樣本身就難
三大家族各有不同 hack。
2. VAE(Variational Autoencoder)
2.1 核心想法
「先壓縮到 latent z,再從 latent 重建」:
x → encoder → z(latent) → decoder → x'
↑ ↓
└── 訓練讓 x ≈ x' ──┘
但純 autoencoder 學完的 latent space 不連續 — 採樣一個沒見過的 z 解出來是垃圾。VAE 加一個約束:latent z 必須服從標準常態 N(0, I)。
Loss = ||x - x'||² + KL(q(z|x) || N(0, I))
└── reconstruction ──┘ └── 正則化 ──┘
2.2 採樣:從 N(0, I) 抽 z,丟進 decoder 就生新樣本
z = torch.randn(1, latent_dim)
x_new = decoder(z)2.3 優缺點
| VAE | |
|---|---|
| ✓ | 訓練穩定;有清晰的 latent space(可內插 / 操控);理論優雅 |
| ✗ | 生成圖模糊(L2 loss 的天性 → 平均化);quality 輸 GAN / Diffusion |
3. GAN(Generative Adversarial Network)
3.1 核心想法
兩個網路博弈:
- Generator G:吃噪音
z,輸出假圖 - Discriminator D:吃圖,判斷真 / 假
D 想最大化:分對真假
G 想最大化:讓 D 分錯
數學:
min_G max_D E_x[log D(x)] + E_z[log(1 - D(G(z)))]
訓練收歛時 → D 已分不出真假(輸出永遠 0.5)→ G 生成的圖跟真實分布難以區分。
3.2 採樣:G(z), z ~ N(0, I) → 直接輸出新圖
3.3 優缺點
| GAN | |
|---|---|
| ✓ | 圖銳利(沒 reconstruction loss 的模糊問題);採樣單步(快) |
| ✗ | 訓練不穩定(博弈動態難收歛);mode collapse(只學會生成幾種樣本);難評估 |
3.4 重要變體
| 變體 | 解決什麼 |
|---|---|
| DCGAN | 把 G / D 換成 CNN → 圖質升 |
| StyleGAN | 把 z 注入到 G 的不同層 → 可解構地控制風格 / 姿態 |
| CycleGAN | 不配對資料的 domain 轉換(馬 ↔ 斑馬) |
| BigGAN | scale 推大 + class-conditional → ImageNet 級高解析 |
4. Diffusion Models(2022 後主流)
4.1 核心想法
「逐步加噪 + 逐步去噪」:
- Forward process(訓練):真實圖 x₀ → 漸進加雜訊 → x₁ → x₂ → ... → x_T = 純噪音
- Reverse process(生成):從純噪音 x_T 開始,模型預測「上一步應該長什麼」 → 步步回推 → x₀ 是生成的新圖
x₀ → x₁ → x₂ → ... → x_T (純噪音) ← forward(加噪),deterministic
x₀ ← x₁ ← x₂ ← ... ← x_T (純噪音) ← reverse(去噪),模型學
訓練 objective:給 noisy x_t,預測該步加了什麼噪音。
Loss = E[ || ε - ε_θ(x_t, t) ||² ]
ε 是真實的加入噪音、ε_θ 是模型預測。本質就是個迴歸問題,所以訓練超穩定。
4.2 採樣
從 N(0,I) 抽 x_T,執行 T 步去噪(典型 T = 50-1000):
x = torch.randn(1, 3, 64, 64)
for t in reversed(range(T)):
eps_pred = model(x, t)
x = denoise_step(x, eps_pred, t)
# x 是生成的圖4.3 條件生成 + 文生圖
加 condition c(文字 / class label):
ε_θ(x_t, t, c) — 訓練時順便餵 c
Classifier-Free Guidance(CFG):同時訓「有 c」 跟「無 c(空)」 版本,推論時把兩個預測 combine,放大「條件方向」:
ε_guided = ε_uncond + w · (ε_cond - ε_uncond)
w = 7-10 是常見值。這就是為什麼 Stable Diffusion 有 guidance_scale 參數。
4.4 優缺點
| Diffusion | |
|---|---|
| ✓ | 訓練最穩定;品質 SOTA;條件生成方便;mode coverage 好 |
| ✗ | 採樣慢(T 步 NN forward,1024 步 vs GAN 的 1 步);計算成本高 |
4.5 重要變體
| 變體 | 解決什麼 |
|---|---|
| DDPM(2020) | 開山,T=1000 步 |
| DDIM(2020) | 把 T 從 1000 降到 50 步 |
| Latent Diffusion / Stable Diffusion(2022) | 在 VAE latent 跑 diffusion → 算力省 64× |
| Flow Matching / Rectified Flow(2023) | 把 diffusion 一般化,進一步加速 |
| Consistency Models(2023) | T=1 步生成,跟 GAN 持平的速度但 quality 接近 Diffusion |
5. 三家族對比一張表
| VAE | GAN | Diffusion | |
|---|---|---|---|
| 訓練穩定性 | ★★★ | ★ | ★★★★★ |
| 圖質 | ★★ | ★★★★ | ★★★★★ |
| 採樣速度 | ★★★★(單步) | ★★★★★(單步) | ★★(T步) |
| Mode coverage | ★★★ | ★★(易 collapse) | ★★★★★ |
| 主要場域 | 壓縮元件 / 表徵學習 | face / super-res / style | 文生圖 / 文生影 / 文生音 |
| 數學形式 | ELBO(下界) | minimax | 簡單 MSE 迴歸 |
6. 文 / 影 / 音 全部走同一條路
2024-25 年的趨勢:三個 modality 的 SOTA 都是 diffusion variant:
| 應用 | 模型 |
|---|---|
| 文生圖 | Stable Diffusion / SDXL / Flux / Ideogram / DALL-E 3 |
| 文生影 | OpenAI Sora / Runway Gen-3 / Kling / Veo |
| 文生音 | Suno / Stable Audio / AudioCraft |
| 3D 物體 | DreamFusion / Zero123 / Instant3D |
| NVIDIA Cosmos(物理 AI、你的興趣) | 世界基礎模型,核心是 diffusion |
7. Hands-on:玩一次三家族
8. 推薦資源
- 3Blue1Brown 的 diffusion 視覺化(影片,2024)— 直覺最強
- 論文:DDPM(https://arxiv.org/abs/2006.11239)、Stable Diffusion / Latent Diffusion(https://arxiv.org/abs/2112.10752)、Flow Matching(https://arxiv.org/abs/2210.02747)
- Karpathy 的 diffusion lecture(YouTube)— hand-coded mini diffusion
- Hugging Face
diffusersdocumentation — 業界標配 SDK
9. 自我檢測
接下來
你已經修完 21 講。回看 Lesson 00 路線圖:
- ✓ 第 0-2 站(基礎、ML、DL):Lessons 08 數學 + 15 PyTorch + 16 訓練迴圈
- ✓ 第 3 站(Transformer 內功):Lessons 01 LLM + 18 paper walkthrough
- ✓ 第 4 站(應用 LLM):Lessons 13 HF + Cloud GPU
- ✓ 第 5 站(專精方向):Lessons 02-03 世界模型 / 物理 AI + 19 RL + 20 生成模型
- ✓ Debug / eval / 研究方法:Lessons 14 / 17 / 10
- ✓ 筆記 / 名詞 / 先驅:Lessons 11 / 06 / 12
下一步是你的事:挑一個方向往深裡走,寫 GitHub project,讀 paper,然後輸出(部落格 / repo / 論文重現)。Lumi 帶你到門口,真正的學習從你動手開始。