Improved GAN


https://www.bilibili.com/video/av9770302/?p=16

從之前講的basic gan延伸到unified framework,到WGAN

再到通過WGAN進行Generation和Transformation

復習一下GAN,

首先我們有一個目標,target分布,Pdata,

藍色部分表示Pdata高,即從這部分取出的x都是符合預期的,比如這里的頭像圖片

GAN的目的就是訓練一個generator nn,讓它的輸出盡量接近Pdata分布

generator的輸入一般都是normal distribution,輸出接近Pdata,那么就意味着generator輸出的x,高概率會落在藍色區域,即我們想看到的圖片

但這里的問題是,PG是算不出來的,其實這里Pdata我們也是不知道的,我們只有一些訓練集,比如一批頭像的圖片

所以只有用sample的方式來訓練

 下面給出如何通過sample來訓練,

先隨機從v1 generator中sample 4張圖片作為false,從訓練集中取4個作為true,來訓練v1 discriminator

然后固定V1 discriminator,來訓練出V2 generator

 

然后固定V1 discriminator,來訓練出V2 generator,它產生的x,v1 discriminator都會判true

再訓練產生V2 discriminator,讓V2 generator生成的x,都被判false

下面的圖更形象的表示這一過程,

需要注意的是PG為藍色曲線,調整generator nn的參數讓它close Pdata,這個過程不是漸進的過程,而是一個反復的過程

nn的參數很難調的剛合適,往往或調過了,所以真實的過程是一個反復震盪close的過程

直到兩者重合,discriminator就完全無法區分

簡單的列出算法,

discriminator訓練多次來max V,intuitive的理解V,讓D(x)盡量大,即讓訓練集數據被判true,讓D(x~)盡量小,即讓generator生成的數據被判false

generator僅僅訓練一次來min V,前面一項和generator無關所以不用考慮,min V,就要max D(G(z)),即讓generator生成的數據盡量被判true

 

 Unified Framework

下面來學習unifed framework,分成3部分

 

f-divergence

這篇論文稱為f-Gan,Gan中Discriminator和JS-Divergence相關,其實可以任何f-divergence相關

f-divergence就可以用來衡量兩個分布的相似度

這個定義對於函數f有兩個約束,

其中f(1)=0,當p和q分布相同時,divergence就會取到0

f是convex,可以證明D的最小值就是0,下面通過jensen不等式,很容易證明

舉幾個f-divergence的例子,

 

Fenchel Conjugate(共軛)

對於每個convex函數,都存在一個對應的conjugate函數f*

定義是給定一個t,需要調整x,使得后面的式子最大,其中x需要在f的定義域中

這里假設先固定x,這樣藍框中的部分就變成線性函數,對不同的x就是不同的直線,現在對於某個給定t,只是找出最大的那個交點

從圖上可以看出,f*也是convex的

右邊舉個例子,對於xlogx,他的f*就是exponential,從圖上也能intuitive的看出

計算過程如下,maximizing就是求微分=0

 

這里有個重要的特性,就是f** = f,即

代入f-divergence的公式,得到

 

這個紅框中的式子,給定x,找到一個t可以使得它取到最大值,那這個式子可以有個lowbound

如果隨便給一個t,那么得到值一定是小於等於這個最大值

假設有個函數D,輸入這個x,輸出t,就有,因為對於任意一個D,從x算出的t,不一定是可以取到最大值的t

 任意D代表下屆,那么我們只要調整D,使得讓其max,就可以逼近真實值

 

把上面的式子中,代入Pdata和PG,就得到Pdata和Pg的f-divergence的定義

如果我們要找一個PG,和Pdata盡量相似,也就是要找一個G,使得Df最小,於是得到G*

 

推導到這里就可以看出,之前GAN的V是怎么來的,這里用不同的f-divergence,即f不同,就可以得到不同的V

之前的GAN只是一種特殊形式罷了

所以這里就得到一種GAN的unified framework,這里列出各種不同的f-divergence

 

WGAN 

WGAN的論文,簡單說,就是用earth mover's distance,或者wasserstein distance來衡量分布之間的差異

什么是earth mover's distance?

把P分布變成Q分布,有很多種moving plan,其中最小的稱為earth mover's distance,如右圖

形式化的表示,plan r可以表示成一個矩陣,每個value表示在這個位置上,需要從P移動多少到Q

這里定義出B(r),表示某個plan的平均距離

那么Earch Mover‘s Distance就是所有plan中最小的那個,可以看出算這個distance是很麻煩的,因為要先求一個最優化問題

 

那Earch Mover‘s Distance有什么用,為什么要用它來替代f-divergence來衡量分布間的差異?

f-divergence計算差異的時候,是看兩個分布是否有相同的部分,交集,這樣的問題就是很難train,因為下面的例子,Pg0,Pg50的JS-divergence都是一樣的,沒有梯度

說明這樣衡量兩個分布的差異,不科學;所以用Earch Mover‘s Distance

雖然Pg0和Pg50都不相交,但是他們之間的距離是變小的,這樣更容易訓練

回到GAN Framework

之前說,從f-divergence是可以推導出GAN的公式的

那么現在從f-divergence換到Earch Mover‘s Distance,會是怎么樣?

WGAN的論文說明,也可以從Earch Mover‘s Distance推導出下面的公式

找出一個function D,讓Pdata中抽樣的x的D(x)盡量的大,而Pg中抽樣的x的D(x)盡量的小

但這里D有個約束,必須是1-lipschitz

從lipschitz的定義可以看出,這樣的函數,變化比較緩慢,即f(x)的變化要小於x的變化

為何要加上1-lipschitz的約束?

因為如果不加,D會傾向於給D(x1) 正無窮,而D(x2)負無窮

而現在加了這個約束,x1和x2間的距離為d,那么D(x1)和D(x2)間的距離不能大於d

對於GAN,D(x)是一個二元分類器,輸出是sigmod,在兩端幾乎沒有梯度

而WGAN,D(x)是一個直線,訓練起來更簡單

 

那么這個式子怎么求解?

關鍵是1-lipschitz的約束,怎么處理

這里的方法是weight clipping,就是限制w的參數在[-c,c],這樣也就限制函數輸出的變化程度

有兩個問題,

這里weight clipping,只能做到K-lipschitz,而不是1-lipschitz,論文里面說這里放寬到k-lipschitz也是沒有問題的

這個條件是充分非必要條件,也就是說weigth clipping后,得到的D集合是真正D集合的子集,所以得到的D也許無法Max大括號中的式子

 

圖中顯示,weight clipping的作用,如果沒有weight clipping,線會趨向垂直,因為要使得max
加上weight clipping,其實就是限制住斜率

對比之前的GAN的算法,W-GAN的算法會做如下改動,

用WGAN還有一個好處是,我們真的可以用W來衡量生成圖片質量好壞

在GAN中,W是JS-divergence,衡量的是交集,只要不想交,JS-divergence都是一樣的值,而WGAN衡量的確實是兩個分布的距離,所以距離越近,生成的圖片質量越好

 

Improved GAN,Gradient penalty

改進的點,主要是如果保證1-lipschitz,之前用的是weight clipping 

現在換一種方式,

當D是1-lipschitz時,D對x的gradients的norm小於等於1,比較自覺的定義,因為1-lipschitz就是D的變化率要小於x的變化率

所以我們通過加一個罰項來近似這個約束,罰項的定義就是傾向於讓gradients的norm小於等於1,這樣罰項就會為0;這樣雖然不能保證這個約束,但是當參數lambda足夠大時,即罰項的權重足夠大時,可以近似滿足

這里的罰項是個積分,是對所有x的積分,實踐中無法做到,所以改成抽樣,x從Ppenalty中抽樣

那這里的Ppenalty是怎么樣的分布,這是有定義的,如下是Pdata和PG中間的區域

Pdata和PG各sample一個點,然后在連線,再在線上sample一個點作為Ppenalty

paper說這樣做是因為實驗效果比較好,給出的intuitive的解釋是,generator是要將PG移向Pdata,所以他們之間的gradient是最有意義的

進一步優化罰項是,讓gradient盡量接近於1,而非小於1

這樣算法的收斂速度會更快,對於D而言肯定是gradient越大收斂的越快,而1-lipschitz約束gradient最大就是1

 用gradient penalty的好處,

如果用weight clipping,顯然很多weight都會被clip在邊界上,很不自然,而gradient penalty的weight分布會更合理

同時生成的分布也更為合理

 

 

Transformation

Transformation,

Paired data,比如Text to image,從一段話,生成一張圖片

那么如果用傳統的supervised learning的方法,會有下面的問題

比如train,所代表的火車有各種各樣,所以生成的train會是所有火車的綜合,變成一個很糊的輸出圖片

所以這里用GAN來生成,GAN的輸入有兩個,除了train,還有一個分布z

所以得到的輸出也不是一個值,而是一個分布,分布中的點就可以代表各種各樣的case,所以每次sample都可能得到不一樣值,藍色或綠色點的任意一個,而不會是紅點

 Conditional GAN的訓練不同的地方,就是Discriminator的輸入是兩個,Negative example也要給出兩種

如下圖右,可以對比一下左邊普通的discriminator

 

Unpaired Data,沒有成對的訓練集,比如有一堆普通圖片,一堆梵高的圖片

然后就想把普通圖片轉化成梵高風格

 

可以通過,風格遷移,sytle transfer來做,也可以用Cycle GAN

如果用普通的GAN,用Discriminator來判斷生成的圖片和梵高的畫比,是否是一副梵高的畫

很容易會產生下面的效果,generator確實會生成梵高的畫,但是和input無關

所以要加上約束,其實就是auto-encoding

但中間的編碼要符合特定的分布,這里就是梵高畫的分布

完整的版本就是這樣的,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM