拋開復雜證實,咱們從直覺上理解W-GAN爲啥這麼好訓

這篇文章要結合另外一篇生成對抗網絡-GAN---一個好老師的重要性來看.講述的挺清晰的,好評!網絡

歡迎關注做者 函數


關於GAN基礎的知識,你們能夠參考我另外一篇生成對抗網絡-GAN---一個好老師的重要性cdn

最關鍵的地方實際上是D(X),即對整個H*W*C這個高維空間的評分系統,好很差訓,最關鍵的地方實際上是D(X)的打分是不是從G(X)(生成分佈)的支撐集的低分逐漸升高到R(X)(真實分佈)的支撐集處的高分,從而使得G(X)這個生成分佈能夠順着D(X)的梯度不斷靠近真實分佈R(X)。blog

以往的損失函數在固定G後train出來的D(X)都沒能很好的構造出這種梯度,因此train不起來,而W-GAN作到了。圖片

W-GAN: 論文證實原始GAN的損失在D取極值時候描述的是JS散度,而具備特定語義特徵的圖片在高維空間中呈現的應該是一個manifold,兩分佈支撐集衝重疊部分的measure爲0,隨機初始化參數後,訓練完D,對G來講,G的的梯度一直都是零,由於生分佈與真實分佈沒有重合的時候,JS散度一直都是0,因此纔有了D不能train的太好的訓練經驗。至於Ian Goodfellow提出的「- log D trick」,對G來講,包含梯度的部分實際是ip

KL(P_G||P_R) - 2JS(P_R||P_G)

注意KL散度是非對稱的, P_G -> 0,P_R -> 1 ,KL散度趨於0,即G會趨向於不生成這部分真實的圖片,由於這時候懲罰很小,而 P_G -> 1,P_R -> 0 ,KL趨向於 +\infty ,懲罰巨大,所以G確實就趨向於不生成假的圖片,這種不對稱性,就使得G僅僅在學到的部分真實分佈停滯不前,而把其餘尚未學到的機率空間的某些 P_R 存在分佈的地方直接置爲零,由於這樣懲罰很小,就產生了所說的collapse mode狀況。爲了解決這樣的問題,做者提出了Wassertein 距離,其能夠度量兩個分佈沒有重合時候的距離,也就是能夠提供 P_G(X) 改善本身的梯度,其實具體的推導沒有看懂,可是從最後結果的表示來看,能夠有一個直觀的理解。get

W = \frac{1}{K} \sup \limits_{||D||_L < K }  {E[D(P_R(X))] - E[D(P(P_G(X))]}

D的目標就是最大化 E[D(P_R(X))] - E[D(P(P_G(X))] ,同時要讓D知足L-Lipschitz < 某個常數K,咱們從直覺上理解這種限制,假如不進行Lipschitz常數的限制,那麼D會傾向於給fake sample打低分,給real sample打高分,而二者之間的D(X)會傾向於產生一個gap,這樣對於與真實分佈 P_R(X) 與G映射出來的分佈 P_G(X) 之間就造成不了有效的梯度(看我垃圾手繪中的圖一),即G會不知道如何讓fake sample改變來得到高分。加上Lipschitz限制條件以後,在D使得上面的損失函數最大化的時候,由於梯度不能太大,D不能無腦的而且無限制的給fake打低分,給real打給分,由於這樣會使得fake與real只之間的Lipschitz大於k,也就是加上此限制後,D(X)並不會在fake分佈的區域打很低的分數,而後經歷一個gap到real分佈的很高的參數,而是在fake與real之間造成一個較爲平緩的坡,fake處G能夠了解到往哪裏移動過能夠得到更高的分數,從而解決對G來講梯度消失的問題。實現的時候想到了一個方法就是簡單將參數clip,簡單的限制到一個區間中,這樣通過簡單的乘加,Lipschitz一定是限制在某個上限下。it



W-GANGP: 很快你們發現簡單的限制參數範圍效果並很差,由於W的簡單限制使得網絡的表達能力受限,由於D爲了使得fake 與real的差距變大,那麼大多數參數一定都簡單的達到clip的上限或者下限,極大的限制了網絡的擬合能力,而且在這樣的簡單的clip狀況下,很是容易引發梯度消失或者梯度爆炸,由於許多的clip上界或者下界相乘,clip稍大就可能爆炸,稍小就可能消失。因而做者就想到了另外一種限制Lipschitz的方法 --- Gradient Penalty。想法是樸素的,就是爲了限制D的梯度,乾脆直接設置一個懲罰項,最後選擇懲罰項爲io

[||\nabla_x(D(X)) - K]^2

本來咱們是但願不出現fake 與 real 之間的梯度不要很大大,而fake跟real的區域幾乎沒有梯度,而這個懲罰項,如今直接但願其梯度能儘可能接近某個常數,做者僅僅是說實驗上這個帶來的更好的效果,可是我看來這是能夠解釋的,由於這個限制可讓fake sample1之間也能產生梯度,由於同是fake可是距離真實的分佈的距離仍是有所不一樣的,加上此限制後,每一個fake sample 都處在一個有梯度地方(渣渣手繪的圖三),此時梯度降低時顯然會收斂的更快,而相似class

Relu[||\nabla_x D(X)||_p -K]

這樣的panalty,其可能僅僅限制fake 與 real 之間的梯度,使得距離real 較近的fake 點能夠感覺到梯度,而距離較遠的可能就感覺不到,梯度降低時候仍是較慢。

我手畫了一張圖來對比這些不一樣。

實際實現的時候,咱們想要在整個樣本空間上對梯度加以限制是困難的,那麼如何施加這種限制呢,其實咱們僅僅限制fake 與real,以及他們之間的空間梯度就能夠了,咱們能夠在fake 與real 的sample之間進行線性的插值,做爲中間區域的空間的取樣,並對他們的梯度作策劃懲罰就能夠了。

相關文章
相關標籤/搜索