GANs简介
在對GAN進(jìn)行學(xué)習(xí)的過程中參考了一些好的文章,在此總結(jié)出來自己認(rèn)為有意義的學(xué)習(xí)筆記。
參考原文:http://blog.csdn.net/zouxy09/article/details/8195017
http://blog.csdn.net/on2way/article/details/72773771
Generative Adversarial Nets
GAN的鼻祖之作是2014年NIPS一篇文章:Generative Adversarial Net,可以細(xì)細(xì)品味。
GAN的思想是是一種二人零和博弈思想(two-player game),博弈雙方的利益之和是一個常數(shù),比如兩個人掰手腕,假設(shè)總的空間是一定的,你的力氣大一點,那你就得到的空間多一點,相應(yīng)的我的空間就少一點,相反我力氣大我就得到的多一點,但有一點是確定的就是,我兩的總空間是一定的,這就是二人博弈。
引申到GAN里面就是可以看成,GAN中有兩個這樣的博弈者,一個人名字是生成模型(G),另一個人名字是判別模型(D)。他們各自有各自的功能。
一個簡單的例子如下圖所示:假設(shè)在訓(xùn)練開始時,真實樣本分布、生成樣本分布以及判別模型分別是圖中的黑線、綠線和藍(lán)線??梢钥闯?#xff0c;在訓(xùn)練開始時,判別模型是無法很好地區(qū)分真實樣本和生成樣本的。接下來當(dāng)我們固定生成模型,而優(yōu)化判別模型時,優(yōu)化結(jié)果如第二幅圖所示,可以看出,這個時候判別模型已經(jīng)可以較好的區(qū)分生成數(shù)據(jù)和真實數(shù)據(jù)了。第三步是固定判別模型,改進(jìn)生成模型,試圖讓判別模型無法區(qū)分生成圖片與真實圖片,在這個過程中,可以看出由模型生成的圖片分布與真實圖片分布更加接近,這樣的迭代不斷進(jìn)行,直到最終收斂,生成分布和真實分布重合。
判別網(wǎng)絡(luò)說,我很強,來一個樣本我就知道它是來自真樣本集還是假樣本集。生成網(wǎng)絡(luò)就不服了,說我也很強,我生成一個假樣本,雖然我生成網(wǎng)絡(luò)知道是假的,但是你判別網(wǎng)絡(luò)不知道呀,我包裝的非常逼真,以至于判別網(wǎng)絡(luò)無法判斷真假,那么用輸出數(shù)值來解釋就是,生成網(wǎng)絡(luò)生成的假樣本進(jìn)去了判別網(wǎng)絡(luò)以后,判別網(wǎng)絡(luò)給出的結(jié)果是一個接近0.5的值,極限情況就是0.5,也就是說判別不出來了,這就是納什平衡了。
詳細(xì)的實現(xiàn)過程:
初始化階段:
初始化生成模型G、判別模型D。
前向傳播階段:
一. 可以有兩種輸入?1.?隨機產(chǎn)生一個隨機向量作為生成模型的數(shù)據(jù),然后經(jīng)過生成模型后產(chǎn)生一個新的向量,作為Fake Image,記作z。?
2.?從數(shù)據(jù)集中隨機選擇一張圖片,將圖片轉(zhuǎn)化成向量,作為Real Image,記作x。?
二. 將由1或者2產(chǎn)生的輸出,作為判別網(wǎng)絡(luò)的輸入,經(jīng)過判別網(wǎng)絡(luò)后輸出一個0到1之間的數(shù),用于表示輸入圖片為Real Image的概率,real為1,fake為0。?
根據(jù)輸入的圖片類型是Fake Image或Real Image將判別模型的輸入數(shù)據(jù)的label標(biāo)記為0或者1。即判別模型的輸入類型為?或者?。
判別模型的損失函數(shù):
當(dāng)輸入的是從數(shù)據(jù)集中取出的Real Image時,只需要考慮第二部分。D(x)為判別模型的輸出,表示輸入x為real 數(shù)據(jù)的概率,目的是讓判別模型的輸出D(x)的輸出盡量靠近1。?
當(dāng)輸入的是fake時,只計算第一部分,G(z)是生成模型的輸出,輸出的是一張F(tuán)ake Image。我們要做的是讓D(G(z))的輸出盡可能趨向于0。這樣的判別模型是有區(qū)分力的。
生成模型的損失函數(shù):
對于生成模型來說,我們要做的是讓G(z)產(chǎn)生的數(shù)據(jù)盡可能的和數(shù)據(jù)集中的數(shù)據(jù)一樣。就是所謂的同樣的數(shù)據(jù)分布。那么我們要做的就是最小化生成模型的誤差,即只將由G(z)產(chǎn)生的誤差傳給生成模型。?
最終的損失函數(shù)為:?
其中表示判別模型的預(yù)測類別,對預(yù)測概率取整,為0或者1。閾值可以自己設(shè)置,或者正常的話就是0.5。
優(yōu)化函數(shù):?
需要注意的是生成模型與對抗模型可以說是完全獨立的兩個模型,好比就是完全獨立的兩個神經(jīng)網(wǎng)絡(luò)模型,他們之間沒有什么聯(lián)系。那么訓(xùn)練這樣的兩個模型的大方法就是:單獨交替迭代訓(xùn)練。
假設(shè)現(xiàn)在生成網(wǎng)絡(luò)模型已經(jīng)有了,那么給一堆隨機數(shù)組,就會得到一堆假的樣本集,真樣本集一直都有?,F(xiàn)在我們?nèi)藶榈亩x真假樣本集的標(biāo)簽,因為我們希望真樣本集的輸出盡可能為1,假樣本集為0,很明顯這里我們就已經(jīng)默認(rèn)真樣本集所有的類標(biāo)簽都為1,而假樣本集的所有類標(biāo)簽都為0。這樣單就判別網(wǎng)絡(luò)來說,此時問題就變成了一個再簡單不過的有監(jiān)督的二分類問題了,直接送到神經(jīng)網(wǎng)絡(luò)模型中訓(xùn)練就完事了。假設(shè)訓(xùn)練完了,下面我們來看生成網(wǎng)絡(luò)。
對于生成網(wǎng)絡(luò),想想我們的目的,是生成盡可能逼真的樣本。那么原始的生成網(wǎng)絡(luò)生成的樣本你怎么知道它真不真呢?就是送到判別網(wǎng)絡(luò)中,所以在訓(xùn)練生成網(wǎng)絡(luò)的時候,我們需要聯(lián)合判別網(wǎng)絡(luò)一起才能達(dá)到訓(xùn)練的目的。所以對于生成網(wǎng)絡(luò)的訓(xùn)練其實是對生成-判別網(wǎng)絡(luò)串接的訓(xùn)練。
對于生成網(wǎng)絡(luò)的訓(xùn)練,我們有了樣本集(只有假樣本集,沒有真樣本集),有了對應(yīng)的label(全為1),就可以訓(xùn)練了。有人說,你這樣一訓(xùn)練,判別網(wǎng)絡(luò)的網(wǎng)絡(luò)參數(shù)不是也跟著變嗎?沒錯,這很關(guān)鍵,所以在訓(xùn)練這個串接的網(wǎng)絡(luò)的時候,一個很重要的操作就是不要判別網(wǎng)絡(luò)的參數(shù)發(fā)生變化,也就是不讓它參數(shù)發(fā)生更新,只是把誤差一直傳,傳到生成網(wǎng)絡(luò)那塊后更新生成網(wǎng)絡(luò)的參數(shù)。這樣就完成了生成網(wǎng)絡(luò)的訓(xùn)練了。
完成生成網(wǎng)絡(luò)訓(xùn)練后,那么我們可以根據(jù)目前新的生成網(wǎng)絡(luò)再對先前的那些噪聲Z生成新的假樣本,并且訓(xùn)練后的假樣本應(yīng)該是更真了才對。然后又有了新的真假樣本集(其實是新的假樣本集),這樣又可以重復(fù)上述過程。我們把這個過程稱作為單獨交替訓(xùn)練。我們可以實現(xiàn)定義一個迭代次數(shù),交替迭代到一定次數(shù)后停止即可。這個時候我們再去看一看噪聲Z生成的假樣本會發(fā)現(xiàn),原來它已經(jīng)很真了。
原始論文中的目標(biāo)公式吧:
上述這個公式說白了就是一個最大最小優(yōu)化問題,其實對應(yīng)的也就是上述的兩個優(yōu)化過程。
拆解就如同下面兩個公式:
優(yōu)化D:
優(yōu)化G:
優(yōu)化D的時候,也就是判別網(wǎng)絡(luò),其實沒有生成網(wǎng)絡(luò)什么事,后面的G(z)這里就相當(dāng)于已經(jīng)得到的假樣本。優(yōu)化D的公式的第一項,使的真樣本x輸入的時候,得到的結(jié)果越大越好,可以理解,因為需要真樣本的預(yù)測結(jié)果越接近于1越好。對于假樣本,需要優(yōu)化是的其結(jié)果越小越好,也就是D(G(z))越小越好,因為它的標(biāo)簽為0。但是呢第一項是越大,第二項是越小,這就矛盾了,所以呢把第二項改成1-D(G(z)),這樣就是越大越好,兩者合起來就是越大越好。
優(yōu)化G的時候,這個時候沒有真樣本什么事,所以把第一項直接去掉了。這個時候只有假樣本,但是我們說這個時候是希望假樣本的標(biāo)簽是1的,所以是D(G(z))越大越好,但是呢為了統(tǒng)一成1-D(G(z))的形式,那么只能是最小化1-D(G(z))。
本質(zhì)上沒有區(qū)別,只是為了形式的統(tǒng)一。之后這兩個優(yōu)化模型可以合并起來寫,就變成了最開始的那個最大最小目標(biāo)函數(shù)了。
GAN強大之處在于可以自動的學(xué)習(xí)原始真實樣本集的數(shù)據(jù)分布,不管這個分布多么的復(fù)雜,只要訓(xùn)練的足夠好就可以學(xué)出來。
生成模型最后可以通過噪聲生成一個完整的真實數(shù)據(jù)(比如人臉),說明生成模型已經(jīng)掌握了從隨機噪聲到人臉數(shù)據(jù)的分布規(guī)律了,有了這個規(guī)律,想生成人臉還不容易。然而這個規(guī)律我們開始知道嗎?顯然不知道,如果讓你說從隨機噪聲到人臉應(yīng)該服從什么分布,你不可能知道。這是一層層映射之后組合起來的非常復(fù)雜的分布映射規(guī)律。然而GAN的機制可以學(xué)習(xí)到,也就是說GAN學(xué)習(xí)到了真實樣本集的數(shù)據(jù)分布。
總結(jié)
- 上一篇: 【SQL2014】 SQL Server
- 下一篇: 明日方舟抽卡模拟器wiki_明日方舟抽卡