1. 極大似然估計
GAN用到了極大似然估計(MLE),因此我們對MLE作簡單介紹。
MLE的目標是從樣本數據中估計出真實的數據分佈情況,所用的方法是最大化樣本數據在估計出的模型上的出現概率,也即選定使得樣本數據出現的概率最大的模型,作爲真實的數據分佈。
將真實模型用參數θ表示,則在模型θ下,樣本數據的出現概率(likelihood)是i=1∏mpmodel(xi;θ)(1)
其中xi表示樣本中的第i個數據。
最大化(1)式的概率,求得滿足條件的θ:
θ∗=argθmaxi=1∏mpmodel(xi;θ)=argθmaxi=1∑mlogpmodel(xi;θ)
還可以使用KL散度來代表MLE方法:
θ∗=argθminDKL(pdata(x)∣∣pmodel(x;θ)=argθmin{i=1∑mpdata(xi)logpdata(xi)−i=1∑mpdata(xi)logpmodel(xi;θ)}=−argθmini=1∑mpdata(xi)logpmodel(xi;θ)=argθmaxi=1∑mpdata(xi)logpmodel(xi;θ)
在實際上,我們無法得到數據的真實分佈pdata,但是可以從m個數據的樣本中近似得到一個估計p^data。
爲了便於理解KL散度,我們在下面對其進行簡要介紹。
2. 相對熵,KL散度
兩個概率分佈P和Q的KL散度定義如下:
DKL(P∣∣Q)=i∑P(i)logQ(i)P(i)
性質:
DKL(P∣∣Q)≥0
當且僅當P=Q時,等號成立。(證明過程借用吉布斯不等式:∑ipilogpi≥∑ipilogqi,證明吉布斯不等式會用到關係logx≤x−1)
KL散度反映了兩個分佈P和Q的相似情況,KL散度越小,兩個分佈越相似。
KL散度是不對稱的:
DKL(P∣∣Q)̸=DKL(Q∣∣P)
3. KL散度與交叉熵的關係
神經網絡中常常使用交叉熵作爲損失函數:
L=−i∑yiloghi
其中yi是實際的標籤值,hi是網絡的輸出值。
我們將y和h的KL散度展開,得到:
DKL(y∣∣h)=i∑yiloghiyi=i∑yilogyi−i∑yiloghi=i∑yilogyi+L=Constant+L
因此,最小化KL散度,等價於最小化損失函數L。也即交叉熵損失函數反應的是網絡輸出結果和樣本實際標籤結果的KL散度的大小,交叉熵越小,KL散度也越小,網絡的輸出結果越接近實際值。
4. JS散度
對於兩個分佈P和Q,JS散度是:
DJS(P∣∣Q)=21DKL(P∣∣2P+Q)+21DKL(Q∣∣2P+Q)
JS散度是對稱的,並且有界[0,log2]。
5. GAN 框架
生成器,生成與訓練集數據相同分佈的樣本;判別器,檢查生成器生成的樣本是真的還是假的。
The generator is trained to fool the discriminator.
判別器的損失函數
判別器的損失函數爲:
J(D)(θ(D),θ(G))=−21Ex∼pdatalogD(x)−21Ez∼pmodellog(1−D(G(z)))(2)
上式其實就是一個交叉熵損失函數。GAN的判別器在訓練的過程中,數據集包含兩個部分,一部分是訓練集的樣本x,對應的標籤y=1,一部分是生成器生成的數據G(z),對應的標籤y=0,因此判別器的訓練集可以看做X={x,G(z)},Y={1,0}。
訓練集樣本是X,標籤是Y,網絡輸出是H,則交叉熵損失函數爲:
J=m1i=1∑m{−YilogHi−(1−Yi)log(1−Hi)}(3)
與式(2)作比較,前一項的logH等價於式(2)中的logD(x),後一項的log(1−Hi)等價於式(2)中的log(1−D(G(z)))。將x看做包含了真實樣本和生成器生成的數據G(z)的新的訓練集,則判別器的損失函數可以重新寫作:
J(D)(θ(D),θ(G))=−21Ex∼pdatalogD(x)−21Ex∼pmodellog(1−D(x))=−21i∑pdata(xi)logD(xi)−21i∑pmodel(xi)log(1−D(xi))(4)
對上式關於D(x)求導,並令導數爲0,得到:
D∗(x)=pdata(x)+pmodel(x)pdata(x)
生成器的損失函數
令J(G)=−J(D),則
J(G)(θ(D),θ(G))=21Ex∼pdatalogD(x)+21Ez∼pmodellog(1−D(G(z)))=Constant+21Ez∼pmodellog(1−D(G(z)))
生成器沒有直接接受任何的訓練集數據,訓練集數據的信息是通過判別器學習後傳遞過來的。