生成對抗網絡GAN(Generative Adversarial Network)


生成對抗網絡GAN(Generative Adversarial Network)

 

 

 

 

2014年Szegedy在研究神經網絡的性質時,發現針對一個已經訓練好的分類模型,將訓練集中樣本做一些細微的改變會導致模型給出一個錯誤的分類結果,這種雖然發生擾動但是人眼可能識別不出來,並且會導致誤分類的樣本被稱為對抗樣本,他們利用這樣的樣本發明了對抗訓練(adversarial training),模型既訓練正常的樣本也訓練這種自己造的對抗樣本,從而改進模型的泛化能力。在未加擾動之前,模型認為輸入圖片有57.7%的概率為熊貓,但是加了之后,人眼看着好像沒有發生改變,但是模型卻認為有99.3%的可能是長臂猿。

 

生成對抗網絡GAN是一種深度學習模型,它源於2014年發表的論文:《Generative Adversarial Nets》,論文地址:https://arxiv.org/pdf/1406.2661.pdf

GAN的用途非常廣泛,比如:有大量的卡通頭像,想通過學習自動生成卡通圖片,此問題只提供正例,可視為無監督學習問題。不可能通過人工判斷大量數據。如何生成圖片?如何評價生成的圖片好壞?GAN為此類問題提供了解決方法。

GAN同時訓練兩個模型:生成模型G(Generative Model)和判別模型D(Discriminative Model),生成模型G的目標是學習數據的分布,判別模型D的目標是區別真實數據和模型G生成的數據。以生成卡通圖片為例,生成網絡G的目標是生成盡量真實的圖片去欺騙判別網絡D。而D的目標就是盡量把G生成的圖片和真實的圖片分別開來。G和D構成了一個動態的“博弈過程”,通過迭代雙方能力都不斷提高。

 

生成對抗網絡GAN的用途

  • 生成數據 GAN常用於實現復雜分布上的無監督學習和半監督學習,學習數據的分布,模擬現有數據生成同類型的圖片、文本、旋律等等。
  • 數據增強 GAN也用於擴展現有的數據集,即數據增強。使用GAN訓練好的生成網絡,可以在數據不足時用於補充數據。
  • 生成特定數據 GAN掌握了數據生成能力后,可通過加入限制,使模型生成特定類型的數據。比如改變圖片風格,隱去敏感信息,實現諸如數據加密的功能。
  • 使用判斷模型 訓練好的判別模型可以用於判斷數據是否屬於該類別,判斷數據的真實性,以及判斷異常數據。

  

 

 

我們現在擁有大量的手寫數字的數據集,我們希望通過GAN生成一些能夠以假亂真的手寫字圖片。主要由如下兩個部分組成:

  1. 定義一個模型作為生成器(圖中藍色部分Generator),能夠輸入一個向量,輸出手寫數字大小的像素圖像。
  2. 定義一個分類器作為判別器(圖中紅色部分Discriminator)用來判別圖片是真的還是假的(或者說是來自數據集Training set中的,還是生成器中生成的Fake image),輸入為手寫圖片,輸出為判別圖片的標簽。

 

如何訓練GAN

基本流程如下:

  • 初始化判別器D的參數 [公式] 和生成器G的參數 [公式]
  • 從真實樣本中采樣 [公式] 個樣本 { [公式] } ,從先驗分布噪聲中采樣 [公式] 個噪聲樣本 { [公式] } 並通過生成器獲取 [公式] 個生成樣本 { [公式] } 。固定生成器G,訓練判別器D盡可能好地准確判別真實樣本和生成樣本,盡可能大地區分真實樣本和生成的樣本。
  • 循環k次更新判別器之后,使用較小的學習率來更新一次生成器的參數,訓練生成器使其盡可能能夠減小生成樣本與真實樣本之間的差距,也相當於盡量使得判別器判別錯誤。
  • 多次更新迭代之后,最終理想情況是使得判別器判別不出樣本來自於生成器的輸出還是真實的輸出。亦即最終樣本判別概率均為0.5。
Tips: 之所以要訓練k次判別器,再訓練生成器,是因為要先擁有一個好的判別器,使得能夠較好地區分出真實樣本和生成樣本之后,才好更為准確地對生成器進行更新。更直觀的理解可以參考下圖:

生成器判別器與樣本示意圖

 

注:圖中的 黑色虛線表示 真實的樣本的分布情況, 藍色虛線表示判別器判別概率的分布情況, 綠色實線表示 生成樣本的分布。 [公式] 表示噪聲, [公式][公式] 表示通過生成器之后的分布的映射情況。

我們的目標是使用生成樣本分布(綠色實線)去擬合真實的樣本分布(黑色虛線),來達到生成以假亂真樣本的目的。

