Skip to content

CMU 10-423 L6:生成對抗網路(GAN)與機率圖模型

2026年9月30日1 分鐘
TL;DRL6 是 10-423 圖像單元第一個真正的生成模型。GAN 由兩個確定性網路組成:生成器把高斯雜訊變成圖片,判別器分辨真假,兩者玩 minimax 遊戲、輪流用 mini-batch SGD 更新。投影片接著談規模、浮水印與社會影響,後半段補上有向圖模型、Markov 模型與 factor graph,為 L7 的擴散模型鋪路。

🌏 English version

版本說明:本文依據 CMU 10-423/623/723 Generative AI Spring 2026(Aran Nayebi 與 Matt Gormley 合授)。主要材料是 Lecture 6 投影片(75 頁 PDF)與講次表列出的兩篇 readings。事實皆於 2026-09-30 打開官方材料核對。存取等級 A3:投影片、作業與練習考卷公開;課堂錄影在 CMU Panopto,校外看不到,所以本文只依投影片撰寫。

系列位置:上一篇 L5:CNN、encoder-only Transformer 與 ViT|下一篇 L7:擴散模型入門|系列總覽

L5 講的是怎麼「看懂」圖片。L6(2026 年 2 月 2 日)反過來問:能不能讓模型「畫」出一張沒見過的圖?這一講的答案是生成對抗網路(Generative Adversarial Network, GAN)。投影片標題是「GANs + Probabilistic Graphical Models」,前半講 GAN,後半補機率圖模型——後者看起來離題,但 L7 畫擴散模型時用的就是這套圖。

圖像生成有哪幾種任務

投影片先列出五類任務,每一類配一張論文圖:

  • Class-conditional generation:給一個類別標籤(如「海葵」「金翅雀」),生成該類別的新圖。投影片的說法是:分類是 p(y|x),這個任務是反過來做 p(x|y)。
  • Super resolution:從低解析度圖重建高解析度圖。
  • Image editing:inpainting(補上指定的缺失像素)、colorization(替灰階圖上色)、uncropping(補出圖片缺掉的一側)。
  • Style transfer:保留來源圖的語意內容,換上另一張圖的風格。
  • Text-to-image:給一段文字,生成符合描述的圖,例子用了 Gemini 2.5 Flash Image 和 SDXL。

投影片還放了一個小玩笑:請 Stable Diffusion 畫一張「解釋 GAN 的投影片」,結果畫不出來;GPT-5 解釋得好一些,但不夠細。這一講就是要補這個「細」。

GAN 由兩個網路組成

GAN 包含兩個確定性的神經網路:

  1. 生成器 G_θ:輸入一個隨機雜訊向量 z(通常 z ~ N(0, σ²I)),輸出一張圖 x = G_θ(z)。投影片的例子是 DCGAN:一個「倒過來的 CNN」,用四層 fractionally-strided convolution 讓圖片一層層變大,最後一層是 RGB 三個通道。
  2. 判別器 D_φ:輸入一張圖,輸出它是真圖的機率 p(real | image),真圖標 1、假圖標 0。例子是 PatchGAN:對圖片的每個 patch 分別判斷真假,投影片說這樣有助於避免生成模糊的圖。

兩者在訓練時玩一場兩人 minimax 遊戲:生成器想做出能騙過判別器的圖,判別器想分出真假。

訓練目標與交替更新

