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