可以看到在 (a)狀態處於最初始的狀態的時候,生成器生成的分布和真實分布區別較大,並且判別器判別出樣本的概率不是很穩定,因此會先訓練判別器來更好地分辨樣本。
通過多次訓練判別器來達到 (b)樣本狀態,此時判別樣本區分得非常顯著和良好。然后再對生成器進行訓練。
訓練生成器之后達到 (c)樣本狀態,此時生成器分布相比之前,逼近了真實樣本分布。
經過多次反復訓練迭代之后,最終希望能夠達到 (d)狀態,生成樣本分布擬合於真實樣本分布,並且判別器分辨不出樣本是生成的還是真實的(判別概率均為0.5)。也就是說我們這個時候就可以生成出非常真實的樣本啦,目的達到。
圖中展示了兩個模型的優化過程,其中黑色代表真實數據,綠色表示生成數據,藍色表示判別結果;在圖(a)中,生成模型沒能很好地模擬真實數據分布,差別模型也效果不佳;圖(b)優化了判別模型;圖(c)隨着生成模型的優化,生成數據逐漸接近真實數據;圖(d)是最終效果,生成模型完美擬合真實數據,兩種數據分布一致,判別模型將無法區分真實數據和生成數據D(x)=1/2。

 

GAN是一種全新的非監督式的架構(如下圖所示)。GAN包括了兩套獨立的網絡,兩者之間作為互相對抗的目標。第一套網絡是我們需要訓練的分類器(下圖中的D),用來分辨是否是真實數據還是虛假數據;第二套網絡是生成器(下圖中的G),生成類似於真實樣本的隨機樣本,並將其作為假樣本。

詳細說明:

D作為一個圖片分類器,對於一系列圖片區分不同的動物。生成器G的目標是繪制出非常接近的偽造圖片來欺騙D,做法是選取訓練數據潛在空間中的元素進行組合,並加入隨機噪音,例如在這里可以選取一個貓的圖片,然后給貓加上第三只眼睛,以此作為假數據。

在訓練過程中,D會接收真數據和G產生的假數據,它的任務是判斷圖片是屬於真數據的還是假數據的。對於最后輸出的結果,可以同時對兩方的參數進行調優。如果D判斷正確,那就需要調整G的參數從而使得生成的假數據更為逼真;如果D判斷錯誤,則需調節D的參數,避免下次類似判斷出錯。訓練會一直持續到兩者進入到一個均衡和諧的狀態。

訓練后的產物是一個質量較高的自動生成器和一個判斷能力較強的分類器。前者可以用於機器創作(自動畫出“貓”“狗”),而后者則可以用來機器分類(自動判斷“貓”“狗”)。

 

 

 

 

GAN模型的目標函數如下:

 其中Pdata是真實數據的分布,式中左半部分將真實數據x代入判別模型D(x),D的輸出范圍是從0-1,0為假數據,1為真數據;由於x是真實數據,D模型希望D(x)=1;右半部分將隨機噪聲z代入生成模型G產生模擬數據G(z),並使用判別模型D判別它是否為真實數據,G模型希望D(G(z))=1,1-D(G(z))=0;相反,D模型希望D(G(z))=0,1-D(G(z))=1。也就是說,G希望上式結果越小越好,而D希望上式結果越大越好。最終函數V既非最大,也非最小,找到雙方的利益平衡點——生成數據完全擬合真實數據時達到納什平衡。

 
在這里,訓練網絡D使得最大概率地分對訓練樣本的標簽(最大化log D(x)和log(1—D(G(z)))),訓練網絡G最小化log(1-D(G(z))),即最大化D的損失。而訓練過程中固定一方,更新另一個網絡的參數,交替迭代,使得對方的錯誤最大化,最終,G 能估測出樣本數據的分布,也就是生成的樣本更加的真實。

    或者我們可以直接理解G網絡的loss是log(1—D(G(z))),

    D的loss是 —(log D(x))+log(1—D(G(z)))

然后從式子中解釋對抗,我們知道G網絡的訓練是希望D(G(z))趨近於1,也就是正類,這樣G的loss就會最小。而D網絡的訓練就是一個2分類,目標是分清楚真實數據和生成數據,也就是希望真實數據的D輸出趨近於1,而生成數據的輸出即D(G(z))趨近於0,或是負類。這里就是體現了對抗的思想。
探討

GAN強大之處在於能自動學習原始真實樣本集的數據分布,不管這個分布多么的復雜,只要訓練的足夠好就可以學出來。

傳統的機器學習方法,一般會先定義一個模型,再讓數據去學習。
比如知道原始數據屬於高斯分布,但不知道高斯分布的參數,這時定義高斯分布,然后利用數據去學習高斯分布的參數,得到最終的模型。
再比如定義一個分類器(如SVM),然后強行讓數據進行各種高維映射,最后變成一個簡單的分布,SVM可以很輕易的進行二分類(雖然SVM放松了這種映射關系,但也給了一個模型,即核映射),其實也是事先知道讓數據該如何映射,只是映射的參數可以學習。
以上這些方法都在直接或間接的告訴數據該如何映射,只是不同的映射方法能力不一樣。

