Generative Adversarial Network (GAN)算法推導(dǎo)

前言:此文章是基于李弘毅老師的深度學(xué)習(xí)課程,與其說文章心得,倒不如說其為學(xué)習(xí)筆記。(如果對您的學(xué)習(xí)有所幫助記得點個贊喔)

視頻地址:https://www.bilibili.com/video/av9770302/from=search&seid=905421046757750252

ppt地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html

原論文地址:https://arxiv.org/abs/1406.2661

博客參考:http://www.itdecent.cn/p/40feb1aa642a

https://openai.com/blog/generative-models/

背景知識:

(1)Maximum Likelihood Estimation(最大似然估計)

問題:

??????? 一個袋子中總共有黑白兩種顏色100個球,其中一種顏色90個,隨機取出一個球,發(fā)現(xiàn)是黑球。那么是黑色球90個?還是白色球90個? 極大似然估計是指:在一次抽樣中,樣本出現(xiàn)的概率是關(guān)于參數(shù)θ的函數(shù),若在一些試驗中,得到觀測值 x1,x2,...,xn,則我們可以選取 θ ?(x1,x2,..,xn)作為θ的估計值,使得當θ=θ ? (x1,x2,..,xn)時,樣本出現(xiàn)的概率最大。

似然函數(shù):

最大似然函數(shù):

(2)Kullback-Leibler divergence(KL散度/相對熵)

?相對熵表示使用理論分布擬合真實分布時產(chǎn)生的信息損耗。


(3)JS散度

?????????? KL散度并不是一個真正的度量或距離函數(shù),確切的說其僅用于衡量一個分布 相比另一個分布的信息損失,存在不對稱的缺點,即D(P||Q)!=D(Q||P) 。 故引出JS散度。


GAN算法推導(dǎo):

1. 什么是GAN?

????????GAN 主要包括了兩個部分,即生成器 Generator 與判別器 Discriminator。 G好比制造假幣的違法份子,而D好比警察,G先制造出假幣,D成功識別,然后G改進技術(shù),達到能夠騙過D的程度;然后D錯誤判斷后就提升自己的鑒別能力,直到能夠識別出之前被騙的假幣。G一看不行,繼續(xù)提升造假幣的技術(shù),就如此循環(huán)往復(fù),直到二者達到一個平衡,生成器制造的假幣接近真幣,而判別器識別不出真假幣。

2.GAN的原理:

??????? 首先,根據(jù)生成對抗的原理做一個簡單的推導(dǎo),假設(shè)我們有一大堆data,他的分布是Pdata(x),我們可以認為這里的data就是一大堆圖片,但是,我們有了這一大堆東西,再想生成一個新的data是不容易的,因為我們不知道這個分布的具體參數(shù),所以,我們就想估計這堆數(shù)據(jù)的所服從的參數(shù)。那么,我們可以從Pdata(x)產(chǎn)生一大堆圖片樣本,然后,我們就希望找一組參數(shù)構(gòu)成一個生成函數(shù)(在此處我們是基于高斯混合模型),使得服從這組參數(shù)的生成函數(shù)分布產(chǎn)生這堆樣本的可能性最大。所以最簡單的方法就是計算它的最大似然來確定參數(shù)。

然后對其進行化簡,利用取log使求積變?yōu)榍蠛停缓蠹s等于對其求期望(說明:在數(shù)量足夠大的情況下求期望可以近似等于求均值,只不過式中未乘以1/m,但不影響因為是求最大值時θ的取值)。 然后在后面補充一個積分形式的常數(shù)項(方便湊成KL散度的形式)。


在上述的方法中我發(fā)現(xiàn),我們的思路沒有問題,但我們需要去尋找這個 PG(x;θ),如下圖所示,高斯函數(shù)隨機生成的Z經(jīng)過生成模型G(z)(神經(jīng)網(wǎng)絡(luò))一個分布PG(x;θ),然后再利用此處的PG()進行運算,PG()的表達式中 I[G(z)=x]的意義是,在真實的圖片空間中的圖片x可以由z轉(zhuǎn)化而來時就為1,否則就為0.


