【文末有福利】生成对抗网络
以最大似然估計(jì)的方式來(lái)獲得生成圖像模型的方法,這種方法是可行的,但有比較大的約束,即模型不能太復(fù)雜,比如服從正態(tài)分布,那么通過(guò)最大似然估計(jì)的方式就可以計(jì)算出,但如果是一個(gè)非常復(fù)雜的分布,那么使用這種方式難以獲得一個(gè)理想的模型,這種強(qiáng)制性的約束就會(huì)造成各種限制,而我們希望的是可以為任意分布,這就需要引出GAN了。
?1 生成器來(lái)擬合分布?
在GAN中有兩個(gè)主要的組成部分,分別是生成器與判別器,這里先討論生成器,因?yàn)橥ㄟ^(guò)最大似然估計(jì)的方式能以計(jì)算復(fù)雜分布的,所以GAN的方法就是直接使用一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)完成這個(gè)事情,而這個(gè)神經(jīng)網(wǎng)絡(luò)就是生成器,因?yàn)樯窠?jīng)網(wǎng)絡(luò)可以擬合任意的分布,所以生成器不存在最大似然估計(jì)會(huì)遇到的問(wèn)題。
對(duì)于GAN中的生成器而言,它會(huì)接收一個(gè)噪音輸入,這個(gè)噪音輸入可以來(lái)自于正態(tài)分布、均勻分布或其他任意分布,經(jīng)過(guò)生成器復(fù)雜的神經(jīng)網(wǎng)絡(luò)變換,輸出的數(shù)據(jù)就可以組成一種復(fù)雜的分布,最小化這個(gè)分布與真實(shí)分布的差異則可。輸入給生成器的數(shù)據(jù)其分布不用太在意,因?yàn)樯善魇且粋€(gè)復(fù)雜的神經(jīng)網(wǎng)絡(luò),它有能力將輸入的數(shù)據(jù)“改造”成各式各樣的數(shù)據(jù)分布,直觀(guān)如圖1所示。
圖1生成器
那么對(duì)生成器而言,它的目標(biāo)函數(shù)就為:
即最小化生成分布與真實(shí)分布的距離。
因?yàn)槲覀円琅f無(wú)法準(zhǔn)確的知道生成分布與真實(shí)分布具體的分布情況,所以依舊使用采樣的方式來(lái)解決這個(gè)問(wèn)題,即從數(shù)據(jù)集中抽取一下樣本將抽取出的樣本的分布看成是與的分布,這種做法的背后思想其實(shí)是大數(shù)定理,知道了兩個(gè)分布后,就可以通過(guò)訓(xùn)練生成器來(lái)最小化兩分布的距離了。
?2 判別器計(jì)算分布的差異?
生成器可以最小化生成分布與真實(shí)分布之間的距離了,但如何定義這個(gè)距離,即生成器目標(biāo)函數(shù)中的如何定義?
GAN可以通過(guò)判別器來(lái)定義這兩個(gè)分布的距離,簡(jiǎn)單回顧一下判別器,如圖2所示。
圖2 判別器
使用真實(shí)數(shù)據(jù)與生成數(shù)據(jù)來(lái)訓(xùn)練判別器,訓(xùn)練的目標(biāo)是讓判別器可以分辨出那些數(shù)據(jù)是真實(shí)數(shù)據(jù)那些數(shù)據(jù)是判別器數(shù)據(jù),即對(duì)真實(shí)數(shù)據(jù)打高分,給生成數(shù)據(jù)打低分,其公式為如下:
對(duì)于從真實(shí)分布抽樣的樣本就打高分,即最大化,對(duì)于從生成分布抽樣的樣本就打低分,即最大化,那么判別器D的目標(biāo)函數(shù)就為:
訓(xùn)練判別器就像訓(xùn)練一個(gè)二元分類(lèi)器,其實(shí)質(zhì)就是可以識(shí)別出真實(shí)數(shù)據(jù)與生成數(shù)據(jù),如圖3所示.
圖3? 二元分類(lèi)器
從圖可以看出,一開(kāi)始,生成器還不會(huì)生成與真實(shí)圖像很接近的生成圖像,此時(shí)判別器做二分類(lèi)就可以輕易的識(shí)別出輸入的數(shù)據(jù)是真實(shí)數(shù)據(jù)還是生成數(shù)據(jù),此時(shí)兩種分布直接的相隔距離較大,但隨著訓(xùn)練加多,生成數(shù)據(jù)與真實(shí)數(shù)據(jù)的分布越來(lái)越接近,此時(shí)判別器就無(wú)法將生成數(shù)據(jù)會(huì)真實(shí)數(shù)據(jù)完全區(qū)分開(kāi)了,兩分布的距離相隔較小。
回到一開(kāi)始的話(huà)題,生成器在訓(xùn)練時(shí)需要先定義出生成分布與真實(shí)分布的距離,而兩分別的距離可以有判別器來(lái)定義,即,生成器從而可以獲得新的目標(biāo)公式,如下:
?3 GAN的數(shù)學(xué)推導(dǎo)?
通過(guò)前面的討論,已經(jīng)明白了生成器用于擬合真實(shí)分布,判別器用來(lái)測(cè)量真實(shí)分布與生成分布之間的距離,接著我們就來(lái)推導(dǎo)一下。
因?yàn)橛?xùn)練生成器先要有兩分布距離的定義,所以這里就先來(lái)推導(dǎo),推導(dǎo)如下:
將判別器的目標(biāo)函數(shù)變換成積分的形式:
因?yàn)榕袆e器希望最大,其實(shí)就是要求上式的中間部分最大,即最大,為了簡(jiǎn)化計(jì)算,我們將記為a,將記為D,將記為b,將變換成如下形式:
要找到一個(gè)D使得函數(shù)最大,求其導(dǎo)數(shù)為0的值則可,公式為:
將上式進(jìn)行簡(jiǎn)單的變化,如下:
將a與b替換會(huì)原來(lái)的值,獲得如下公式:
推導(dǎo)出了,就可以將推導(dǎo)出的值代入到生成器的目標(biāo)函數(shù)中,如下:
將其變換為積分形式,如下:
做一些簡(jiǎn)單的變換,如下:
上面推導(dǎo)出的這個(gè)公式其實(shí)就是JS散度,回憶一下JS散度的公式,如下:
可以看出用于類(lèi)似的樣式,所以可以將簡(jiǎn)化一下,其公式如下:
推導(dǎo)到這里就可以得出,生成器最小化GAN的目標(biāo)函數(shù)其實(shí)就是最小化真實(shí)分布與生成分布之間的JS散度,即最小化兩個(gè)分布的相對(duì)熵。
直觀(guān)的展示一下上面的公式推導(dǎo),這里使用簡(jiǎn)單的二維的函數(shù)圖像來(lái)簡(jiǎn)化復(fù)雜分布的表示,如圖4所示.
圖4 V(G,D*)
首先對(duì)判別器而言,其目標(biāo)函數(shù)為,即找到函數(shù)的最高點(diǎn),如圖中的紅點(diǎn)就是該分布的最高點(diǎn),接著將該點(diǎn)代入生成器的目標(biāo)函數(shù)就可以獲得一個(gè)高度,該高度就是生成分布與真實(shí)分布的JS散度,生成器的目標(biāo)就是最小化這個(gè)JS散度,而判別器的目標(biāo)就是盡力測(cè)量出生成分布與真實(shí)分布的JS散度。
?4 GAN的本質(zhì)??
通過(guò)上面對(duì)GAN目標(biāo)函數(shù)的推導(dǎo),最終發(fā)現(xiàn)GAN的目標(biāo)函數(shù)其實(shí)就是JS散度,那么GAN做的事情簡(jiǎn)單而言就是通過(guò)判別器找到當(dāng)前生成分布與真實(shí)分布的JS散度,然后在通過(guò)生成器生成數(shù)據(jù)構(gòu)成新的生成分布,從而減小生成分布與真實(shí)分布之間的JS散度。
從生成器的角度看,它其實(shí)即使最小化,將記為,那么生成器要做的就是對(duì)函數(shù)做微分運(yùn)算,計(jì)算出生成器參數(shù)要更新的值,然后通過(guò)梯度下降算法更新生成器的參數(shù)則可,如下:
一個(gè)值得思考的問(wèn)題是,可微分嗎?其實(shí)是可微的,具體例子,比如現(xiàn)在有函數(shù),對(duì)求微分,其實(shí)就是對(duì)中最大的那個(gè)函數(shù)求微分,其直觀(guān)形式如圖5所示。
圖5? ?求微分
因?yàn)槭怯卸鄠€(gè)函數(shù)組成的,所有對(duì)求微分其實(shí)也就是對(duì)不同函數(shù)求微分,因?yàn)橹贿x擇函數(shù)中最大的,那么對(duì)于某個(gè)區(qū)域,就對(duì)該區(qū)域最大的函數(shù)求導(dǎo)則可,如上圖。
同理,對(duì)于GAN中的也是一樣的,該函數(shù)求微分與普通函數(shù)求微分相似,用數(shù)學(xué)語(yǔ)言描述GAN的訓(xùn)練過(guò)程如下:
固定生成器G,訓(xùn)練判別器D,獲得。
固定判別器D,對(duì)做微分,從而計(jì)算出生成器參數(shù)要更新的值。
往返上面兩步,直到GAN收斂。
圖6 V(G,D)發(fā)生變化
一開(kāi)始,判別器計(jì)算出在的位置,將該位置的值代入可以獲得生成分布與真實(shí)分布的JS散度,即??,然后再通過(guò)訓(xùn)練生成器來(lái)減少兩分布之間的JS散度,訓(xùn)練生成器其實(shí)就是更新生成器上的各種參數(shù),而更新生成器的參數(shù)就會(huì)導(dǎo)致目標(biāo)函數(shù)??發(fā)生變化,發(fā)生變化后的函數(shù)其??可能不在??所在的位置了,上圖中變化后的函數(shù)其??獲得的值應(yīng)該為???,但訓(xùn)練時(shí)因?yàn)楣潭ㄟ@判別器,所以依舊使用的是??,那么就無(wú)法獲得生成分別與真實(shí)分布的JS散度了,既然有這個(gè)問(wèn)題,為什么依舊這樣訓(xùn)練呢?
通過(guò)上面的分布,可以知道每次改變生成器G,整個(gè)函數(shù)就會(huì)改變,此時(shí)固定的判別器D不一定再表示最大值??,即無(wú)法獲得兩分布的JS散度,但在實(shí)際上,依舊可以將當(dāng)前判別器獲得的值看成與JS散度非常相近的值,因?yàn)樯善鱃在每次訓(xùn)練時(shí),不會(huì)相對(duì)于上一次有一個(gè)較大的變動(dòng),從而導(dǎo)致函數(shù)??變化過(guò)大,此時(shí)就依舊可以近似將??看為是變動(dòng)后函數(shù)??最大值的近似值,當(dāng)生成器G經(jīng)過(guò)一定次數(shù)訓(xùn)練后,函數(shù)變化可能比較大了,此時(shí)再訓(xùn)練判別器D,即找出新函數(shù)的JS散度。
在理論推導(dǎo)上,判別器D可以推導(dǎo)計(jì)算出??,但在實(shí)際實(shí)現(xiàn)上,該值不一定是最大值,判別器D本身其實(shí)也是一個(gè)神經(jīng)網(wǎng)絡(luò),我們訓(xùn)練該網(wǎng)絡(luò),希望可以找到??表示該函數(shù)最大的值,但因?yàn)楹瘮?shù)??可能會(huì)比較復(fù)雜,判別器通常無(wú)法獲得該函數(shù)的全局最優(yōu),而是獲得該函數(shù)的局部最優(yōu),實(shí)際上在訓(xùn)練GAN網(wǎng)絡(luò)時(shí),并不會(huì)強(qiáng)制要求判別器D要找到??全局最大值,只要獲得一個(gè)可以接受的局部最優(yōu)解則可。
值得一提的是,因?yàn)槲覀儫o(wú)法確切的獲得真實(shí)分布??與生成分布??的值,所以通過(guò)抽樣的方式來(lái)獲得樣本,以樣本的分布來(lái)近似的表示真實(shí)分布與生成分布,即??、??,那么判別器的目標(biāo)函數(shù)就可以改變成如下形式:
??
換個(gè)角度看,判別器其實(shí)就是一個(gè)二元分類(lèi)器,使用sigmoid激活函數(shù)作為最后一層的輸出(sigmoid輸出的值在0~1之間),??是該二元分類(lèi)器的積極樣本,而??是該二元分類(lèi)的消極樣本,通過(guò)兩種不同的數(shù)據(jù)來(lái)訓(xùn)練該分類(lèi)器,從而最小化兩分布的交叉熵?fù)p失,最小化兩分布的交叉熵?fù)p失等價(jià)于最大化??,即??。
現(xiàn)在再回頭來(lái)看GAN的算法,用數(shù)學(xué)語(yǔ)言描述如下:
獲得樣本,真實(shí)樣本??,噪音樣本??,生成樣本??
固定生成器G,訓(xùn)練判別器D
判斷器目標(biāo)函數(shù):
??
更新判別器的參數(shù):
??
??通常無(wú)法獲得最大值,局部最優(yōu)則可
固定判別器D,循生成器G
生成器目標(biāo)函數(shù):
??
因?yàn)榍懊嬉豁?xiàng)與生成器沒(méi)有關(guān)系,所以可以將??簡(jiǎn)化為:
??
更新生成器的參數(shù):
??
通常我們會(huì)訓(xùn)練多次判別器D后才訓(xùn)練一次生成器,因?yàn)樯善鲄?shù)更新太多,就會(huì)讓函數(shù)發(fā)生較大的變化,從而導(dǎo)致生成器減小的不再是兩分布的JS散度。
推薦閱讀
深入淺出GAN生成對(duì)抗網(wǎng)絡(luò)
***粉絲福利時(shí)間***
評(píng)論區(qū)留言,點(diǎn)贊數(shù)前5可獲得此書(shū)!!!
以48個(gè)小時(shí)計(jì)!
注:若是在活動(dòng)截止日期后24小時(shí)內(nèi)無(wú)法取得用戶(hù)回復(fù)或聯(lián)系,將按照留言點(diǎn)贊排名順延。
總結(jié)
以上是生活随笔為你收集整理的【文末有福利】生成对抗网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 重磅!“东方理工大学”来了!
- 下一篇: 学位论文是根,学术论文是叶