而GAN的生成模型最后可以通過噪聲生成一個完整的真實數據(比如人臉),說明生成模型掌握了從隨機噪聲到人臉數據的分布規律。GAN一開始並不知道這個規律是什么樣,也就是說GAN是通過一次次訓練后學習到的真實樣本集的數據分布。

優點 vs. 缺點

    優點:

        模型只用到了反向傳播,而不需要馬爾科夫鏈

        訓練時不需要對隱變量做推斷

        理論上,只要是可微分函數都可以用於構建D和G,因為能夠與深度神經網絡結合做深度生成式模型

        G的參數更新不是直接來自數據樣本,而是使用來自D的反向傳播(這也是與傳統方法相比差別較大的)

        從實際結果來看,GAN看起來能產生更好的生成樣本

        GAN框架可以訓練任何一種生成器網絡(理論上,然而在實踐中,很難使用增強學習去訓練有離散輸出的生成器),大多數其他架構需要生成器有一些特定的函數形式,就像輸出層必須是高斯化的.另外所有其他框架需要生成器整個都是非零權值(put non-zero mass everywhere),然而,GANs可以學習到一個只在靠近真實數據的地方(神經網絡層)產生樣本點的模型( GANs can learn models that generate points only on a thin manifold that goes near the data.)【指的是GAN學習到的分布十分接近真實分布,這里把分布密度函數看作高維流行當中的點,某個類型的真實分布,可能是這個高維空間中的低維流行,想象三維空間中一張卷曲的紙。GAN學習的G能夠盡量的“收斂”到這張紙上,而別的生成模型不行,總是在真實的流行之外有一定的分布,不夠收斂。非零的mass指的是分布的“密度”,或者分布的“微元”】

        沒有必要遵循任何種類的因式分解去設計模型,所有的生成器和判別器都可以正常工作

        相比PixelRNN, GAN生成采樣的運行時間更短,GANs一次產生一個樣本,然而PixelRNNs需要一個像素一個像素的去產生樣本

        相比VAE, GANs沒有變分下界,如果鑒別器訓練良好,那么生成器可以完美的學習到訓練樣本的分布.換句話說,GANs是漸進一致的,但是VAE是有偏差的

        相比深度玻爾茲曼機, GANs沒有變分下界,也沒有棘手的配分函數,樣本是一次生成的,而不是重復的應用馬爾科夫鏈來生成的

        相比GSNs, GANs產生的樣本是一次生成的,而不是重復的應用馬爾科夫鏈來生成的

        相比NICE和Real NVE,GANs沒有對潛在變量(生成器的輸入值)的大小進行限制

        GANs是一種以半監督方式訓練分類器的方法.在你沒有很多帶標簽的訓練集的時候,你可以不做任何修改的直接使用我們的代碼,通常這是因為你沒有太多標記樣本

        GANs可以比完全明顯的信念網絡(NADE,PixelRNN,WaveNet等)更快的產生樣本,因為它不需要在采樣序列生成不同的數據

        GANs不需要蒙特卡洛估計來訓練網絡,人們經常抱怨GANs訓練不穩定,很難訓練,但是他們比訓練依賴於蒙特卡洛估計和對數配分函數的玻爾茲曼機簡單多了.因為蒙特卡洛方法在高維空間中效果不好,玻爾茲曼機從來沒有拓展到像ImgeNet任務中.GANs起碼在ImageNet上訓練后可以學習去畫一些以假亂真的狗

        相比於變分自編碼器, GANs沒有引入任何決定性偏置( deterministic bias),變分方法引入決定性偏置,因為他們優化對數似然的下界,而不是似然度本身,這看起來導致了VAEs生成的實例比GANs更模糊

        相比非線性ICA(NICE, Real NVE等,),GANs不要求生成器輸入的潛在變量有任何特定的維度或者要求生成器是可逆的

        相比玻爾茲曼機和GSNs,GANs生成實例的過程只需要模型運行一次,而不是以馬爾科夫鏈的形式迭代很多次

    缺點:

        可解釋性差,生成模型的分布 Pg(G)沒有顯式的表達

        比較難訓練,D與G之間需要很好的同步(例如D更新k次而G更新一次),GAN模型被定義為極小極大問題,沒有損失函數,在訓練過程中很難區分是否正在取得進展。GAN的學習過程可能發生崩潰問題(collapse problem),生成器開始退化,總是生成同樣的樣本點,無法繼續學習。當生成模型崩潰時,判別模型也會對相似的樣本點指向相似的方向,訓練無法繼續。

        網絡難以收斂,目前所有的理論都認為GAN應該在納什均衡上有很好的表現,但梯度下降只有在凸函數的情況下才能保證實現納什均衡。

        訓練GAN需要達到納什均衡,有時候可以用梯度下降法做到,有時候做不到.還沒有找到很好的達到納什均衡的方法,所以訓練GAN相比VAE或者PixelRNN是不穩定的,但在實踐中它還是比訓練玻爾茲曼機穩定的多

        它很難去學習生成離散的數據,就像文本

        相比玻爾茲曼機,GANs很難根據一個像素值去猜測另外一個像素值,GANs天生就是做一件事的,那就是一次產生所有像素, 你可以用BiGAN來修正這個特性,它能讓你像使用玻爾茲曼機一樣去使用Gibbs采樣來猜測缺失值

 

