一.GAN網(wǎng)絡(luò)機(jī)理
????????首先先從一幅圖入手,如圖1所示:

????????假設(shè)在訓(xùn)練開始時,真實樣本分布、生成樣本分布以及判別模型分別是圖中的黑線、綠線和藍(lán)線,其中噪聲就是圖中的z,目的就是為了生成綠線。
? ? ? ? 第二小圖所示,固定生成樣本,先讓判斷器判斷準(zhǔn),以藍(lán)線和黑線交點為起點,以右判斷為真實,以左判斷為假,感覺自己很聰明能夠判斷真假。
? ? ? ? 然后來到第三小圖,生成器去和真實樣本數(shù)據(jù)做一個擬合,從而誤導(dǎo)判決器,但判決器還是能辨認(rèn)出來,生成器騙不了它。
? ? ? ? 第四小圖為,當(dāng)生成器的數(shù)據(jù)概率分別和真實數(shù)據(jù)概率分布重合時,判決器從此就變得傻了,不能對其辨別真?zhèn)危?b>判決器失敗,生成器成功,以假亂真。
二.分析問題
? ? ? ? 圖2為GAN流程圖:

? ? ??????我們有了上述思路和流程圖,就可以來確定問題去實現(xiàn)它了(明確幾個問題去解決):
? ? ? ? 1.? 目標(biāo)函數(shù)該如何設(shè)定??
? ??????2.? 如何生成圖片??
? ??????3.? G(判決器)和D(生成器)應(yīng)該如何設(shè)置??
? ??????4.? 如何進(jìn)行訓(xùn)練?
1.GAN目標(biāo)函數(shù)確定
? ? ? ? ? ?判別模型的目標(biāo)函數(shù)如下:

? ? ? ??1.?整個式子由兩項構(gòu)成。x表示真實圖片,z表示輸入G網(wǎng)絡(luò)的噪聲,而G(z)表示G網(wǎng)絡(luò)生成的圖片。
? ? ? ? 2. D(x)表示D網(wǎng)絡(luò)判斷真實圖片是否真實的概率(因為x就是真實的。所以對于D來說,這個值越接近1越好)。而D(G(z))是D網(wǎng)絡(luò)判斷G生成的圖片的是否真實的概率。
? ? ? ? 3. G的目的:G應(yīng)該希望自己生成的圖片越接近真實越好。
? ? ? ? 4. D的目的:D的能力越強(qiáng),D(x)應(yīng)該越大,D(G(x))應(yīng)該越小。這時V(D,G)會變大。因此式子對于D來說是求最大(max_D)
? ? ? ? ?5. trick:為了前期加快訓(xùn)練,生成器的訓(xùn)練可以把log(1-D(G(z)))換成-log(D(G(z)))
2.GAN圖片生成? ?訓(xùn)練方法
????以下為論文原文:

下圖為形象化的GAN訓(xùn)練方案

input1為真實數(shù)據(jù);input2為生成數(shù)據(jù)
對于判決器而言,其標(biāo)簽認(rèn)定,對于input1的輸出正常應(yīng)該為“1”,input2的輸出正常應(yīng)該為“0”
第一步,首先把左圖的“T”(生成器)固定住,生成一批樣本,然后和真實數(shù)據(jù)一塊送至判決器判決,這步為訓(xùn)練的判決器,希望判決器能把它倆區(qū)分開,分別打上“1”和“0”標(biāo)簽
第二步,先把右圖的“T”(判決器)固定住了,然后調(diào)節(jié)生成器,讓生成的數(shù)據(jù)也為“1”,去把判決器混淆。這步為訓(xùn)練生成器。
注:所有的圖片都是靠噪音來生成的
本文中展示的腳本都添加了注釋,若難以理解,可參見keras文檔
具體代碼,參見github源碼
3.GAN圖片生成? 生成器G

以下是生成器G的腳本:

4.GAN圖片生成? 判別器D
參見github源碼:https://github.com/jacobgi

以下是判別器D的腳本:

5.GAN圖片生成? 輔助函數(shù)
把判別器D固定,使其能夠調(diào)整生成器G。

6.GAN圖片生成? 訓(xùn)練
然后就可以開始進(jìn)行訓(xùn)練了~~~

7.GAN圖片生成? 生成

這就形成了噪音經(jīng)過一個G網(wǎng)絡(luò),生成了一個圖像,這幅圖像就成功騙過了判決器D。
三.總結(jié)
???以上就是淺談了GAN網(wǎng)絡(luò)的原理,并且搭建了一個原始的GAN網(wǎng)絡(luò)。
? ?感興趣的小伙伴~可以實現(xiàn)CGAN制定類的輸出,DCGAN穩(wěn)定訓(xùn)練網(wǎng)絡(luò),infoGAN實現(xiàn)等。