1. 程式人生 > >EB-GAN系(Energy-based GAN)

EB-GAN系(Energy-based GAN)

限制 數據集 對數 imagenet lips tps 調整 一個 余弦相似度

學習總結於國立臺灣大學 :李宏毅老師

EB-GAN: Energy-based Generative Adversarial Network

MA-GAN:MAGAN: Margin Adaptation for Generative Adversarial Networks

LS-GAN: Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities

BE-GAN: BEGAN: Boundary Equilibrium Generative Adversarial Networks

首先回顧GAN的工作:

技術分享圖片

Discriminator引導Generator使其分布趨於原始數據的分布。

1. Evaluation Function

我們想找到一個評估函數F(x), 輸入為x, 輸出為一個實數F(x),表示這個輸入“有多好”:

技術分享圖片

例如如果是一合理的圖片那麽F(x)值較大,反之較小。那麽我們就可以根據F(x)來產生圖片。那怎麽找這個F(x)呢?

例如下圖將高維的圖片空間視為一維的點,那麽真實的數據對應的函數值就很大:

技術分享圖片

但這樣有個問題:real data可以是你數據庫中所有的圖片,然而不是real data的圖片你無法窮舉啊。所以引入:

Structured Perceptron:

技術分享圖片

技術分享圖片 F為兩者的內積

以下為叠代算法:

技術分享圖片

對於每個樣本對,算法要找一個可以使F值最大的y,如果這個y和原來樣本中的y不同則更新w。目的就是為了:

技術分享圖片

在這個過程中找令F最大的y值這一過程是困難的。那回頭看看GAN是怎麽做的?

generator是一種尋找negative examples的很好的方式:

技術分享圖片 技術分享圖片

技術分享圖片 技術分享圖片

EBGAN

特點:

  • 將Discriminator視作一個energy function(negative evaluation function),即這個函數值越小代表data越真實。
  • 利用自編碼器AE作為discriminator(energy function)。
  • 可以從ImageNet數據集中生成256*256的圖片。

EBGAN的generator與其他gan網絡都一樣,不同的是其discriminator是一個AE。那我們知道discriminator都是要輸出一個scalar,而AE的輸入輸出都是一張圖片啊,那麽EBGAN就是將discriminator的輸入輸出求一個rescontruction error,那這個error就是discriminator的輸出,也即所說的energy。

技術分享圖片

我們希望對於真實data的重建誤差小,即energy小,即discriminator的輸出小,而同時希望由generaor生成的圖片的energy小。這與之前的gan的判別器希望真圖輸出大,假圖大正好相反。

那麽EB-GAN的損失函數如下:

Discriminator: 技術分享圖片

Generator: 技術分享圖片

那麽D的損失函數中要最小化 -D(G(z)),就是最大化D(G(z)), 也就是要擡高下圖中的藍色點對應的曲線,但是如果沒有margin的約束,可以無限制的擡高,所以我們需要一個m,即margin,就是當擡高到m這個距離後就沒有懲罰了,所以此時loss就將不再忙著擡高,而是去將real對應的曲線也即D(x)拉小。generator做的事情就很好理解了,因為real對應的energy是小的,所以希望生成的圖片的energy也是小的。

技術分享圖片

More about EBGAN

Pulling-away 用於訓練生成器,希望它可以生成多樣性的output。 具體來說對於一個batch中的樣本 xi 和 xj ,我們將其帶入discriminator的編碼器得到編碼後的結果 ei 和 ej ,然後比較其余弦相似度,希望這個相似性越小越好。

技術分享圖片 技術分享圖片

這個auto-encoder不僅僅要最小化真實圖片的reconstruction error,而且要給假圖以較大的如reconsturction error。

Margin Adaptation GAN

技術分享圖片 技術分享圖片

上圖紅、綠線分別表示EBGAN中m取值為70和30的情況。橫軸為叠代次數,縱軸為energy取對數。左圖為真圖energy,右圖為假圖energy。右圖中上下兩條黑線分別為m=log70和m=log30結果。Discriminator希望假圖的energy高,而從右圖看出EBGAN確實做到了這件事,使得假圖的energy在黑線的上下遊走。然後觀察左圖在前面幾個epoch中energy並沒有下降太多,MAGAN中的做法是m為一個浮動的值,即margin設置越來越小,即隨著訓練使generate的圖片可以有較小的energy,從上圖中可看到不論是真圖還是假圖,其energy都是在不斷下降的。

Loss-sensitive GAN

LSGAN使得generator關註於提升遠離真實圖片的data。 假設D(x)為energy function。Discriminator要最小化下面的式子:

技術分享圖片

希望給真實的data有較小的energy(D(x)),而fake的data是最小化上式第二項,怎麽理解呢?

技術分享圖片

我們希望真圖的energy很小,而對於假圖來說希望它們的energy大過一個margin就好,如果真圖與假圖的差異比較大(可以用hidden layer來量相似度),就將假圖的energy頂的高一些。如果假圖與真圖很接近了,就不需要將其energy頂的很高。

BE GAN

Discriminator也是AE結構。

技術分享圖片

技術分享圖片

最開始Kt 為0,machine只想把真圖的energy下降,那什麽時候想把假圖的energy拉高呢?即當技術分享圖片的時候,γ是一個超參數。就是說當假圖的energy / 真圖的energy 小於γ時,Discriminator才想要將假圖的energy變大。所以不會一直考慮假圖的reconstruction error,而是當假圖的reconstruction error太小的時候,discriminator才考慮將假圖的reconstruction error變大。γ調整如下:

技術分享圖片

EB-GAN系(Energy-based GAN)