Generative Adversarial Nets-生成對抗網絡
- Abstract
- 1.Introduction
- 2.Related work
- 3.Adversarial nets
- 4.Theoretical Results
- 4.1全局最優 pg=pdatap_g=p_{data}pg?=pdata?
- 4.2算法1的收斂性質
- 5.Experiments
- 6.Advantagesa and disadvantages
- 7.Conclusions and future work
- 8.GAN-代碼實現資料
- 8.1 pytorch 教程
- 8.2 簡書教程
- 8.3 CSDN博客
- 8.4 pytorch 中文文檔
GAN開篇之作2014年
Abstract
我們通過一個對抗過程( adversarial process)給估計生成模型(generative models)提出了一個新的框架(最后是為了取生成模型)。在這個新的框架中,我們同時訓練兩個模型:一個用于捕獲數據分布的生成模型G,一個判別模型D,用于估計來自訓練集數據而非模型G產生的數據的概率。生成模型G的訓練過程:最大化判別模型D產生錯誤的概率(不懂),這個框架與最小化兩人博弈相對應。在任意函數G和D的空間中,存在唯一解;其中,G恢復訓練數據分布,D處處等于0.5。在G和D由多層感知機定義的情況下,整個系統可以利用BP算法進行訓練。在訓練模型或者生成樣本的過程中,不需要馬爾科夫鏈或展開近似推理網絡( unrolled approximate inference networks)。通過定性和定量分析生成樣本,實驗結果展示了本框架的潛力。
1.Introduction
深度學習有希望發現豐富的,有層次的模型[2],這些模型表達了人工智能應用領域各種數據的概率分布,例如自然圖像、語音音頻波、自然語言庫的符號等數據的概率分布。到目前為止,深度學習最顯著的成功都涉及到判別式模型,這些判別式模型將高維、豐富的感官輸入映射到類別標簽[14,20]。這些驚人的成功主要依賴于BP算法和dropout算法的應用,特別是具有良好梯度的分段線性單元。深度生成模型的影響力很小,主要是由于:極大似然估計和相關策略中出現了難以解決的概率計算困難、很難利用生成上下文中使用分段線性單元獲得的好處。我們提出了一個生成估計模型,分步解決這些困難。
本文提出的對抗網絡框架,其中的生成模型類似于與對手對峙:判別式模型要區分樣本是來自數據分布還是生成模型分布。(做一個生動的比喻:)生成模型可以認為類似于一個造假團隊,試圖生產假幣而且在不被發現的情況下使用它;而判別模型類似于一個警察,試圖檢測假幣。在這個博弈中的競爭驅使兩個團隊都改進他們的方法性能直至真品與偽造品難以辨別(目的是:讓造假團隊的技術達到真假難辨)。
本文提出的框架能夠給 許多模型和優化算法 產生特定的訓練算法。本文中,我們探索了一個特例:將隨機噪聲輸入到多層感知器的生成模型、判別模型也是一個多層感知器。我們稱這個特殊情況為對抗網絡。在這情況下,我們可以利用高度成熟的BP算法和dropout算法[16]訓練兩個模型;以及利用前向算法通過生成模型,計算模型生成樣本。(這個過程中)不需要近似推斷和馬爾科夫鏈條。
2.Related work
目前,大多數關于深度生成模型的工作都聚焦于 提供概率分布函數的 參數化規范 的模型上。可以通過最大化對數似然函數訓練模型。在這個模型家族中,最成功的是深度玻爾茲曼機(Deep Boltzmann machine)[25]。這些模型通常具有難以處理的似然函數,因此需要對似然梯度進行大量的近似。這些困難促使“生成機器”的發展–即不明確表示似然性,但能夠從所需分布生成樣本的模型。生成隨機網絡[4]是生成機器的一個例子,它可以通過精確的反向傳播而不是Boltzmann機器所需的大量近似來訓練。這項工作通過消除生成隨機網絡中使用的馬爾可夫鏈擴展了生成機器的概念。
我們的工作是通過 生成過程 反向傳播導數,通過觀察
lim?σ→0?xE?~N(0,σ2I)f(x+?)=?xf(x)\lim _{\sigma \rightarrow 0} \nabla_{\boldsymbol{x}} \mathbb{E}_{\epsilon \sim \mathcal{N}\left(0, \sigma^{2} \boldsymbol{I}\right)} f(\boldsymbol{x}+\epsilon)=\nabla_{\boldsymbol{x}} f(\boldsymbol{x}) σ→0lim??x?E?~N(0,σ2I)?f(x+?)=?x?f(x)
我們開發這項工作時,并不知道金馬和韋林[18]和雷森德等人[23]發展了更一般的隨機反向傳播規則,允許通過有限方差的高斯分布進行反向傳播,并反向傳播到協方差參數和均值。這些反向傳播規則允許學習生成器的條件方差,在本文中,我們將其作為一個超參數處理。Kingma和Welling[18]和Rezende等人[23]使用隨機反向傳播訓練變分自編碼器(VAE)。與生成性對抗網絡一樣,變分自編碼器將可微生成網絡與第二個神經網絡配對。與生成性對抗網絡不同,vae中的第二個網絡識別模型,執行近似推理工作。gans需要通過可見單元來微分,因此不能對離散數據建模;vae需要通過隱藏單元來微分,因此不能有離散的潛在變量。其他類似vae的方法也存在[12,22],但與我們的方法關系不大。
先前有些工作嘗試使用判別準則來訓練生成模型[29,13]。這些標準則對于深層生成模型來說是難以適用的。這些方法甚至很難用來對深度模型進行近似,因為它們涉及的概率比不能通過概率下界用變分推斷來近似。噪聲對比估計(nce)[13]涉及通過學習 使模型有助于從固定噪聲分布 中區分數據 的權重 來訓練生成模型。使用先前訓練過的模型作為噪聲分布,可以訓練一系列高質量的模型。這可以看作是一種非正式的競爭機制,在核心類似于對抗性網絡博弈中使用的正式競爭。NCE的關鍵局限性在于它的“鑒別器”是由噪聲分布的概率密度和模型分布的概率密度之比來定義的,因此它需要具有評估和反向傳播兩種密度的能力。
以前一些工作已經使用過兩個神經網絡競爭的概念。最相關的工作是可預測性最小化[26]。在可預測性最小化中,神經網絡中的每個隱藏單元都被訓練成不同于第二個網絡的輸出,后者根據所有其他隱藏單元的值來預測該隱藏單元的值。本文工作與可預測性最小化有三個重要的區別:1)本工作中,網絡間的競爭是唯一的訓練準則,它本身就足以訓練網絡。可預測性最小化只是一種正則化方法,它鼓勵神經網絡的隱單元在完成其他任務時在統計上獨立,而不是一個主要的訓練準則。2)競爭的性質不同。在可預測性最小化中,比較了兩個網絡的輸出,一個網絡試圖使輸出相似,另一個網絡試圖使輸出不同。所以其輸出是標量。在gans中,生成器網絡產生一個豐富的高維向量,用作另一個網絡的輸入,并試圖選擇另一個網絡不知道如何區分的輸入。3)學習過程的規格不同。**可預測性極小化是一個目標函數最小化的優化問題,學習方法是使目標函數的最小化。**GANS 是基于一個極大極小博弈,而不是一個優化問題,它具有一個agent尋求最大化而另一個agent尋求最小化的價值函數。博弈在一個鞍點結束,這個鞍點對于一個玩家的策略是最小的,對于另一個玩家的策略是最大的。
生成性對抗網絡有時與“對抗性例子”的相關概念混淆[28]。**對抗性的例子 是通過直接對分類網絡的輸入使用 基于梯度的優化 來找到的例子,以便找到與數據相似但又被錯誤分類的例子。**這與目前的研究不同,因為對抗性的例子不是一種培養生成模型的機制。相反,對抗性的例子主要是一種分析工具,用來顯示神經網絡以有趣行為,通常以高度的自信地將兩幅圖像分為兩類,即使人類觀察者無法察覺它們之間的差異。這些對抗性例子的存在確實表明,生成性對抗性網絡訓練可能效率低下,因為它們表明,現代的鑒別網絡可以自信地識別一個類,而不必模仿該類的任何人類可感知屬性(人類肉眼區分的依賴特征)。
3.Adversarial nets
當(生成模型和判別模型)都是多層感知器時,對 抗模型框架 能夠被直接應用。為了學習 生成器 在 數據 xxx 的分布,我們在輸入噪聲變量 pz(z)p_z(z)pz?(z) 的(基礎)上定義了一個先驗,將 數據空間 的映射 表達成 G(z;θg)G(z;\theta_g)G(z;θg?),其中GGG是由多層感知器表示的可微函數,參數為θg\theta_gθg?。我們還定義了第二個多層感知器D(X;θd)D(X;\theta_d)D(X;θd?),它的輸出是一個簡單的標量。D(x)D(x)D(x)表l示x來自數據而不是pgp_gpg?的 概率。我們訓練DDD,以最大化給訓練樣本和G產生的樣本打上正確標簽概率。我們同時訓練GGG最小化log(1?D(G(Z)))log(1-D(G(Z)))log(1?D(G(Z)))。換一句話說,DDD和GGG使用值函數V(G,D)V(G,D)V(G,D)‘開展’一下的雙人最小最大博弈:
(min?Gmax?DV(D,G)=Ex~pdata(x)[logD(x)]+Ez~pz(z)[log(1?D(G(z)))](1)(\min_G\max_DV(D,G)=E_{x\sim p_{data}(x)}[logD(x)]+E_{z\sim p_z(z)}[log(1-D(G(z)))]\tag 1 (Gmin?Dmax?V(D,G)=Ex~pdata?(x)?[logD(x)]+Ez~pz?(z)?[log(1?D(G(z)))](1)
在下一節中,我們會展示對抗網絡的理論分析,基本上顯示:訓練標準允許人們恢復數據的生成分布,因為GGG和DDD被賦予足夠的容量(enough capacity) ,例如,在非參數限制中。本方法的不太正式,更具教學意義的解釋,請參見圖1。實際中,我們需要使用迭代的數值方法來是實施博弈。在訓練的內層循環中‘優化D到完成(完美)’在計算上是不可能實現的,并且在有限數據集合上會導致過擬合。相反,我們在’k步優化D’與‘一步優化G’之間交替進行。這一處理方式,只要G變換的足夠慢;就能使得D保持接近他的最優解。這一過程在算法1中正式呈現。
在實際中,等式1可能無法為‘G學習到足夠好’提供足夠的梯度。在學習之初,當G的性能很差時,D可以‘有高自信’地拒絕樣本;因為這些樣本與訓練數據明顯不同。在這種情況下,log(1?D(G(z)))log(1-D(G(z)))log(1?D(G(z)))是飽和的。我們可以訓練G去最大化log(D(G(z)))log(D(G(z)))log(D(G(z))),而不是訓練G去最小化log(1?D(G(z)))log(1-D(G(z)))log(1?D(G(z)))。該目標方程 導致了 G和D的相同的動力學固定點,但是,在早期學習的時候提供更強的梯度。
4.Theoretical Results
生成器G隱含地將概率分布pgp_gpg?定義為當z~pzz\sim p_zz~pz?時所獲得的樣本G(z)的分布。因此,如果給定足夠的容量和訓練時間,我們希望 算法1收斂至pdatap_{data}pdata?的良好預期。這個部分的結果是在非參數設定中完成的,例如,我們通過研究概率密度函數空間的收斂性 來 表示具有 有限容量的模型。
我們會在4.1節中展示這個最小最大化博弈對于pg=pdatap_g=p_{data}pg?=pdata?有一個全局最優。我們會在4.2節展示算法1優化等式1,從而獲得期待的結果。
圖1:通過同時更新判別分布(D藍色,虛線)來訓練生成對抗網絡,以便區分來自數據產生分布(黑,虛線)pxp_xpx? 與 模型產生的分布(綠色,實線)pg(G)p_g(G)pg?(G)。下面的水平線是z 的采樣域,(圖示)這種情況下是均勻的,上面的水平線是x域的一部分。向上的箭頭顯示了映射x=G(z)x=G(z)x=G(z)如何對變換樣本施加非均勻分布。G在高密度區域收縮,在低密度區域擴展。再解釋4個圖。
4.1全局最優 pg=pdatap_g=p_{data}pg?=pdata?
首先固定G,尋求D使,GAN目標函數V(G,D)V(G,D)V(G,D)最大化。等價于求pdatap_{data}pdata?與pgp_gpg?之間的JS散度。
固定D?D^*D?,尋求G使得V(G,D?)V(G,D^*)V(G,D?)最小,就是使pdatap_{data}pdata?與pgp_gpg?之間的JS散度最小化,當pg=pdatap_g=p_{data}pg?=pdata?,V(G,D?)V(G,D^*)V(G,D?)最小。
4.2算法1的收斂性質
理論分析:嚴格按照4.1求解,pgp_gpg?會收斂于pdatap_{data}pdata?。但是采用迭代優化時,求出最優的D?D^*D?之后,迭代一步G0?>G1G_0->G_1G0??>G1?,此時D?D^*D?不是V(G1,D)V(G_1,D)V(G1?,D)的最大值,那么,繼續迭代將會愈加偏離收斂目標。且迭代找到最優值需要的次數很多,所以,在實際算法中,沒更新k次判別器后更新一次生成器。雖然pgp_gpg?不會嚴格收斂于pdatap_{data}pdata?,但是,生成器的效果已經能夠符合人么的需求。
5.Experiments
我們用一系列數據集訓練了對抗網絡,包括 MNIST [23],多倫多人臉數據庫(TFD)[28]和CIFAR-10 [21]。 生成網絡使用線性激活[19,9]和 S 形激活的混合激活層,而判別網絡使用 Maxout[10]激活。隨機丟棄算法(Dropout)[17]用于訓練判別網絡。 雖然我們的理論框架允許在生成器的中間層使用壓差和其他噪聲,但我們使用噪聲作為生成網絡最底層的輸入。.
我們通過將高斯 Parzen 窗口擬合到用 G 生成的樣本并在該分布下報告對數似然來估計測試集數據在pgp_gpg?下的概率。參數σ通過驗證集上的交叉驗證獲得高斯算子。 該程序在 Breuleux 等人的研究中[8]引入并用于各種生成模型,其確切的可能性是不易處理的[25,3,5]。實驗結果 顯示在表 1 中。這種估計概率的方法具有稍高的方差,并且在高維空間中表現不佳,但它是我們所知的最佳方法。 可以采樣但不能估計概率的生成模型的進步直接激發了對如何評估此類模型的進一步研究。
6.Advantagesa and disadvantages
與以前的建模框架相比,這個新框架具有優點和缺點。缺點主要在于沒有pg(x)p_g(x)pg?(x)的明確表示,并且 D 在訓練期間必須與 G 很好地同步(特別是,在不更新 D 的情況下,G 不得過多訓練,以避免“Helvetica 場景” “其中 G 將太多的 z 值折疊到 x 的相同值以具有足夠的多樣性來模擬pdatap_{data}pdata? ”,就像Boltzmann 機器的負鏈必須在學習步驟之間保持最新一樣。優點是永遠不需要馬爾可夫鏈,只有反向傳播,學習期間不需要推理,并且可以將多種功能合并到模型中。表 2 總結了生成對抗網絡與其他生成建模方法的比較。
上述優點主要是在計算上。對抗模型也可能從生成網絡中獲得一些統計優勢,而不是直接用數據示例更新,而是僅通過流經判別器的梯度。這意味著輸入的組件不會直接復制到生成器的參數中。對抗性網絡的另一個優點是它們可以表示非常尖銳,甚至是較為初始的分布,而基于馬爾可夫鏈的方法要求分布有些模糊,以便鏈能夠在模式之間混合.
7.Conclusions and future work
該框架有許多直接的擴展 :
1.條件生成模型p(x∣c)p(x|c)p(x∣c): 可以通過將 c 作為 G 和 D 的輸入來得到這個后驗概率 。
2.給定 x,可以通過訓練一個輔助的網絡來學習近似推理,達到預測 z 的目的。這和 wakesleep 算法[15]訓練出的推理網絡類似,但是它具有一個優勢,就是在生成器訓練完成后,這個推理網絡可以針對固定的生成器進行訓練。
3.可以通過訓練共享參數的條件模型族來近似地對所有條件概率p(xs∣xs′)p(x_s|x_{s'})p(xs?∣xs′?)進行建模,其中 S是 x 下標的子集。本質上,可以使用敵對網絡來實現確定性 MP-DBM[11]的隨機擴展。
4.半監督學習:當有限的標簽數據可用時,來自鑒別器或推理網絡的特征可以改善分類器的性能。
5.改善效率:通過為協調 G 和 D 設計更好的方法,或在訓練期間確定更好的分布來采樣 z,能夠極大的加速訓練。
本文已經展示了對抗模型框架的可行性,表明這些研究方向是有用的。
8.GAN-代碼實現資料
自2014年GAN一文發布以來,網上出現了各種各樣GAN的變體。原文網絡結構:D和G均采用多層感知器,但是具體代碼實現沒找到。以下整理了4個最基本的GAN架構實現的教程與代碼。
8.1 pytorch 教程
pytorch 教程中有DGGAN的例子代碼,主要是處理人臉生成問題。英文教程,英文注釋代碼,G與D用深度卷積神經網絡搭建。
官網教程:
https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html
github資料:
https://github.com/pytorch/tutorials/blob/master/beginner_source/dcgan_faces_tutorial.py
https://github.com/pytorch/examples/blob/master/dcgan
8.2 簡書教程
莫煩的簡書教程(一如既往的好),主要實現給定上下界之后,曲線生成問題。中文教程,曲線擬合問題比較簡單,用兩層感知器搭建G與D.
https://morvanzhou.github.io/tutorials/machine-learning/torch/4-06-GAN/
https://github.com/MorvanZhou/PyTorch-Tutorial/blob/master/tutorial-contents/406_GAN.py
8.3 CSDN博客
CSDN博客,手寫數字生成代碼實現。中英參半的教程,圖片代碼,D和G都用多層感知器搭建。
https://blog.csdn.net/IAMoldpan/article/details/78711426
8.4 pytorch 中文文檔
pytorch 中文文檔中的一篇教程。手寫數字生成代碼實現,中文教程,圖片代碼,D和G都用多層感知器搭建。3和4的結構稍有不同,但是在輸入數據時,肯定得先將圖片變成向量才能輸入。
https://ptorch.com/news/14.html