代碼

在圖像處理領域使用生成對抗網絡可以讓模型學習生成特定類型的圖片。推薦生成卡通人物圖片的例程:

https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter7-GAN生成動漫頭像
(《深度學習框架PyTorch:入門與實踐》第七章的配套代碼)

README中有對應的資源下載地址,該程序只有兩三百行代碼,在沒有GPU支持的機器上花幾個小時也能訓練完成。模型效果如下圖所示:其中左圖為第一次迭代的結果,右圖為第25次迭代后的結果。

程序使用兩個模型,其中一個用於生成圖像,另一個用於判斷圖像是否為模型生成,兩個深度學習網絡互為逆過程,判別網絡由多個卷積構成,用於層層提取特征,最終判斷是否為真實圖片,而生成網絡由多個反卷積層構成,它通過隨機噪聲層層擴展生成圖片。在博弈過程中兩個模型各自優化,最終使模型具備生成特定類型圖片的能力。

需要注意的是上例中的圖片和曲線擬合都針對連續型數據,可以通過調整網絡參數的方法逐漸逼近最佳值,對於生成文本一類的離散數據,則需要進一步修改模型。

GAN的一些經典變種

CGAN
CGAN首次提出為GAN增加限制條件,從而增加GAN的准確率。原始的GAN產生的數據模糊不清,為了解決GAN太過自由這個問題,一個很自然的想法就是給GAN加一些約束,於是便有了這篇Conditional Generative Adversarial Nets,這篇工作的改進非常straightforward,在生成模型和判別模型分別為數據加上標簽,也就是加上了限制條件。實驗表明很有效。

DCGAN
DCGAN全稱為Deep convolutional generative adversarial networks,即將深度學習中的卷積神經網絡應用到了對抗神經網絡中,這篇文章在工程領域內的意義及其大,解決了很多工程性的問題,再加上其源碼的開放,將其推向了一個高峰。

這個模型為工業界具體使用CNN的對抗生成網絡提供了非常完善的解決方案,並且生成的圖片效果質量精細,為之后GAN的后續再應用領域的發展奠定了很好的基礎,當然也可以說提供了一個標桿。

iGAN
iGAN完美地將DCGAN和manifold learning融合在一起,很好的展現了一個DCGAN在實踐應用方面的具體案例,將交互這種可能性實現,這對將來類似的應用提供了很好的模板。

LAPGAN
江湖人稱拉普拉斯對抗生成網絡,主要致力於生成更加清晰,更加銳利的數據。

LAPGAN事實上受啟發與CGAN,同樣在訓練生成模型的時候加入了conditional variable,這也是本案例成功的一大重要原因。

SimGAN
Apple出品的SimGAN本質地利用了GAN可以產生和訓練數據質量一樣的生成數據這個特性,通過GAN生成大量的和訓練數據一樣真實的數據,從而解決當前大規模的精確標注數據難以獲取,人工標注成本過高等一系列問題。

InfoGAN
InfoGAN是一種能夠學習disentangled representation的GAN,比如人臉數據集中有各種不同的屬性特點,如臉部表情、是否帶眼鏡、頭發的風格眼珠的顏色等等,這些很明顯的相關表示, InfoGAN能夠在完全無監督信息(是否帶眼鏡等等)下能夠學習出這些disentangled representation,而相對於傳統的GAN,只需修改loss來最大化GAN的input的noise和最終輸出之間的互信息。

AC-GAN
AC-GAN即auxiliary classifier GAN。

WGAN-GP

 

 

 

 

REF

https://blog.csdn.net/literacy_wang/article/details/109500829

https://zhuanlan.zhihu.com/p/33752313

https://zhuanlan.zhihu.com/p/26499443

https://zhuanlan.zhihu.com/p/26499443

https://blog.csdn.net/on2way/article/details/72773771

https://zhuanlan.zhihu.com/p/106717106

https://www.cnblogs.com/wangxiaocvpr/p/6069026.html

https://blog.csdn.net/xg123321123/article/details/78034859

https://blog.csdn.net/xg123321123/article/details/78034859


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM