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
但中間的編碼要符合特定的分布,這里就是梵高畫的分布
完整的版本就是這樣的,