【GAN】二、原始GAN論文詳解

寫在前面

在前面一篇文章:【GAN】一、利用keras實現DCGAN生成手寫數字圖像中我們利用keras實現了簡單的DCGAN,並生成了手寫數字圖像。程序結果讓我們領略了GAN的強大,接下來我們開始一步一步地介紹各種GAN模型。那麼我們首先從最基礎的GAN開始說起。


一、GAN簡介

GAN(Generative Adversarial Network)全名叫做對抗生成網絡或者生成對抗網絡。GAN這一概念是由Ian Goodfellow於2014年提出,並迅速成爲了非常火熱的研究話題。目前,GAN的變種更是有上千種,2019年計算機界的諾貝爾獎“圖靈獎”得主,深度學習先驅之一的Yann LeCun也曾說:“GAN及其變種是數十年來機器學習領域最有趣的想法。”

原始GAN的論文連接爲:Generative Adversarial Nets

首先我們用一句話來概括下原始GAN。原始GAN由兩個有機中整體構成——生成器GG和判別器DD,生成器的目的就是將隨機輸入的高斯噪聲映射成圖像(“假圖”),判別器則是判斷輸入圖像是否來自生成器的概率,即判斷輸入圖像是否爲假圖的概率。

GAN的訓練也與CNN大不相同,CNN是定義好特定的損失函數,然後利用梯度下降及其改進算法進行優化參數,儘可能用局部最優解去逼近全局最優解。但是GAN的訓練是個動態的過程,是生成器GG與判別器DD兩者之間的相互博弈過程。通俗點講,GAN的目的就是無中生有,以假亂真。即要使得生成器GG生成的所謂的"假圖"騙過判別器DD,那麼最優狀態就是生成器GG生成的所謂的"假圖"在判別器DD的判別結果爲0.5,不知道到底是真圖還是假圖。

接下來我們要對GAN中相關術語進行解釋。首先給出解釋的是生成器GG。生成器GG用於捕獲輸入高斯噪聲的數據分佈,產生"假圖"。接下來即使的是判別器。判別器DD則是評估輸入樣本是來自訓練集而非生成器的概率。訓練生成器GG是爲了最大化判別器DD犯錯的概率。原始GAN整個框架是生成器GG與判別器DD兩者之間的相互博弈的動態過程。


二、GAN訓練

接下來我們來介紹GAN的訓練。首先我們給出原始GAN的目標函數(損失函數),損失函數表入下所示:
minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpdata(z)[log(1D(G(z)))](1) \underset{G}{\mathop{\min }}\,\underset{D}{\mathop{\max }}\,V(D,G)={{\mathbb{E}}_{x\sim {{p}_{data}}(x)}}[\log D(x)]+{{\mathbb{E}}_{z\sim {{p}_{data}}(z)}}[\log (1-D(G(z)))]\tag1

其中,GG代表生成器,DD代表判別器,xx代表真實數據,pdatap_{data}代表真實數據概率密度分佈,zz代表了隨機輸入數據,該數據是隨機高斯噪聲。

從上式可以看出,從判別器DD角度來看判別器DD希望能儘可能區分真實樣本xx和虛假樣本G(z)G(z),因此D(x)D(x)必須儘可能大,D(G(z))D(G(z))儘可能小, 也就是V(D,G)V(D,G)整體儘可能大。從生成器GG的角度來看,生成器GG希望自己生成的虛假數據G(z)G(z)可以儘可能騙過判別器DD,也就是希望D(G(z))D(G(z))儘可能大,也就是V(D,G)V(D,G)整體儘可能小。GAN的兩個模塊在訓練相互對抗,最後達到全局最優。

下面原始論文也給出了GAN的訓練過程示意圖。在上圖中,平行線代表噪聲zz,它映射到了xx,藍色點線代表判別器DD的輸出,黑色圓點代表真實數據分佈pdatap_{data},綠色實線代表生成器GG的虛假數據的概率分佈pgp_g。可以從下面圖看出,在GAN的訓練過程中,生成器GG的概率密度分佈慢慢的逼近真實數據集的概率密度分佈,而判別器預測值也在不斷下降,當出現下圖(d)的情況時,D(G(z))=0.5D(G(z))=0.5,即分不清輸入圖像到底是真實圖像還是生成器僞造的假圖。
在這裏插入圖片描述
接下來,我們給出GAN訓練的算法,如下圖所示。從下圖訓練算法可以看出,首先利用上述目標函數結合梯度上升訓練K次判別器,之後結合梯度下降去訓練1次器。
在這裏插入圖片描述
在論文中,作者也給出了GAN相關結論數學證明 ,CSDN上已經有大神給出相關詳細推導過程,在此我就不給出相關證明了,若有興趣請移步:GAN論文閱讀——原始GAN(基本概念及理論推導)。不過我在此也對相關接結論進行一個歸納:

  1. 生成器概率密度分佈pgp_g與真實數據分佈pdatap_{data}相等時,GAN的目標函數取得全局最優解。
  2. 最優判別器DD的表達式爲:DG(x)=pdata(x)pdata(x)+pG(x)D_{G}^{*}(x)=\frac{{{p}_{data}}(x)}{{{p}_{data}}(x)+{{p}_{G}}(x)},那麼GAN取得最優時pg=pdatap_g = p_{data},,那麼DG(x)=0.5D_{G}^{*}(x)=0.5
  3. 綜合1,2兩點,雖然在實際訓練GAN中,我們最終不能使得pg=pdatap_g = p_{data},但是我們v必須儘可能去逼近這個結果,這樣才能使得生成的“假圖”能夠以假亂真。

三、 實驗結果

下面給出原始GAN實驗結果。首先給出在MNIST數據集和TFD上對數極大似然估計,實驗結果如下如所示。
在這裏插入圖片描述
接下來是是實驗結果可視化,分別在mnist數據集、TFD數據集和CIFAR-10數據集進行訓練,然後生成中間訓練結果,如下圖所示。其中圖a是mnist數據集的訓練結果,圖b是TFD數據集的訓練結果,圖c是利用全連接網絡的GAN在CIFAR-10數據集上的訓練結果,圖d是利用卷積和反捲積的GAN在CIFAR-10數據集上的訓練結果。
在這裏插入圖片描述


後記

至此GAN系列第二篇——原始GAN論文詳解到此結束,在下一篇博客我們將詳細介紹DCGAN的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章