了解GAN网络
GAN網絡,第一次聽說它就不明覺厲。其他網絡都是對輸入圖像進行某種處理,得到某種特定的輸出。而GAN網絡居然可以“無中生有”,無論是去除馬賽克,還是換臉,還是對灰度圖像上色,都顯得不可思議,怎么可能憑空產生多余的信息?
在做了一點初步的了解之后發現,GAN網絡確實和直觀的感覺一樣,它不需要帶標簽的圖像進行訓練,這也是它得到Yann Lecunc稱贊為機器學習十年來最有意思的想法的原因,它使無監督學習成為可能。但作為一個機器學習方法,它依然應該有機器學習的三要素:模型,策略,算法。先再介紹一下GAN網絡的基本情況,再來從三要素分析之。
GAN網絡(Generative Adversarial Networks),生成對抗網絡,由lan Goodfellow在2014年提出,發表在NIPS會議(神經信息處理系統大會)上。https://arxiv.org/abs/1406.2661
模型
GAN網絡使用了兩個模型,一個是生成器Generator(屬于生成模型),一個是鑒別器Discriminator(屬于判別模型)。兩個模型的關系是相互對抗又相互促進,就像軍備競賽一樣,這也是這個網絡名字的由來。生成器使用隨機噪聲或者潛在變量生成逼真的樣本。鑒別器實質就是一個二分類器,判斷當前輸入是真實樣本還是仿冒樣本。
下面是GAN網絡的基本架構。
?
從圖中可以看到GAN網絡基本分為G和D兩部分。G和D有時相連接,有時斷開,這時D的輸入是真正的樣本(但是不帶標簽)。這種特殊的連接關系實際是之后要講的訓練方法:單獨交替迭代訓練。
策略
訓練的結果,這兩個模型會達到納什均衡,鑒別器再也分不清楚生成器生成的樣本是真是假,若分類器是軟判決的,那么輸出的概率都分布在0.5附近,距離1和0的距離相同。
納什均衡是博弈學中的一個概念,被廣泛應用于經濟學中。比如兩個廠商,它們的定價策略有各種組合形式,那么存在這么一直策略組合是穩定的,在這種局面下,任何一方單獨改變策略,都無法獲得收益,于是沒有哪一方會主動改變策略,從而繼續維持穩定。GAN就是生成器和鑒別器之間的博弈。考慮鑒別器D,我們站在鑒別器的角度考慮問題。輸出是概率,分布在0~1之間,1代表真實樣本,0代表假樣本,當D的輸入是真實樣本時,希望輸出越大越好;當D的輸入是生成器產生的假樣本時,希望輸出越小越好,即能正確識別真假。
考慮生成器G,我們希望G生成的樣本也可以以假亂真,被D判別為近似1。
算法
具體算法還需要研究作者的文章。在這里分析一下前面提到的單獨交替迭代訓練。鑒別器比較容易理解,就是一個帶監督的分類器。雖然說我們提供的樣本是沒有標簽的,那只是意味著我們不知道樣本圖像具體的類別,我們也不需要知道,我們只需要知道它是真樣本還是假樣本就可以了(把真/假作為標簽)。這時候鑒別器不需要和生成器相連。也可以理解為先固定生成器的參數,之后還要固定鑒別器的參數,更新生成器的權重。
對于生成網絡,就需要兩個模型相連,這樣我們才能得到反饋。這時候保持鑒別器D的參數不變,還需要注意的是要把生成器生成的結果的標簽置1,因為我們希望鑒別器能把它判為1,這樣把鑒別器的輸出一直逼近1就達到了訓練的目的。
鏈接中給了使用matlab的DeepLearnToolbox生成mnist圖像的例子。但是在github有說明這個項目已經不再維護,作者推薦使用Theano,torch,TensorFlow。
除了普通的GAN,還有條件GAN,讓生成的樣本符合我們的預期。這個條件可以是類別標簽(例如 MNIST 手寫數據集的類別標簽),也可以是其他的多模態信息(例如對圖像的描述語言)等。
使用方法分兩步
??? Download.
addpath(genpath('DeepLearnToolbox'));
然后就可以在test文件夾中運行測試用例了。
P.s 在matlab中使用自定義函數,要將函數定義在同名m文件中,用function修飾
Reference:
總結
- 上一篇: 线性-LR-softmax傻傻分不清楚
- 下一篇: 以LeNet-5为例理解CNN