那麼我們從Generation來看是怎麼個生成法。假如我們要生成一張圖片,那麼用x來代表一張圖片 an image (a highdimensional vector)。我們要產生的圖片,它有一個固定的一個分佈,記爲:Pdata(x),那麼在整個圖像空間中(圖像本來是高維的,這裏爲了可視化,用二維的來表示),只有一小部分區域中採樣出來的點才能產生人臉,其他的不行
因此,如上圖所示,在藍色區域以內的點產生人臉的機率較高,藍色區域以外產生人臉的機率較低。
我們希望機器能夠找出Pdata(x)(這個分佈長什麼樣子我們不知道)
• We want to find data distribution Pdata(x)
當我們收集了很多樣本的時候,我們知道這些樣本的位置產生人臉的機率較高,但是產生人臉的分佈我們是不知道什麼樣子。
從樣本推算分佈,在沒有GAN這個算法之前,我們用的是MLE。先簡單複習一下MLE。
MLE
Given a data distribution Pdata(x) (We can sample from it.我們能從裏面採樣,但是不知道它是啥樣子)
• We have a distribution PG(x;θ) parameterized by θ
• We want to find θ such that PG(x;θ) close to Pdata(x)
• E.g. PG(x;θ) is a Gaussian Mixture Model, θ are means and variances of the Gaussians
Sample {x1,x2,⋯,xm} from Pdata(x)
We can compute PG(xi;θ) Likelihood of generating the samples L=i=1∏mPG(xi;θ)
Find θ∗ maximizing the likelihood
意思就是下面這些數據是從Pdata(x)這個分佈sample出來的,如果用PG(x;θ)來產生下面這些數據,那麼它產生這些數據的Likelihood越大越好(計算公式如上),這個事情可以通過調整參數θ來實現。
用x來代表一張圖片 an image (a highdimensional vector)。
• A generator G is a network. The network defines a probability distribution PG
NN就是一個輸入一個輸出(現在是做圖片生成,所以輸出就是一個圖片),類似下圖
寫成一個優化的公式爲: G∗=argGminDiv(PG,Pdata) Div(PG,Pdata)就是Divergence between distributions PG and Pdata
挖坑:How to compute the divergence? PG 和Pdata的公式我們不知道,如果知道我們就可以代入DL的公式,然後用GD來解。
問題就變成我們怎麼從sample的數據求PG 和Pdata
其實我們可以使用Discriminator來衡量PG 和Pdata的Divergence
藍色星星: data sampled from Pdata
橙色星星: data sampled from PG
我們可以用Discriminator來區分兩個Distribution,公式:
前面一項是表示數據sampled from Pdata,值越大越好,後面一項是表示數據sampled from PG ,值越小越好
上面公式的形式和訓練一個二分類Classifier的目標函數長得一樣,就是說可以把Pdata和PG 看成兩個分類。
訓練Discriminator就好比訓練一個二分類:
The maximum objective value is related to JS divergence.來看下爲什麼是JS divergence。
如果兩個分佈的數據很接近(small divergence),那麼Discriminator很難把數據分開,也就是上面的公式很難找到一個D,使得D∗取得很大的值
反之:
也就是D∗和divergence程度有關係,下面用數學來證明。
D∗和divergence的關係證明
先把Objective函數寫出來: V=Ex∼Pdata[logD(x)]+Ex∼PG[log(1−D(x))]
• Given G(固定 G), what is the optimal D∗ maximizing V=Ex∼Pdata[logD(x)]+Ex∼PG[log(1−D(x))]=∫xPdata(x)logD(x)dx+∫xPG(x)log(1−D(x))dx=∫x[Pdata(x)logD(x)+PG(x)log(1−D(x))]dx
Assume that D(x) can be any function
• Given x, the optimal D∗ maximizing(上面的最大化問題就變成下面的公式) Pdata(x)logD(x)+PG(x)log(1−D(x))
這裏Pdata,PG(x)是固定的,要找一個D(x)最大化上面的式子,我們可以設: a=Pdata(x),b=PG(x),D=D(x)(1)
最大化函數就變成: f(D)=alog(D)+blog(1−D)
求極值就是要先求導,並讓導數等於0: dDdf(D)=a×D1+b×1−D1×(−1)=1 a×D∗1=b×1−D∗1a×(1−D∗)=b×D∗a−aD∗=bD∗a=(a+bD∗)D∗=a+ba
把假設1帶回來 D∗(x)=Pdata(x)+PG(x)Pdata(x)
然後我們把D∗帶回二分類的目標函數: DmaxV(G,D)=V(G,D∗)=Ex∼Pdata[logD(x)]+Ex∼PG[log(1−D(x))]=Ex∼Pdata[logPdata(x)+PG(x)Pdata(x)]+Ex∼PG[logPdata(x)+PG(x)PG(x)]∫xPdatalogPdata(x)+PG(x)Pdata(x)dx+∫xPG(x)logPdata(x)+PG(x)PG(x)dx=∫xPdatalog2Pdata(x)+PG(x)21Pdata(x)dx+∫xPG(x)log2Pdata(x)+PG(x)21PG(x)dx=log21+log21+∫xPdatalog2Pdata(x)+PG(x)Pdata(x)dx+∫xPG(x)log2Pdata(x)+PG(x)PG(x)=2log21+∫xPdatalog2Pdata(x)+PG(x)Pdata(x)dx+∫xPG(x)log2Pdata(x)+PG(x)PG(x)=−2log2+∫xPdatalog2Pdata(x)+PG(x)Pdata(x)dx+∫xPG(x)log2Pdata(x)+PG(x)PG(x)=−2log2+KL(Pdata∣∣2Pdata(x)+PG(x))+KL(PG∣∣2Pdata(x)+PG(x))=−2log2+2JSD(Pdata∣∣PG)
JSD: Jensen-Shannon divergence
交叉熵和相對熵的關係:
以上都是基於離散分佈的概率,如果是連續的數據,則需要對數據進行Probability Density Estimate來確定數據的概率分佈,就不是求和而是通過求積分的形式進行計算了。
現在,原來的挖的坑: G∗=argGminDiv(PG,Pdata) Div(PG,Pdata)就是Divergence between distributions PG and Pdata
可以變化爲: G∗=argGminDmaxV(G,D)
這個式子很複雜,就是找一個G,最小化DmaxV(G,D),找一個D,最大化V(G,D)
前面的數學推導已經找到了最好的D∗(The maximum value is related to JS divergence.),現在找一個最好的G∗
假設我們現在只有三個G,分別是G1,G2,G3
橫座標不一樣,代表選擇了不同的Discriminator,當我們固定不同的G的時候,最大化的V(G,D)如下圖中的紅點所示。
從三個不同的G1,G2,G3來看,從三個最大化的V(G,D)中取最小值,故這裏G∗=G3。
換個角度看,就是PG3和Pdata的Divergence最小。
黑框中的內容就是在解G∗=argGminDmaxV(G,D)
GD Algorithm for GAN
用函數L(G)替代G∗中的DmaxV(G,D): G∗=argGminL(G)
To find the best G minimizing the loss function L(G) θG←θG−η∂θG∂L(G),θGdefinesG
• Given G0
• Find D0∗ maximizing V(G0,D) (這裏用梯度下降) V(G0,D0∗) is the JS divergence between Pdata(x) and PG0(x) θG←θG−η∂θG∂V(G,D0∗),ObtainG1
這裏的梯度下降就是減少JS divergence(坑)
• Find D1∗ maximizing V(G1,D) (這裏用梯度下降),這裏好比上面橫線中的講解是一樣的,當G從G0變到G1的時候,對應的L(G)=DmaxV(G,D)可能改變了,所以要重新求D1 V(G1,D1∗) is the JS divergence between Pdata(x) and PG1(x)
假設在G0的時候,V(G0,D)的曲線如上圖左邊所示,然後,D0∗使得V(G0,D)最大,這個時候的JSD是V(G0,D0∗) between Pdata(x) and PG0(x),然後我們用梯度下降更新G0,將其變成G1,這個時候由於G的值變化後,V(G1,D)的曲線發生了變化(參考上面f(x)=max{f1(x),f2(x),f3(x)}的例子),這個新曲線V(G1,D)如上圖的右邊所示,這個時候的最大值就不在D0∗了,離它很遠,這個時候的JSD變成了V(G1,D1∗),可以看到後面的JSD明顯要變大了,這樣是不對的,因此我們做了假設,假設 D0∗≈D1∗
這個時候從V(G0,D)到V(G1,D)的曲線變化不會很大。也就是G這個參數只變化了一點點。
我們同樣可以用D0∗來衡量變化後JSD between Pdata(x) and PG1(x)
也就是說GAN的訓練技巧:
Generator不要一次update太多,也不需要太多的iteration;
而Discriminator可以訓練到收斂。因爲要找到最大值才能衡量出JSD。
實作
理論上V是要取期望值,但是實際上是不可能的。只能用樣本的均值進行估計:
Given G, how to compute DmaxV(G,D)
• Sample {x1,x2,⋯,xm} from Pdata(x), Sample {x~1,x~2,⋯,x~m} from generator PG(x) Maximize V~=m1i=1∑mlogD(xi)+m1i=1∑mlog(1−D(x~i))(2)
上面這個事情實際上就是在訓練一個Binary Classifier,記爲D,D後面接一個sigmoid函數,使得輸出值在[0,1]之間
我們把{x1,x2,⋯,xm} from Pdata(x)看做Positive examples;
我們把{x~1,x~2,⋯,x~m} from generator PG(x)看做Negative examples
目標是最小化上面兩組數據的Cross-entropy,計算這個交叉熵的公式推導出來就是公式2
Algorithm for GAN(Review)
Initialize θd for D and θg for G.
• In each training iteration:
這塊分割線內是訓練Discriminator,重複k次,這裏一定要訓練到收斂爲止,目的是找到DmaxV(G,D)(實作的時候一般沒有辦法真的訓練到收斂或者卡在局部最小點,因此這裏找到的是DmaxV(G,D)的lower bound)。
••Sample m examples {x1,x2,⋯,xm} from data distribution Pdata(x).(找到真實對象)
••Sample m noise examples {z1,z2,⋯,zm} from the prior Pprior(z).(這個先驗分佈種類不是很重要)
•••Obtaining generated data {x~1,x~2,⋯,x~m},x~i=G(zi).(找到生成對象)
•• Update discriminator parameters θd to maximize V~=m1i=1∑mlogD(xi)+m1i=1∑mlog(1−D(x~i))θd←θd+η▽V~(θd)
這塊分割線內是訓練Generator,重複1次,目的是減少JSD
••Sample another m noise samples {z1,z2,⋯,zm} from the prior Pprior(z)
••Update generator parameters θg to minimize V~=m1i=1∑mlogD(xi)+m1i=1∑mlog(1−D(G(zi)))θg←θg−η▽V~(θg)
由於m1∑i=1mlogD(xi)和G函數無關,所以在求最小值的時候可以忽略: V~=m1i=1∑mlog(1−D(G(zi)))θg←θg−η▽V~(θg)
Objective Function for Generator in Real Implementation
紅色曲線對應log(1−D(x)):江湖人稱Minimax GAN (MMGAN)
藍色曲線對應−log(D(x)):江湖人稱Non-saturating GAN (NSGAN)
我們可以看到,紅色曲線由於剛開始的Generator 沒有訓練過,它的生成對象都很假,很容易被識破,因此剛開始log(1−D(x))的值很小。
不好訓練,換成藍色曲線後,兩個曲線都是下降趨勢,沒有變,但是藍色曲線剛開始的值很大,適合做梯度下降。
其實後來實驗證明兩種結果都差不多。
老師給出了他的猜想,藍色曲線其實就是把label x from PG as positive.就是把生成對象和真實對象的標籤換一下。估計是作者懶得改code,用的同一套code訓練兩組data。。。
理論部分到此結束。下面看一些比較直覺的東西。
Intuition
Generator和Discriminator的關係:Discriminator leads the generator.
紅線:Discriminator
綠線:Data(target)distribution
藍線:Generated distribution