生成模型的兩大代表:VAE和GAN

2023-12-11 06:00:56

生成模型

給定資料集,希望生成模型產生與訓練集同分布的新樣本。對於訓練資料服從\(p_{data}(x)\);對於產生樣本服從\(p_{model}(x)\)。希望學到一個模型\(p_{model}(x)\)\(p_{data}(x)\)儘可能接近。

這也是無監督學習中的一個核心問題——密度估計問題。有兩種典型的思路:

  1. 顯式的密度估計:顯式得定義並求解分佈\(p_{model}(x)\),如VAE。
  2. 隱式的密度估計:學習一個模型\(p_{model}(x)\),而無需顯式定義它,如GAN。

VAE

AE

首先介紹下自編碼器(Auto Encoder, AE),它將輸入的影象X通過編碼器encoder編碼為一個隱向量(bottleneck)Z,然後再通過解碼器decoder解碼為重構影象X',它將自己編碼壓縮再還原故稱自編碼。結構如下圖所示:

以手寫數位資料集MNIST為例,輸入影象大小為28x28,通道數為1,定義隱向量的維度(latent_dim)為1 x N,N=20。經過編碼器編碼為一個長度為20的向量,再通過解碼器解碼為28x28大小的影象。將生成影象X'與原始影象X進行對比,計算重構誤差,通過最小化誤差優化模型引數:

\[Loss = distance(X, X') \]

一般distance距離函數選擇均方誤差(Mean Square Error, MSE)。AE與PCA作用相同,通過壓縮資料實現降維,還能把降維後的資料進行重構生成影象,但PCA的通過計算特徵值實現線性變換,而AE則是非線性。

VAE

如果中間的隱向量的每一分量取值不是直接來自Encoder,而是在一個分佈上進行取樣,那麼就是VAE(Variational Auto Encoder),結構如下圖所示:

還是上面的例子,這裡的Z維度還是1 x 20,但是每一分量不是直接來自Encoder,而是在一個分佈上進行取樣計算,一般來說分佈選擇正態分佈(當然也可以是其他分佈)。每個正態分佈的\(\mu\)\(\sigma\)由Encoder的神經網路計算而來。關於Z上每一分量的計算,這裡,\(\epsilon\)從噪聲分佈中隨機取樣得到。

\[z^{(i,l)}=\mu^{(i)}+\sigma^{(i)}\cdot\epsilon^{(l)}\space\mathrm{and}\space\epsilon^{(l)}\sim N(0,I) \]

在Encoder的過程中給定x得到z就是計算後驗概率\(q_\phi(z|x)\),學習得到的z為先驗分佈\(p_\theta(z)\),Decoder部分根據z計算x的過程就是似然估計\(p_\theta(x|z)\),訓練的目的也是最大化似然估計(給出了z儘可能得還原為x)。

邊緣似然度\(p_\theta(x)=\int p_\theta(z)p_\theta(x|z)\,{\rm d}z\),邊緣似然度又是每個資料點的邊緣似然之和組成:\(\log p_\theta(x^{(1)},\cdots,x^{(N)})=\sum_{i=1}^N\log p_\theta(x^{(i)})\),可以被重寫為:

\[\log p_\theta(x^{(i)})={\rm D_{KL}}(q_\phi(z|x^{(i)})||p_\theta(z|x^{(i)}))+{\cal L}(\theta,\phi;x^{(i)}) \]

等式右邊第二項稱為邊緣似然估計的下界,可以寫為:

\[\log p_\theta(x^{(i)})\ge{\cal L}(\theta,\phi;x^{(i)})=\mathbb{E}_{z\sim q_\phi(z|x)}[-\log q_\phi(z|x)+\log p_\theta(x|z)] \]

得到損失函數:

\[{\cal L}(\theta,\phi;x^{(i)})=-{\rm D_{KL}}(q_\phi(z|x^{(i)})||p_\theta(z))+\mathbb{E}_{z\sim q_\phi(z|x^{(i)})}[\log p_\theta(x^{(i)}|z)] \]

GAN

生成對抗網路(Generative Adversarial Nets, GAN)需要同時訓練兩個模型:生成器(Generator, G)和判別器(Discriminator, D)。生成器的目標是生成與訓練集同分布的樣本,而判別器的目標是區分生成器生成的樣本和訓練集中的樣本,兩者相互博弈最後達到平衡(納什均衡),生成器能夠以假亂真,判別器無法區分真假。

生成器和判別器最簡單的應用就是分別設定為兩個MLP。為了讓生成器在資料x學習分佈\(p_g\),定義一個噪聲分佈\(p_z(z)\),然後使用生成器\(G(z;\theta_g)\)將噪聲對映為生成資料x'(\(\theta_g\)是生成器模型引數)。同樣定義判別器\(D(x;\theta_d)\),輸出為標量表示概率,代表輸入的x來自資料還是\(p_g\)。訓練D時,以最大化分類訓練樣例還是G生成樣本的概率準確性為目的;同時訓練G以最小化\(\log(1-D(G(z)))\)為目的,兩者互為博弈的雙方,定義它們的最大最小博弈的價值函數\(V(G,D)\)

\[\min_G\max_DV(D,G)=\mathbb{E}_{x\sim p_{data}}[\log D(x)]+\mathbb{E}_{z\sim p_{z}}[\log(1-D(G(z)))] \]

可以得到生成器損失函數:\(\mathcal{L}_G = -\log(D(G(z)))\)

判別器損失函數:\(\mathcal{L}_D = -\log(D(x)) - \log(1 - D(G(z)))\)

極端情況下如果D很完美,\(D(x)=1,D(G(z))=0\),最後兩項結果都為0,但如果存在誤分類,由於log兩項結果會變為負數。隨著G的輸出越來越像x導致D誤判,價值函數V也會隨之變小。

計算它們的期望(\(\mathbb{E}_{x\sim p}f(x)=\int_xp(x)f(x){\rm d}x\)):

\[V(G,D)=\int_xp_{data}(x)\log D(x)\,{\rm d}x+\int_zp_z(z)\log(1-D(G(z)))\,{\rm d}z \\ =\int_xp_{data}(x)\log D(x)+p_g(x)\log(1-D(x))\,{\rm d}x \]

當D取到最優解時,上面的最大最小博弈價值函數\(V(G,D)\)可以寫為:

\[C(G)=\max_DV(G,D)= \\ \mathbb{E}_{x\sim p_{data}}[\log\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}]+\mathbb{E}_{x\sim p_g}[\log\frac{p_g(x)}{p_{data}(x)+p_g(x)}] \]

\(p_g=p_{data}\),取到\(-\log4\),上式可以寫成KL散度的形式:

\[C(G)=-\log4+{\rm KL}(p_{data}||\frac{p_{data}+p_g}{2})+{\rm KL}(p_g||\frac{p_{data}+p_g}{2}) \]

\(p_g=p_{data}\)時,G取最小值也就是最優解。對於對稱的KL散度,可以寫成JS散度的形式:

\[C(G)=2\cdot{\rm JS}(p_{data}||p_g)-\log4 \]

參考文獻

  1. PyTorch-VAE-vanilla_vae.py
  2. Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013).
  3. DALL·E 2(內含擴散模型介紹)【論文精讀】
  4. Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems 27 (2014).
  5. 【概率論】先驗概率、聯合概率、條件概率、後驗概率、全概率、貝葉斯公式
  6. 機器學習方法—優雅的模型(一):變分自編碼器(VAE)
  7. GAN論文逐段精讀【論文精讀】