不要慫,就是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 生成的假幣。如圖所示:.net

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

上述過程能夠表述爲以下公式:blog

當固定生成網絡 G 的時候,對於判別網絡 D 的優化,能夠這樣理解:輸入來自於真實數據,D 優化網絡結構使本身輸出 1,輸入來自於生成數據,D 優化網絡結構使本身輸出 0;當固定判別網絡 D 的時候,G 優化本身的網絡使本身輸出儘量和真實數據同樣的樣本,而且使得生成的樣本通過 D 的判別以後,D 輸出高几率。ci

第一篇文章,在 MNIST 手寫數據集上生成的結果以下圖:深度學習

 

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

 

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

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

生成結果以下圖:

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

 

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

能夠有加條件和不加條件兩種網絡,論文還作了好多試驗,展現了這個網絡在各類數據集上的結果。有興趣同窗能夠去看論文,此文咱們只從代碼的角度理解去理解它。

 

 

 

參考文獻:

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

相關文章
相關標籤/搜索