不要慫,就是GAN (生成式對抗網絡) (一): GAN 簡介


前面我們用 TensorFlow 寫了簡單的 cifar10 分類的代碼,得到還不錯的結果,下面我們來研究一下生成式對抗網絡 GAN,並且用 TensorFlow 代碼實現。

自從 Ian Goodfellow 在 14 年發表了 論文 Generative Adversarial Nets 以來,生成式對抗網絡 GAN 廣受關注,加上學界大牛 Yann Lecun 在 Quora 答題時曾說,他最激動的深度學習進展是生成式對抗網絡,使得 GAN 成為近年來在機器學習領域的新寵,可以說,研究機器學習的人,不懂 GAN,簡直都不好意思出門。

下面我們來簡單介紹一下生成式對抗網絡,主要介紹三篇論文:1)Generative Adversarial Networks;2)Conditional Generative Adversarial Nets;3)Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks。

首先來看下第一篇論文,了解一下 GAN 的過程和原理:

GAN 啟發自博弈論中的二人零和博弈(two-player game),GAN 模型中的兩位博弈方分別由生成式模型(generative model)和判別式模型(discriminative model)充當。生成模型 G 捕捉樣本數據的分布,用服從某一分布(均勻分布,高斯分布等)的噪聲 z 生成一個類似真實訓練數據的樣本,追求效果是越像真實樣本越好;判別模型 D 是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率,如果樣本來自於真實的訓練數據,D 輸出大概率,否則,D 輸出小概率。可以做如下類比:生成網絡 G 好比假幣制造團伙,專門制造假幣,判別網絡 D 好比警察,專門檢測使用的貨幣是真幣還是假幣,G 的目標是想方設法生成和真幣一樣的貨幣,使得 D 判別不出來,D 的目標是想方設法檢測出來 G 生成的假幣。如圖所示:

在訓練的過程中固定一方,更新另一方的網絡權重,交替迭代,在這個過程中,雙方都極力優化自己的網絡,從而形成競爭對抗,直到雙方達到一個動態的平衡(納什均衡),此時生成模型 G 恢復了訓練數據的分布(造出了和真實數據一模一樣的樣本),判別模型再也判別不出來結果,准確率為 50%,約等於亂猜。

上述過程可以表述為如下公式:

當固定生成網絡 G 的時候,對於判別網絡 D 的優化,可以這樣理解:輸入來自於真實數據,D 優化網絡結構使自己輸出 1,輸入來自於生成數據,D 優化網絡結構使自己輸出 0;當固定判別網絡 D 的時候,G 優化自己的網絡使自己輸出盡可能和真實數據一樣的樣本,並且使得生成的樣本經過 D 的判別之后,D 輸出高概率。

第一篇文章,在 MNIST 手寫數據集上生成的結果如下圖:

 

最右邊的一列是真實樣本的圖像,前面五列是生成網絡生成的樣本圖像,可以看到生成的樣本還是很像真實樣本的,只是和真實樣本屬於不同的類,類別是隨機的。

 

第二篇文章想法很簡單,就是給 GAN 加上條件,讓生成的樣本符合我們的預期,這個條件可以是類別標簽(例如 MNIST 手寫數據集的類別標簽),也可以是其他的多模態信息(例如對圖像的描述語言)等。用公式表示就是:

式子中的 y 是所加的條件,結構圖如下:

生成結果如下圖:

圖中所加的條件 y 是類別標簽。

 

第三篇文章,簡稱(DCGAN),在實際中是代碼使用率最高的一篇文章,本系列文的代碼也是這篇文章代碼的初級版本,它優化了網絡結構,加入了 conv,batch_norm 等層,使得網絡更容易訓練,網絡結構如下:

可以有加條件和不加條件兩種網絡,論文還做了好多試驗,展示了這個網絡在各種數據集上的結果。有興趣同學可以去看論文,此文我們只從代碼的角度理解去理解它。

 

 

 

參考文獻:

1. http://blog.csdn.net/solomon1558/article/details/52549409

 


免責聲明!

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



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