Paper: Generative Adversarial Nets
Author: Ian J. Goodfellow et al.
Publication: 2014, NIPS
文章目錄
1 背景
深度學習通過學習複雜的數據分佈來生成高層次的模型,在自然圖像、語音識別和自然語言中都獲得了很多的應用。
但是目前來說,較爲成功的還是判別模型。
生成模型由於概率計算等困難,未獲得較大的成功。
2 創新點
3 核心方法
訓練一個生成器,將噪音引入到原始數據中,期待生成能使得判別器錯誤分類的樣本。
同時訓練一個判別器,盡力學習原始數據的分佈,而不是被生成器擾亂的數據分佈。
生成器類似於一個造價者,企圖造出迷惑警察的假幣;而判別器類似於警察,不能使得自己被假幣迷惑。
通過兩者不斷地對抗,使得判別器和生成器都能達到很強大的性能。
具體來說:
- 通過把噪音 加入生成器 從原始數據分佈中生成新的數據分佈 。
- 判別器 盡力表徵原始數據分佈,而不是生成器生成的分佈 。
- 優化目標就是下式:
其計算的過程是先計算k步D,再計算一步G。
這樣可以使得G緩慢改變,由此D就可以跟上步伐一直保持在最優解附近。
圖解見下圖:
- 藍色爲判別器的數據分佈,黑色爲原始數據的分佈,綠色爲生成器的分佈。
- 藍色的判別器每次去尋找到黑色的原始數據分佈和綠色的生成器分佈的最大區分界面,將它們分開。
- 綠色的生成器每次去逼近黑色的原始分佈,以迷惑藍色的判別器。
- 隨着多次的迭代,綠色的生成器分佈最終與黑色的原始數據分佈重合,生成的樣本再也無法被藍色的判別器給區分開來。
- 迭代停止,此時的生成器已經具有很高的迷惑性。
4 理論推導
4.1 訓練算法
其計算的過程如算法一所示:
即:
- 在判別器的每一輪迭代中,生成器採樣一個minibatach的噪音和一個minibatch的樣本數據,然後通過梯度下降來更新判別器的權重。
- 重複第一步k次。
- 在生成器的每一輪迭代中,採樣一個minibatach的噪音,然後通過梯度下降更新生成器的權重。
- 不斷重複1、2、3步,直到最大迭代次數或權重的更小已小於停止迭代的閾值。
4.2 全局優化的結束:
命題1: 當G是確定的時候,最優的判別器是:
證明過程:
定理1: 當且僅當 時,對抗遊戲達到全局最小值,爲 -log4 。
4.3 算法一的收斂性
命題2:如果G和D的容量足夠大,且在算法一的每一輪迭代中,基於給定的生成器分佈,判別器都能達到最優的判別,那麼生成器最終會達到 。
證明:
5 實驗
在MNIST、多倫多人臉數據集和CIFAR-10上都做了實驗。
生成器網絡混合使用了ReLU和sigmoid激活函數,判別器使用了maxout激活函數。
判別器中還使用了dropout。
生成器網絡的底層是特定的噪音,中間層使用了dropout和其他噪音。
使用 Guassian Parzen window 來生成,其參數由交叉驗證確定。
結果如下:
下圖是模型生成樣本的可視化:
6 評價
缺點:
G不能頻繁更新,需要保證D能跟上腳步。
優點:
不需要馬爾科夫鏈和推斷,只需要梯度下降。
未來的工作:
- 條件生成模型p(x|c)可以把條件c作爲輸入導入到G和D中。
- 通過訓練一個附加的網絡對給定的x來預測z可以實現 學習近似推理 。
- 可以訓練一批共享參數的條件模型來近似被很多條件約束的模型。
- 可實現半監督學習。
- 通過對抗獲得的G和D來提升原來的訓練效率。