Libo1575899134@outlook.comdom
Libo函數
(原創文章,轉發請註明做者)學習
本文章會先從Gan的簡單應用示例講起,從三個方面問題以及解決思路覆蓋25篇GAN論文,第二個大部分會進一步講Gan的全部領域應用優化
-----------------------------------------------------------------------------------spa
上一篇說到最近有人關於encoder給出了更加直觀的解釋:翻譯
從另外一個角度理解,傳統的A是咱們但願的map,兩個domain的圖像,都是向左的map到一塊兒,都是向右的map到一塊兒,若是用傳統Gan去學,會致使b的狀況,Mode Missing的問題3d
這樣會致使生成這樣的東西很模糊,有點像生成的平均同樣,能夠和以前不少Gan的模型生成的比較模糊聯繫到一塊兒code
第三個是簡單把一個Gan加一個encoder的辦法,細節不同,可是歸納了剛纔說的三種方法,若是隻加一個encoder的話,雖然能在必定程度上限制B領域的東西也能映射會A鄰域,就會致使結果出現震盪,一會學到朝左的箭頭,一會學到朝右的箭頭,致使訓練出來的結果只是一個偶然。orm
因此就有了後面三篇基本長得同樣的,後面三篇基本長的同樣,cycleGan 來自朱駿彥的做品,若是一個encoder學的是單向隱射,G:x->y 最好也要求F:Y->x,這個才能保證學到的東西是一一對應的blog
能夠明顯看到,Gan Loss函數包括了一個原始Gan+另外一個方向的Gan+CycGan
兩個encoder 兩組Gan
下面是CycleGan的結果,把馬變斑馬,夏天變冬天,把畫做變真實照片,風格遷移的任務,工做的突破是能夠將整幅圖的風格轉換成莫奈的風格,而不是莫奈某幅畫的風格
還能夠轉換成不一樣畫家的做品的圖片
下面是蘋果變橘子,做者補充到,CycleGan只能應用到形狀比較類似的物品上,馬和斑馬其實也是有細微的差別,蘋果變成香蕉可能暫時不會work
CycleGan也提到了一些Mode-missing的問題,下圖對比了BiGan和CoGan的工做,這兩篇工做也用到了兩個encoder,並非向那三篇說的只用了一個encoder,可是明顯看到BiGan沒學起來。
那麼具體來看BiGan作了哪些事情,BiGan並非直接學兩個樣本空間的映射,而是學一個樣本空間和一個隱含空間的特徵映射,Z表明的就是隱空間。和CycleGan 不太同樣的地方,說明了隱空間學習有時候不如在樣本空間直接學。
DiscoGan 解釋ModeMissing 就會更有意思一些,a,表明的是原始的圖像,b ,是Gan ,c ,是加了一個encoder的Gan, D,是加了兩個encoder的雙向Gan。
比較後面兩幅圖,爲何只加一個encoder對於Mode missing的問題也解決的不太好呢,C中綠色區域的三個點其實沒有區出來,下面的區分狀況也不太好,可是如可能是DiscoGan 就能夠把10個點,10個Mode,區分的很是好。不一樣的顏色和背景表明了判別器的輸出大小,若是顏色的深淺很均勻的話(0.8-0.6)學的比較好。
B是一個encoder的狀況,C是用2個encoder的狀況。A 是傳統gan Mode-missing 最嚴重的狀況,基本學出來都是一個方向的。
因此第二個Mode-Missing的第三類問題問題已經基本解決了,雙向的encoder&noise input。就是即便不考慮JS散度,優化目標會致使Mode-Missing問題,剛纔的一些方法就能夠解決。
最後一個是比較火的Wasserstein Distance或者也叫WGan,翻譯成中文推土機距離,能夠看到下圖γ屬於聯合分佈,把生成數據分佈和真實數據分佈作一個聯合分佈,γ屬於聯合分佈中的任意一種分佈,對於這樣的分佈,取兩個點的距離的總體的指望的下界。
爲何比KL散度和JS散度好呢?爲何叫推土機距離,形象理解爲把X變到Y須要推的土有多少
假設X和Y的分佈分別以下圖,須要費多大的力才能把X的形狀的分佈變成Y形狀的分佈,若是是一個離散的分佈能夠這麼理解,假若有10個可能的樣本,10種可能的取值,不一樣的機率是柱子的高度,如何能夠變到右邊,固然變的不是樣本取值而只是機率值,是一個NP問題且並非惟一的,有些解須要費的力比較大,相似漢諾塔,最優規劃路徑問題
因此距離能夠理解成:把生成分佈變到真實分佈所須要的最優距離的最小值,爲何比KL和JS散度好呢?在一種能夠忽略不計的假設下,它是一個連續可分可微的度量,且最重要的是他直接解決了JS散度在兩個分佈不重合的時候,無心義這件事。即便兩個分佈遠在天邊 WD也能夠衡量二者距離到底有多遠,因此永遠均可以提供一個有效的梯度,直接解決了梯度消失 ,不穩定的問題。
若是用JSD來作的話,兩個分佈就會有一些突變,可是若是Wasserstein的話就是漸變的
有了距離之後怎麼具體變成Gan的目標函數呢?由於下屆是不能直接計算的,因而用了一個KR對偶性的方法,作了轉換,損失函數裏的log被去掉了,下面再解釋爲何沒有了。
有了以後,並非從剛纔的直接等價過來的,條件是須要D的function是符合Lipschitz連續性的
解釋下什麼是Lipschitz連續性,對於一個連續函數或者實數的function,若是導函數的絕對值,在任意狀況下都小於一個常數的話,那麼就說這個函數是Lipschitz 連續的。要求函數導數的變化程度或者傾斜度角度不要太大
有了Lipschitz連續性以後就要把WD應用到Gan的損失函數中,須要知足D的函數符合這個連續性,因此原始的paper 就是把D的導數(weight)限制到必定的範圍內,[-c,c] 若是超過這個範圍就用weight clip的方法截斷,就會出現個問題,選擇C其實挺重要的,論文裏也給了一些解決辦法。
總之,WGan就能夠改變gan中的目標函數,去掉log,應爲原始的判別器是在判別一個二分類問題,fake or true ? 因此D的top layer 通常是一個sigmod layer,如今作了這個轉變實際上是在逼近Wasserstein的距離,逼近兩個分佈的距離,至關於變成一個迴歸問題,把最後的sigmod直接給去掉了
因此做者發現,若是用了WD以後,綠色和藍色是原始Gan中的分佈,發現梯度消失的很劇烈,D很快就變平了,就是沒有梯度了,給它啥都判斷的很對,也就沒有啥變化了,用Wasserstein學出來發現梯度就會很平穩,形象證實了他們能夠解決這個問題。
因此第二個困難點就解決了,第二個困難點在於若是用JS散度來衡量兩個幾乎不可能重疊的分佈的時候,梯度沒有辦法獲得有效信息,梯度消失的問題,就被Wgan解決掉了。
接下來介紹W-gan 的優勢,和能作哪些事情,由於如今D輸出的不是0或者1,輸出的是一個真實值,說明了它逼近distance的程度,因此做者指出D的輸出能夠做爲衡量trianing的進度,隨着訓練進行的愈來愈好,距離應該下降愈來愈少,藍色曲線愈來愈低,圖像質量愈來愈好
因此它作到了兩件事,一個是終於有一個可靠的數值,來衡量生成樣本的質量,由於生成樣本的評價問題是個很難的問題,一直在用人工評價或者不少不靠譜的方法。至關於提出了副產品。
能夠看到下圖,變形度在慢慢下降,清晰度在慢慢提升,壞點再慢慢減小,上面是Wgan下面是DCgan,發現用Wgan的訓練方法訓練DCGan的結構,能夠發現質量上面的清晰度和變形度更好一些。
在介紹DC-GAN是發現了他們仍是用了BN,可是BN並非全部狀況下都好,有時候還會破壞訓練,發現用DC去掉BN後train不出來由於增長了穩定性,可是W-GAN即便不用BN,依然能訓練不錯的結果。
有了DCGAN後你們不太用MLP了,由於MLP表現能差,表如今生成的樣本不能逼近很複雜的圖像,MLP學mnist仍是不錯的,三層就能夠,可是若是SBA這種就不太好,用standard Gan學出來會更差,可是若是用W-GAN 的話,連MLP 也能夠進行很好的學習了。
在最後一部分,有人發現,爲了知足Lipschitz連續性的要求,直接簡單粗暴的方式是weight clip,不只僅有選擇困難的問題,還會出現,若是C顯得比較大,下面紅色的先出現了梯度爆炸的問題,選的小時會出現梯度消失,越小消失的越厲害。
因此他們提出了一種Gradient Penalty(梯度懲罰)的方法,就會一直比較平穩。
對於weight clipping的狀況下 甚至會學出兩種極端的狀況,判別器的weight不是-c就是c,致使學出來的D變得很簡單。下降了學習能力。
下面作了一個展現, Weight clipping 會忽略掉高階的動量,因此沒法完成複雜的判別任務。
進一步分析,爲何會出現這個問題,用原始的W-gan 就跟gan同樣會獲得一個最優的D,會讓判別器全部的梯度都在1左右,1就是指C,發現實際上是跟norm有關的,因此就提出不要直接clip數,去控制norm,把如今的梯度和最優的值,之間差距有多少,用一個L2的loss,加到原始的W-gan的損失函數中。
下圖看到黃色跟綠色收斂的特別快,GP效果好,不加BN效果仍是好。
建議
1 若是要作Gan相關任務傳統的就不要再試了,試試最新的。
2 嘗試noise input
3 分析特殊結構,例如:U-net 在encoder和decoder上面加了skip connection,實際上是針對特定的pair的問題最有效的,須要讓feature一一映射過去
4 不要老是嘗試高斯的noise,嘗試形狀,大小等等
不一樣的noise直接影響了學出來的東西,不是說有狀況下都必定要加顯性noise,好比noise input 不須要Z的vetor,好比dropout 至關於已經加了noise。
下面的鏈接中總結了二十多種技巧,能夠看一下。
----------------------------------------------------------
至此Gan相關的原理所有介紹完畢,大體從3個主要問題,以及對應的解決對二十多篇Gan模型進行整理,下一篇會整理行業全部領域對gan的應用程度
下一篇:Generative Adversarial Networks overview(3)