相關(guān)說明:https://openai.com/blog/generative-models/

?? 但將PG()帶入最大似然函數(shù)時發(fā)現(xiàn)難以計算,于是我們轉(zhuǎn)變思路,從生成器來說,生成器給出一個函數(shù)輸入z,輸出x,同時給出一個前向函數(shù)Pprior(),是PG()的一個可能的分布。 監(jiān)督器是一個函數(shù),輸入x輸出一個標量,用來表述PG()與Pdata()之間的差異性。 于是,我們給出了一個函數(shù)V(G,D).


那么問題來了,我們怎么去計算V(G,D)從而得到我們需要的G呢? 首先我們需要先對


進行一個理解。這個表達式中同時存在min與max,但實際上它是具有一定的層次關(guān)系的,可以寫為G*=arg(min(maxV(G,D))),所以先根據(jù)D的取值去尋找一個能夠使V(G,D)最大的取值,然后D不動在去改變G的表達函數(shù)然后獲取一個最小的V(G,D).??????

解釋:在表達式中V(G,D)的最大值可以表示PG()與Pdata()的差異性。如下圖所示,紅點都是在不同G值下的最大值,此處就是兩者的差異性,而G3是使二者差異性最小的函數(shù)模型。


此時我們就需要尋找怎么尋找這個D來使得它可以表示二者的差異性,此處我們給定一個G然后展開V(G,D).然后我們就可以假設(shè)D(x)可以取任意值,所以就可將D(x)視為一個變量,,當然此處與G相關(guān)的我們視為一個帶有未確定參數(shù)的固定函數(shù)模型,所以可以將其視為一個常量,而其中未確定的變量可以不去關(guān)注,因為我假設(shè)G是已經(jīng)給定的。然后直接將D(x)視為未知數(shù)對其求導(dǎo),然后就可以計算得到他的最大值處的取值。如下所示:

然后上面得到的最大處取值,然后帶入原式,然后化簡就可以得到兩個離散的KL散度,進而將其化簡為JS散度。


在確定取值最大的D的函數(shù)模型后并帶入后,怎么求合適的G的函數(shù)模型? 此處將其視為一個由G為未知量的損失函數(shù)L(G),然后對其進行梯度下降求最小值,就能確定一個θG來定義G。在進行梯度下降算法的過程中可以求帶有max的函數(shù),如下圖所示:


整個算法流程: 首先隨機確定一個G0然后根據(jù)這個計算出D0*然后根據(jù)梯度下降得到新的G1,再計算D1*,循環(huán)往復(fù)就能得到效果越來越好的G與D.


3.理論與實際的差異性

??????? 由于理論和實際存在的最大問題就是:理論上我們是以樣本集的所有樣本進行計算與推導(dǎo)的,但在實際計算過程中不可能窮盡所有的樣本,只是取部分樣本進行計算與訓(xùn)練。 所以,我們只能采用采樣的方法,同時可以采用我們二分類的思路,我們把Pdata(x)中產(chǎn)生的樣本當作正例,把PG(x)產(chǎn)生的樣本當作負例,那么,下面V可以看作是我們二分類的一個損失函數(shù)的相反數(shù):


也就是說,最大化V的話,其實就是最小化我們二分類的損失,下面的Minimize少了一個負號,所以我們要找的D,就是能使二分類的損失最小的D,也就是能夠正確分辨Pdata(x)和PG(x)的D,這也正符合我們想要找的Discriminator的定義:


在實際算法中,我們會基于理論計算方法,對其進行適當?shù)母膭樱玫搅宋覀儗嶋H算法,首先,我們又一個第一代的Generator,然后他產(chǎn)生一些圖片,然后我們把這些圖片和一些真實的圖片丟到第一代的Discriminator里面去學(xué)習(xí),讓第一代的Discriminator能夠真實的分辨生成的圖片和真實的圖片,然后我們又有了第二代的Generator,第二代的Generator產(chǎn)生的圖片,能夠騙過第一代的Discriminator,此時,我們在訓(xùn)練第二代的Discriminator,依次類推。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容