GAN訓練技巧彙總

愛喝啤酒的雷神發表於2020-10-21
GAN自推出以來就以訓練困難著稱,因為它的訓練過程並不是尋找損失函式的最小值,而是尋找生成器和判別器之間的納什均衡。前者可以直接透過梯度下降來完成,而後者除此之外,還需要其它的訓練技巧。

  下面對歷年關於GAN的論文提出的訓練技巧進行總結,這裡僅記錄技巧,具體原理請直接看論文原文。

1  WGAN和WGAN-GP

  WGAN論文將GAN原文用來度量兩個分佈之間差異的JS divergence改為了Wasserstein distance,從而有了拉近兩個分佈之間距離的“連續性”指標。經過轉換後,對模型進行的修改如下:

  1、判別器輸出層去掉sigmoid,且損失函式不取對數log。也就是說原本的損失是先用sigmoid對映到 ( 0 , 1 ) (0,1)模擬機率值,然後再取對數對映到更大的區間以便計算。現在則是直接把這兩步給取消了。實際上這兩步就是多餘的,因為不進行這兩步的輸出值就已經處於所需要的區間了。 

  2、將判別器引數的絕對值截斷在常數C以內(不是特別大的數就行)。

  3、不要用基於動量的最佳化演算法,推薦RMSProp,SGD也行(這是論文實驗得出的結論)。

  WGAN-GP對WGAN做出了改進,且僅僅做出了一項改進:

  1、將WGAN對判別器權重的裁剪約束,改為對判別器相對於輸入的梯度的大小的約束。以正則項的形式直接加在目標函式中。改進目標函式如下:

L = E x ~ P g [ D ( x ~ ) ] E x P r [ D ( x ) ] + λ E x ^ P x ^ [ ( | | x ^ D ( x ^ ) | | 2 1 ) 2 ] L=Ex~∼Pg⁡[D(x~)]−Ex∼Pr⁡[D(x)]+λEx^∼Px^⁡[(||∇x^D(x^)||2−1)2]

  判別器引數 w w的更新就是求 L L w w的梯度,然後進行梯度下降。而因為有最後一個正則項,所以同樣會把梯度限制在一定範圍內。其中 x ^ x^ x x x ~ x~的隨機加權和,至於為什麼要用隨機加權和而不是直接求 x x x ~ x~的梯度: 關於WGAN-GP中的遺留問題? - 知乎

  當然我們實踐的時候,為了方便,可以直接使用 x x x ~ x~來對梯度的大小進行約束。也就是可以直接在keras中新增關於每個樣本的正則化loss。

2  CGAN

  相較於原始GAN,CGAN將影像的某些特徵(比如手寫數字對應的真實數字編碼)加入生成器的輸入進行訓練。這樣訓練出來的生成器就能夠以特徵生成對應的影像,並且訓練收斂的速度會更快一些,可能是因為輸入增加了確定性。

3  InfoGAN

  CGAN是新增與影像有關的特徵到原本只有隨機噪聲的輸入中增強訓練,InfoGAN則是讓生成器建立生成影像與輸入生成器的隨機噪聲之間的對映關係,它大致看起來就像是自動編碼器與GAN的結合。 

  InfoGAN除了定義生成器與判別器之外,還定義了一個與判別器共享大部分權重的“編碼器”。相對於“編碼器”,生成器就成了一個“解碼器”。解碼器將輸入的噪聲解碼為圖片,除了輸入判別器外,還要將圖片輸入編碼器。編碼器則要儘量讓自身的輸出與解碼器(生成器)輸入的某一部分“噪聲”相同,這一部分“噪聲”是人為選擇的隱變數,可以人為設定為離散或連續變數。這樣一來,生成器不但要“照顧”判別器,生成儘量真實的圖片,還要考慮讓解碼器能解碼成功,生成與輸入的噪聲編碼相關的圖片。因此生成器的輸入與其輸出就會有一定的隱式聯絡。

4  DCGAN

  對於深度卷積GAN,論文提出四個提高訓練穩定性的方陣:

  1、用步幅卷積層來代替所有的池化層。

  2、在生成器和判別器中使用BN(Batch Normalization),但不要在生成器的輸出與判別器的輸入層使用。

  3、對於層數較深的模型,隱層避免使用全連線層。

  4、對於生成器,輸出層啟用函式使用Tanh,其它層啟用函式都使用ReLu。生成器使用Tanh時,輸出的影像顏色數值在 ( 1 , 1 ) (−1,1)內,因此訓練集影像色值也要從 ( 0 , 1 ) (0,1)預處理到 ( 1 , 1 ) (−1,1)內。

  5、對於判別器,所有層的啟用函式都使用LeakyReLu。 

5  NIPS 2016 Tutorial:GAN

  生成器規模比判別器小更好。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984138/viewspace-2728431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章