*****
github
wgan-gp是wgan之後的改進版,主要還是改進了連續性限制的條件,因為,作者也發現將權重剪下到一定範圍之後,比如剪下到[-0.01,+0.01]後,發生了這樣的情況,發現大多數的權重都在-0.01 和0.01上,這就意味了網路的大部分權重只有兩個可能數,對於深度神經網路來說不能充分發揮深度神經網路的擬合能力,簡直是極大的浪費。並且,也發現強制剪下權重容易導致梯度消失或者梯度**,梯度消失很好理解,就是權重得不到更新資訊,梯度**就是更新過猛了,權重每次更新都變化很大,很容易導致訓練不穩定。梯度消失與梯度**原因均在於剪下範圍的選擇,選擇過小的話會導致梯度消失,如果設得稍微大了一點,每經過一層網路,梯度變大一點點,多層之後就會發生梯度** 。為了解決這個問題,並且找乙個合適的方式滿足lipschitz連續性條件,作者提出了使用梯度懲罰(gradient penalty)的方式以滿足此連續性條件。
梯度懲罰就是既然lipschitz限制是要求判別器的梯度不超過k,那麼可以通過建立乙個損失函式來滿足這個要求,即先求出判別器的梯度d(d(x)),然後建立與k之間的二範數就可以實現乙個簡單的損失函式設計。但是注意到d的梯度的數值空間是整個樣本空間,對於(既包含了真實資料集也包含了生成出的集)這樣的資料集來說,維度及其高,顯然是及其不適合的計算的。作者提出沒必要對整個資料集(真的和生成的)做取樣,只要從每一批次的樣本中取樣就可以了,比如可以產生乙個隨機數,在生成資料和真實資料上做乙個插值於是就算解決了在整個樣本空間上取樣的麻煩。
所以wgan-gp的貢獻是:
◆ 提出了一種新的lipschitz連續性限制手法—梯度懲罰,解決了訓練梯度消失梯度**的問題。
◆ 比標準wgan擁有更快的收斂速度,並能生成更高質量的樣本
◆ 提供穩定的gan訓練方式,幾乎不需要怎麼調參,成功訓練多種針對生成和語言模型的gan架構
但是**提出,由於是對每個batch中的每乙個樣本都做了梯度懲罰(隨機數的維度是(batchsize,1)),因此判別器中不能使用batch norm,但是可以使用其他的normalization方法,比如layer normalization、weight normalization和instance normalization,**中使用了layer normalization,weight normalization效果也是可以的。
文章引用於 csdn
編輯 lornatang
校準 lornatang
乙個優秀的編譯程式
include include include void init char limit file fp int i char c fp fopen d k.txt w for i 1 i 32 i fprintf fp,s n key i fclose fp fp fopen d l.txt w ...
乙個優秀的程式設計師
成為乙個優秀的程式設計師與年齡 教育或者你掙錢的多少沒有關係。關鍵在於你的表現,更深刻的說,是你如何思考。比起他們所選語言的知識 對資料結構和演算法的深入理解 或者幾年的工作經驗 更多的是他們交流的方式,管理自己的方式,和根據他們精湛的技巧可以知道他們接觸程式設計的方法很有意義。當然,成為乙個好的程...
如何設計乙個優秀的API
到目前為止,已經負責api接近兩年了,這兩年中發現現有的api存在的問題越來越多,但很多api一旦發布後就不再能修改了,即時公升級和維護是必須的。一旦api發生變化,就可能對相關的呼叫者帶來巨大的代價,使用者需要排查所有呼叫的 需要調整所有與之相關的部分,這些工作對他們來說都是額外的。如果辛辛苦苦完...