1. 程式人生 > >【GANs學習筆記】(二十二)VAEGAN、BiGAN

【GANs學習筆記】(二十二)VAEGAN、BiGAN

2.1 VAEGAN的原理

我們知道VAE可以實現從原始分佈編碼到一個normal的分佈,再從normal的分佈解碼回原始分佈的功能,然後這個解碼用到的decoder就可以單獨被提取出來作為generator使用。但是,VAE有一個很大的問題就是,解碼產生的圖片往往都比較模糊。那為什麼產生的圖片會模糊?我會在之後學習VAE的過程中再去研究,目前我們只是知道,VAE產生的圖片是容易模糊的。於是就出現了VAEGAN,它的作用,就是給VAE加上了GANs的架構,通過discriminator使得VAE產生的圖片變得清晰。因此我們可以理解為,VAEGAN就是利用GANs去提升了VAE的圖片生成質量。

我們來說明一下這個架構。首先輸入一張真實影象,通過一個encoder變成一個normal的分佈z,然後z再輸入到decoder中產生生成影象,這時VAE希望之間的loss越小越好,但是loss小不見得圖片就清晰,於是又會被放入一個discriminator中,去讓discriminator判斷輸入的圖片屬於還是,這樣最終就會與不僅相似還清晰。

而關於VAEGAN,有趣的一點是,我們不僅可以用GANs來提升VAE,也可以用VAE來提升GANs。如果是被用作後者的話,“GANVAE”其實就等效為CycleGAN的一部分,如下圖所示。

這兩者的差別在於,把x encodez的過程是放在generator

的前面還是後面,如果放在前面,就是VAEGAN;如果放在後面,就是CycleGAN

2.2 VAEGAN的變種

上一節的VAEGAN存在一個問題,就是Encoder編碼出的z不一定完全符合我們期望的normal z的樣式,也就是編碼出的z和我們輸入的z可以存在細微的不同,但是通過generator的處理,它們產生的輸出都能夠騙過discriminator

為了解決這一問題VAEGAN提出了一個變種,它改變了discriminator,使得discriminator能更精細的鑑別輸入影象的種類,共包括三個種類:真實圖片,重構圖片,與生成圖片。

其中重構圖片與生成圖片的差異是,重構圖片是真實圖片通過encoder

decoder之後產生的圖片,如下圖所示。

而生成圖片僅僅是一個初始分佈z通過decoder之後產生的圖片,如下圖所示:

於是現在的差異能夠被discriminator學到,又因為generator是共用的,那為了消除這種差異只能讓輸入z接近一致,也就是encoder編碼出的z不斷逼近我們給定的輸入z,最終幾乎完全一樣。結果證明,這種模型在實驗中比VAEGAN有少量的提升。

3.1 BiGAN的原理

       GANs的花樣可以說五花八門,上篇介紹的VAEGAN是基於GANs訓練的auto-encoder,現在BiGAN提出,encoderdecoder的訓練可以分開進行,結果依然是可靠的。

       BiGAN的架構其實挺好理解。首先有一個encoder,輸入真實圖片,產生一個編碼;另外有一個與encoder無關的decoder,輸入一段給定編碼,產生一個圖片;最後有一個discriminator,它輸入一段圖片與編碼的配對,它需要去判斷這個配對是來自encoder還是decoder

我們從理論上來簡單分析一下這個模型產生的效果。假定encoder產生的配對的分佈是P(x,z),其中x已知,z未知;另一邊decoder產生的配對的分佈是Q(x’,z’),其中z’已知,x’未知。而discriminator的作用是在消除PQ之間的divergence,也就是說最終P分佈會與Q分佈長得一模一樣,這意味著encoder學到的輸出z就是已知的z’,而decoder學到的輸出x’就是已知的x。因此,最終的encoderdecoder就是互為逆運算的過程。

下面我們來討論一下BiGAN的實際使用效果。

3.2 BiGAN的討論

在討論BiGAN之前,我們先介紹一個與之對應的結構BiVAE

就如同BiGAN的本質是在訓練兩個GANsBiVAE的本質就是在訓練兩個VAE。現在我們已知的資訊是真實圖片x和先驗編碼z。首先我們搭建一個VAE,實現x->encoder->z->decoder->的過程,我們希望x越接近越好;然後我們把encoderdecoder反過來,實現z->decoder->x->encoder->的過程,我們希望z越接近越好。

那這樣的BiVAE的訓練結果如何呢?就是輸出結果與原圖非常相似,但是卻比較模糊,這與傳統VAE的毛病幾乎是一致的。我們再來看一下BiGAN的輸出結果,就是產生的圖片會非常清晰,但是往往與原圖不相似。舉一個例子,比如說輸入是一張鳥的圖片,通過BiGAN的輸出也會是一張清晰的鳥的圖片,但是輸出的鳥與輸入的鳥不是同一種鳥。

於是,現在我們可以知道,下一步人們需要做的,就是構造一個模型,把BiGANBiVAE的優點結合起來,實現一個穩定可靠的auto-encoder。可惜截至目前,還並沒有一個模型能夠解決這一問題。