深度學習_GAN_GAN優化方法彙總

1.輸入Normalize

  1. 將輸入圖片Normalize到 [11][-1,1]之間。
  2. 生成器最後一層的輸出使用Tanh激活函數。

Normalize非常重要,沒有處理過的圖片是沒辦法收斂的。圖片規範化中一種簡單的方法是(images-127.5)/127.5,然後送到判別器去訓練。同理生成的圖片也要經過判別器,即生成器的輸出也是-1到1之間,所以要使用Tanh激活函數。

2.使用修正的損失函數

  1. 在GAN論文中用min(log(1D))\min(\log(1-D))來優化D,實際上max(logD)\max(\log D)更好。
    因爲第一個公式在實際中會造成訓練早期梯度消失的問題。

  2. 實際工程中用反轉標籤來訓練G更加方便,即把生成的圖片當成real的標籤來訓練,把真實的圖片當成fake來訓練。

3.使用具有球形結構的隨機噪聲Z

  1. 不要使用均勻分佈進行採樣
    在這裏插入圖片描述

  2. 使用高斯分佈進行採樣
    在這裏插入圖片描述

When doing interpolations, do the interpolation via a great circle, rather than a straight line from point A to point B(博主不是很懂,尷尬)

4.BatchNorm

  1. 一個mini-batch中必須只有real數據或者fake數據,不要把他們混在一起訓練。
  2. 如果能用BatchNorm就用BatchNorm,如果不能用則用instance normalization。(對於每個樣本,減去平均值除以標準差)

在這裏插入圖片描述

5.避免引入稀疏梯度:ReLU,MaxPool

  1. GAN的穩定性會因爲引入稀疏梯度受到很大影響。
  2. 最好使用LeakyReLU作爲激活函數。(D和G中都使用)
  3. 對於下采樣,最好使用:Average Pooling或者卷積+stride。
  4. 對於上採樣,最好使用:PixelShuffle或者轉置卷積+stride。

最好連Pooling也不用,因爲使用Pooling會損失信息,這對於GAN訓練沒有益處。

6.使用Soft和Noisy的標籤

  1. Label平滑,如果你設real=1,fake=0,那麼我們在實際中可以進行一些改動,對於real,我們可以用一個0.7-1.2之間的隨機值來代替,對於fake,用0-0.3這個區間來代替。
  2. 用real batch訓練D的時候,不要一次性都給標籤1,設一個小概率進行標籤反轉,也就是會有很小一部分爲0,當然這些標籤是噪聲。

7.DCGAN/混合模型

  1. 如果可以用DCGAN爲Baseline,使用它!
  2. 如果我們可以使用DCGAN但是沒有模型是穩定的,那我們就可以用混合模型:KL+GAN或者VAE+GAN。

8.使用RL中的穩定技巧

Experience Replay

  1. Keep a replay buffer of past generations and occassionally show them.
  2. Keep checkpoints from the past of G and D and occassionaly swap them out for a few iterations.

All stability tricks that work for deep deterministic policy gradients.

9.使用Adam優化器

  1. Adam優化器對於GAN來說非常有用。
  2. 在生成器中使用Adam,在判別器中使用SGD。

10.追蹤訓練失敗的信號

  1. D的損失=0:模型訓練失敗。
  2. 檢查梯度的標準:如果超過100,事情就會搞砸。
  3. 訓練時,D損失的方差很低,並且隨着時間的推移而下降。或者方差和峯值都很大。
  4. 如果生成器的損失穩步下降,說明它愚弄了判別器。

11.不通過統計平衡損失

  1. 不要試圖找到一個(G的數量/D的數量)計劃來展開訓練。
  2. 很難,我們都試過了。
  3. 如果你真的嘗試了,就要有原則的方法,而不是直覺。

在這裏插入圖片描述

12.如果我們有類別標籤,那就使用他們

如果我們有數據的類別標籤,則在訓練判別器的時候對樣本進行分類。

13.在輸入端添加噪聲,隨着時間衰減

  1. 在D的輸入中加入一些人工噪聲。
  2. 在生成器的每層中都加入高斯噪聲。

14.多訓練判別器

  1. 尤其是我們有噪聲的時候。
  2. 難以尋找到合適的規則去多訓練判別器的時機。

15.條件GANs中的離散變量

  1. 使用嵌入層。
  2. 作爲附加通道添加到圖像。
  3. 保持嵌入維度低和上採樣以匹配圖像通道大小。

16.在訓練和測試階段都使用Dropout

  1. 使用Dropout也是爲了因爲一定的噪聲。(50%)
  2. 在生成器的某幾層中使用Dropout,而且測試和訓練階段都要做。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章