生成對抗網絡總結


1、GAN的原理:

  GAN的主要靈感來源於博弈論中零和博弈的思想,應用到深度學習神經網絡上來說,就是通過生成網絡G(Generator)和判別網絡D(Discriminator)不斷博弈,進而使G學習到數據的分布,如果用到圖片生成上,則訓練完成后,G可以從一段隨機數中生成逼真的圖像。G, D的主要功能是:

●  G是一個生成式的網絡,它接收一個隨機的噪聲z(隨機數),通過這個噪聲生成圖像 ;

●  D是一個判別網絡,判別一張圖片是不是“真實的”。它的輸入參數是x,x代表一張圖片,輸出D(x)代表x為真實圖片的概率,如果為1,就代表100%是真實的圖片,而輸出為0,就代表不可能是真實的圖片

   訓練過程中,生成網絡G的目標就是盡量生成真實的圖片去欺騙判別網絡D。而D的目標就是盡量辨別出G生成的假圖像和真實的圖像。這樣,G和D構成了一個動態的“博弈過程”,最終的平衡點即納什均衡點.

2、特點

  相比較傳統的模型,他存在兩個不同的網絡,而不是單一的網絡,並且訓練方式采用的是對抗訓練方式;

  GAN中G的梯度更新信息來自判別器D,而不是來自數據樣本;

3、優點

  1. ●  GAN是一種生成式模型,相比較其他生成模型(玻爾茲曼機和GSNs)只用到了反向傳播,而不需要復雜的馬爾科夫鏈
  2. ●  相比其他所有模型, GAN可以產生更加清晰,真實的樣本
  3. ●  GAN采用的是一種無監督的學習方式訓練,可以被廣泛用在無監督學習和半監督學習領域
  4. ●  相比於變分自編碼器, GANs沒有引入任何決定性偏置( deterministic bias),變分方法引入決定性偏置,因為他們優化對數似然的下界,而不是似然度本身,這看起來導致了VAEs生成的實例比GANs更模糊
  5. ●  相比VAE, GANs沒有變分下界,如果鑒別器訓練良好,那么生成器可以完美的學習到訓練樣本的分布.換句話說,GANs是漸進一致的,但是VAE是有偏差的
  6. ●  GAN應用到一些場景上,比如圖片風格遷移,超分辨率,圖像補全,去噪,避免了損失函數設計的困難,不管三七二十一,只要有一個的基准,直接上判別器,剩下的就交給對抗訓練了。

 4、缺點

  1. ●  訓練GAN需要達到納什均衡,有時候可以用梯度下降法做到,有時候做不到.我們還沒有找到很好的達到納什均衡的方法,所以訓練GAN相比VAE或者PixelRNN是不穩定的,但我認為在實踐中它還是比訓練玻爾茲曼機穩定的多
  2. ●  GAN不適合處理離散形式的數據,比如文本
  3. ●  GAN存在訓練不穩定、梯度消失、模式崩潰的問題

  模式崩潰(model collapse)原因:一般出現在GAN訓練不穩定的時候,具體表現為生成出來的結果非常差,但是即使加長訓練時間后也無法得到很好的改善。

  具體原因可以解釋如下:GAN采用的是對抗訓練的方式,G的梯度更新來自D,所以G生成的好不好,得看D怎么說。具體就是G生成一個樣本,交給D去評判,D會輸出生成的假樣本是真樣本的概率(0-1),相當於告訴G生成的樣本有多大的真實性,G就會根據這個反饋不斷改善自己,提高D輸出的概率值。但是如果某一次G生成的樣本可能並不是很真實,但是D給出了正確的評價,或者是G生成的結果中一些特征得到了D的認可,這時候G就會認為我輸出的正確的,那么接下來我就這樣輸出肯定D還會給出比較高的評價,實際上G生成的並不怎么樣,但是他們兩個就這樣自我欺騙下去了,導致最終生成結果缺失一些信息,特征不全。

5、問題

(1)為什么GAN中的優化器不常用SGD

1. SGD容易震盪,容易使GAN訓練不穩定,

2. GAN的目的是在高維非凸的參數空間中找到納什均衡點,GAN的納什均衡點是一個鞍點,但是SGD只會找到局部極小值,因為SGD解決的是一個尋找最小值的問題,GAN是一個博弈問題。()

(2)為什么GAN不適合處理文本數據

  1. 文本數據相比較圖片數據來說是離散的,因為對於文本來說,通常需要將一個詞映射為一個高維的向量,最終預測的輸出是一個one-hot向量,假設softmax的輸出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么變為onehot是(0,1,0,0,0,0),如果softmax輸出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot仍然是(0, 1, 0, 0, 0, 0),所以對於生成器來說,G輸出了不同的結果但是D給出了同樣的判別結果,並不能將梯度更新信息很好的傳遞到G中去,所以D最終輸出的判別沒有意義。

  2. 另外就是GAN的損失函數是JS散度,JS散度不適合衡量不想交分布之間的距離。

(WGAN雖然使用wassertein距離代替了JS散度,但是在生成文本上能力還是有限,GAN在生成文本上的應用有seq-GAN,和強化學習結合的產物)

6、訓練GAN的一些技巧

  • 1. 輸入規范化到(-1,1)之間,最后一層的激活函數使用tanh(BEGAN除外)
  • 2. 使用wassertein GAN的損失函數,
  • 3. 如果有標簽數據的話,盡量使用標簽,也有人提出使用反轉標簽效果很好,另外使用標簽平滑,單邊標簽平滑或者雙邊標簽平滑
  • 4. 使用mini-batch norm, 如果不用batch norm 可以使用instance norm 或者weight norm
  • 5. 避免使用RELU和pooling層,減少稀疏梯度的可能性,可以使用leakrelu激活函數
  • 6. 優化器盡量選擇ADAM,學習率不要設置太大,初始1e-4可以參考,另外可以隨着訓練進行不斷縮小學習率,
  • 7. 給D的網絡層增加高斯噪聲,相當於是一種正則

7、GAN變體總結

https://blog.csdn.net/Sakura55/article/details/81514828#4wgan

 


免責聲明!

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



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