生成式視覺:GAN 與 VAE

生成模型

生成模型學習資料整體上「長什麼樣子」,因而能夠憑空創造出全新、卻又彷彿出自同一來源的範例。這與判別模型(例如一般的分類器)形成對比:判別模型只學習類別之間的邊界,回答「這是貓還是狗?」。生成模型則嘗試回答更難的問題:「一張貓的影像究竟長什麼樣子?」,學會之後,它就能畫出一隻前所未見的貓。

形式上,我們假設真實影像是從某個未知的機率分布抽出的,記為 p_data(x),其中 x 是所有可能影像構成空間中的一張影像。生成模型定義自己的分布 p_θ(x),其中 θ 是可調的參數,我們調整 θ 使 p_θ 逼近 p_data。從模型「取樣(sampling)」就是抽出一張新的影像 x ∼ p_θ,也就是合成出新的東西。許多模型會引入一個低維的潛在變數(latent variable)z,搭配一個簡單的先驗分布 p(z)——通常是標準高斯分布,亦即一串互相獨立、呈鐘形曲線的數字——再加上一個從 z 到 x 的學習映射,使得 p_θ(x) 等於 p_θ(x|z) 乘以 p(z) 後對 z 的積分。

兩大家族的差異在於它們如何處理似然 p_θ(x),也就是模型賦予一張影像的機率。基於似然的(顯式)模型會寫下或給出 p_θ(x) 的上下界並將其最大化:變分自編碼器最大化一個下界,PixelCNN 等自迴歸模型逐像素地分解影像,正規化流(normalizing flow)使用精確的可逆映射,擴散模型(diffusion model)則使用去雜訊/分數目標。GAN 之類的隱式模型則完全不計算似然;它們只提供一種取樣方式,並由一個獨立的評判者判斷樣本看起來是否真實。各自的取捨不同:似然模型能給出密度估計、訓練穩定,但歷史上影像較模糊;GAN 影像銳利,但沒有密度且訓練較棘手;現代的擴散模型則兼具高保真度與穩定、似然式的訓練。

在 60,000 張手寫數字影像(MNIST)上訓練一個生成模型,接著取樣 100 個全新的 z 向量並解碼:你會得到 100 張沒有任何人寫過、卻清楚可辨為 0–9 的新數字影像——這證明模型捕捉到了分布,而非死記訓練集。

一個常見的混淆:高視覺品質不代表高似然,反之亦然。一個模型可能對模糊的「平均」影像賦予高機率(這是天真的似然目標已知的失敗模式),而沒有似然的 GAN 卻能產生極為銳利的樣本。請務必選擇與你真正在意之事相符的評估指標(FID、Inception Score、每維位元數 bits-per-dim、precision/recall)。