判別器看兩種輸入:生成器的假圖 G_θ(z),和從資料分布取出的真圖 x'。投影片把損失寫成兩項相加:假圖那項 J = log(1 − D_φ(G_θ(z))),真圖那項 J' = log D_φ(x')。

投影片第 31 頁的 minimax 目標
判別器:max_φ  Σ_i [ log D_φ(x^(i)) + log(1 − D_φ(G_θ(z^(i)))) ]
        在固定的生成器輸出上,最大化二元分類器(real=1, fake=0)的概似

生成器:min_θ  Σ_i log(1 − D_φ(G_θ(z^(i))))
        在固定的判別器下,最小化自己的假圖被判為假的概似

因為 G 和 D 都選成可微分的神經網路,目標函數也就是一個簡單的可微分函數。訓練時交替進行:

  • 固定 G_θ,對 D_φ 做反向傳播;
  • 固定 D_φ,對 G_θ 做反向傳播。

投影片把它比作 block coordinate descent,差別是每一步不把 min 或 max 解到底,只走一步 mini-batch SGD。訓練資料就是 m 張沒有標籤的圖片。

投影片在這裡留了一個課堂問題:輸入裡有一個隨機的高斯分布,要怎麼對 G_θ 反向傳播?答案欄在講義版是空的。練習考卷第 6 大題(GAN,9 分)也有類似的觀念題,可以拿來自我檢核。

Class-conditional GAN 的做法很直接:把類別標籤的 embedding 同時接到生成器和判別器的輸入,GAN 就能生成指定類別的圖。

規模、浮水印與社會影響

「Scaling up」一節先放了 the-gan-zoo 收錄的大量 GAN 變體(標題是「GANs Everywhere!」),再用一條電腦視覺時間軸把 GAN(2014)放在 VAE(2013)、Diffusion(2015)、DDPM(2020)、Stable Diffusion 之間。接著比較 GAN 與擴散模型生成的圖,並用 Parti 不同模型大小的樣本說明規模的效果。

接下來是生成圖片帶來的問題,投影片分成四件事:

做法目標投影片的評語
Watermarking辨識一張圖是不是模型生成的GAN、VAE、Stable Diffusion 大多可以加浮水印
Fake-image detection沒有浮水印也要認出假圖—
Model attribution判斷是哪個模型生成的(例如 DALL-E 2 還是 SDXL)非常成功,模型本身就留下「天然浮水印」
Image attribution找出是哪些訓練圖促成了這張新圖極度困難

社會影響則列了優點(藝術家的新工具、更快做迷因)與缺點(侵犯著作權與藝術家失業、整體創造力下降、可能產生貶低人性的內容、假新聞與查核困難、內容不根植於現實)。

後半段:機率圖模型

最後約 20 頁是機率圖模型的速成,目的是讓 L7 可以直接用圖來描述擴散模型。

  • 有向圖模型(Bayesian network):一個有向無環圖,每個節點是一個變數,聯合分布分解成「每個變數給定父節點的條件機率」的乘積。圖的結構可以來自領域知識、從資料學出來,或只是因為計算上方便;條件機率則通常從資料學。投影片示範了離散變數(機率表)和連續變數(高斯條件分布)兩種寫法,並說明塗色的節點代表觀測值。
  • Markov 模型:一階 Markov 假設是「x_t 在給定 x_{t−1} 之後,與更早的變數條件獨立」,聯合分布寫成 p(x_1) 乘上一串 p(x_t | x_{t−1})。這條鏈在 L7 會變成擴散模型的加噪過程。
  • 課堂練習:把一個五個字的 RNN 語言模型畫成有向圖模型,回扣第 1 篇的內容。
  • 無向圖模型:定義 clique、maximal clique 與 separation,但投影片直說「這些很複雜,我們這裡用不太到」。
  • Factor graph:變數(圓)和因子(方)組成的二分圖。每個因子用 potential table 表達對鄰近變數的偏好,把相關因子的值相乘就得到一組取值的分數;因為總和 Z 會大於 1,要再除以 Z 才是機率。

這一講在作業與考試裡的位置

  • HW2(Generative Models of Images,總分 60)第 4 題是 GAN,5 分:情境是替灰階圖做 inpainting,要你寫出 GAN 形式的目標函數。
  • Quiz 2 在 2 月 16 日,範圍是 L5–L9;GAN 在範圍內。
  • 練習考卷第 6 大題 GAN 共 9 分,有附解答。

自學怎麼做

  1. 先讀投影片第 19–37 頁(GAN 結構與訓練),把 minimax 目標的兩個方向各自講一次給自己聽。
  2. 讀 Goodfellow et al. 2014 的 Algorithm 1(投影片第 36 頁就是引用這張圖),對照「每一步只走一次 SGD」的說法。
  3. 想補直覺、訓練技巧與常見問題,讀 Goodfellow 的 NeurIPS 2016 GAN tutorial。
  4. 機率圖模型那段,把投影片第 61 頁的一階 Markov 鏈記熟,下一篇馬上會用到。
  5. 最後寫練習考卷第 6 大題,再對解答。

延伸閱讀

參考資料