生成式視覺:GAN 與 VAE

生成器

生成器是 GAN 中扮演「藝術家」的那一半:餵給它一串隨機數字,它就畫出一張影像。它從不直接看到訓練影像;它唯一的回饋是判別器對它贗品的裁決。於是,它純粹靠著「你被抓到了」與「你騙過我了」這類訊號,學會把無意義的雜訊轉成與資料相符的影像。那個隨機輸入正是讓它能產生變化的關鍵——不同的雜訊向量給出不同的影像。

生成器是一個函數 G,把潛在向量 z(從固定的簡單先驗 p(z) 抽出,通常為 N(0, I))映射成一張影像。在架構上,它從一個低空間解析度、高通道數的張量上採樣到完整解析度的影像——經典做法是像 DCGAN 那樣使用轉置(分數步幅)卷積,或使用「先上採樣再卷積」的區塊——並搭配批次或實例正規化、ReLU/LeakyReLU 啟動函數,以及一個 tanh 輸出層。它被訓練來最大化判別器對其輸出所犯的錯誤,而關鍵在於它是隱式地學習資料分布:沒有顯式似然,只有透過 D 反向傳播進 G 的對抗訊號。

目標函數中有個微妙之處。教科書式的生成器損失是最小化 log(1 − D(G(z))),但訓練早期 D(G(z)) 接近 0(贗品明顯是假的),此時該損失平坦、梯度消失——生成器無法學習。標準的修正是非飽和損失(non-saturating loss):改為最大化 log D(G(z)),它恰好在生成器輸得很慘時提供強勁的梯度。在更新生成器時,判別器的權重被凍結(反之亦然);只施加 G 的梯度。現代的生成器會加入條件輸入(類別標籤、文字、來源影像)與基於風格的控制(StyleGAN 的映射網路與 AdaIN)。

生成器的容量與雜訊維度限制了它所能表達的多樣性,但真正的瓶頸通常是訓練賽局,而非容量——一個生成器可能容量充裕,卻仍因模式崩潰而只吐出寥寥幾種影像,因為那在局部上就能騙過判別器。輸出範圍也很重要:要把一個以 tanh 為界(輸出落在 [−1, 1])的生成器,搭配經相應縮放的真實影像。

又称
generator networkG