生成式視覺:GAN 與 VAE

潛在變數

潛在變數是模型用來生成資料的隱藏「控制旋鈕」,儘管它在資料集中從未被直接觀測到。直覺上:一張人臉影像是許多看不見的因素——姿態、光照、身分、表情、髮型——所共同造就的可見成品。我們從未拿到這些因素作為標籤,但我們可以假設一個緊湊的向量 z 來代表它們,並讓網路學會把 z 轉成影像。潛在變數就是那個緊湊的隱藏成因。

精確地說,在潛在變數生成模型中,我們把資料分布分解為 p(x) 等於 p(x|z) p(z) 對 z 的積分,其中 z 存在於一個低維潛在空間,並具有選定的先驗 p(z)(通常是標準高斯分布,因此 z 不過是一串互相獨立、變異數為一的數字)。解碼器 p(x|z) 把編碼轉成影像;先驗則說明哪些編碼在事前是較可能的。取樣分兩步:先從 p(z) 抽出 z,再從 p(x|z) 抽出 x。潛在空間就是所有可能編碼的幾何結構,理想上其中的鄰近程度對應於生成影像之間的相似程度。

一個核心問題是:每個潛在維度代表什麼意思。在理想的解耦(disentangled)潛在空間中,各個座標分別控制各自、人類可理解的因素——一個管姿態、一個管微笑、一個管髮長——因此沿單一座標軸移動只改變一件事。實務上座標軸通常是糾纏的,但仍存在有意義的方向,且可在訓練後找出:潛在內插會平滑地漸變,而潛在算術,例如「微笑女子 − 無表情女子 + 無表情男子 ≈ 微笑男子」,在訓練良好的空間中也成立(由 word2vec 的類比與 DCGAN 所發揚)。StyleGAN 的中介 W 空間就以比輸入的高斯 Z 空間更為解耦而聞名。

「潛在」只是指被推斷出來或隱藏的,並不神奇——這些維度只是訓練目標與架構恰好編碼進去的東西,除非你刻意設計(β-VAE、監督式因素、InfoGAN),否則它們未必對應人類的概念。切勿從單一座標讀出過多含義。

又稱
latent codehidden variablez潛在編碼