---
# System prepended metadata

title: 李宏毅_ATDL_Lecture_19
tags: [NTU, Hung-yi Lee, Advance Topics in Deep Learning]

---

# 李宏毅_ATDL_Lecture_19
###### tags: `Hung-yi Lee` `NTU` `Advance Topics in Deep Learning`
[課程撥放清單](https://www.youtube.com/channel/UC2ggjtuuWvxrHHHiaDH1dlQ/playlists)
## Evaluation of Generative Models
[課程連結](https://www.youtube.com/watch?v=VNqOspvEKEI&list=PLJV_el3uVTsPMxPbjeX7PicgWbY7F8wW9&index=19)

### Reference
- ![](https://i.imgur.com/eEq22tC.png)

[論文連結](https://arxiv.org/abs/1511.01844)

論文是針對所有Generative Models所寫，而非單純針對GAN。
### Likelihood
![](https://i.imgur.com/rkyKoCw.png)

最常用來衡量的方式就是計算Generative Model所生成的實際資料的Likelihood，也注意到，在訓練Generator的時候它是會看過real data，因此在衡量的時候應該用的是『generator沒看到的real data』。

有辦法計算Generator產生某一筆資料的機率就有辦法計算Generator產生real data的likelihood<sub>(簡報中的藍色星星為real data)</sub>。

Log Likelihood:$L=\dfrac{1}{N}\sum_ilogP_G(x^i)$
* $logP_G(x^i)$：產生$x^i$的機率取log
* $\sum_i$：然後加總
* $\dfrac{1}{N}$：再取平均

Likelihood愈大，就代表它所產生的機率愈realistic。

但這種方法無法應用在GAN，它無法計算$P_G(x^i)$，它只能從$P_G$ sample。

我們只能說，我們有一個Prior Distribution，從裡面sample出Vector-z，經過Generator-$P_G$得到一筆資料<sub>(粉紅色星星代表生成的資料)</sub>，但這並無法讓我們計算產生某一筆資料的Likelihood，你可能一輩子無法生成出與實際資料相同的那筆資料。
### Likelihood -Kernel Density Estimation
![](https://i.imgur.com/XvnjMNl.png)

[參考連結](https://stats.stackexchange.com/questions/244012/can-you-explain-parzen-window-kernel-density-estimation-in-laymans-terms/244023)

有一個方法是，先用Generator-$P_G$生成一把資料，再這一把資料用另一個比較簡單的Distribution來approximate Generator-$P_G$。

簡報上我們生成四筆資料，假設，這四筆生成的資料是四個Gaussian的中心(mean)，並且擁有我們事先決定好的covariance<sub>(共變異數)</sub> matrix，這四個Gaussian組成一個Gaussian Mixture<sub>(高斯混合模型)</sub>，再用這個Gaussian Mixture來approximate我們的Generator-$P_G$，也就可以計算Generator的Likelihood。

### Likelihood -Kernel Density Estimation 
![](https://i.imgur.com/q7jQZby.png)

[論文連結_A NOTE ON THE EVALUATION OF GENERATIVE MODELS](https://arxiv.org/pdf/1511.01844.pdf)

現在有一個問題是，應該sample多少資料才夠?根據論文<sub>(上面連結)</sub>的toy example說明：
1. 我們有一個Gaussian Mixture Model
2. 我們知道這個Gaussian Mixture Model產生某筆資料的Likelihood
3. 從Gaussian Mixture Model sample資料
4. 以稍早所提的方式來估測

以論文圖示來看，即使我們sample到$10^7$筆資料，所得的likelihood與原始模型的likelihood依然有很大的落差，雖然你如果可以sample到無窮多資料的時候，或許可以趨近原始likelihood。

論文中另外提到，計算DBN、GAN、實際資料的likelihood，理論上實際資料所得的likelihood應該是upper bound，但是在使用K-means取中心之後計算所得的likelihood竟然可以高過實際資料。
### Likelihood v.s. Quality
![](https://i.imgur.com/6M3saZM.png)

實作GAN的時候，如果我們的目標是生成影像，那我們會希望Generator所生成的影像是realistic(真實的)，而這件事與likelihood不見得是有關係的，有兩種情況：
1. Low likelihood, high quality?
    * 假設有一個Generator所生成的影像品質都不錯，但它的variance都很低，因此生成的影像都是同一個人物(涼宮春日)
    * 如果用這些影像去估測一個模型，再計算模型產生測試資料的likelihood，這時候會發現產生這些資料的機率是很低的，或者根本沒有涼宮春日的出現，那機率就是零，就算這個模型的生成影像已經是很好的，即$P_G(x^i)=0$
2. High likelihood, low quality?
    * 低的likelihood有可能產生好的資料，而高的likelihood也有可能產生不好的資料
    * 假設Generator-G1可以生成很多很好的資料，計算其likelihood為$L=\dfrac{1}{N}\sum_ilogP_G(x^i)$
    * 另一個Generator-G2，它有百分之一的機會是與G1的生成資料相同，而其它百分之九十九都是生成出模糊影像。
    * 這時候G2只有百分之一的機率會與G1相同，G2要生成與G1相同資料的likelihood就是$P_G(x^i)/100$，這代表G2的likelihood會比G1還要少掉$-log100$，大約4.6。
    * 4.6這個數值比剛才所說的差異數值(上一張簡報)都還要小，但實際上G2要生成G1相同資料的機率卻只有百分之一，但它還是可以算出很高的likelihood。
### Evaluate by Other Networks
![](https://i.imgur.com/9U30OF5.png)

另一種方式是拿一個已經訓練好的CNN，將生成影像-$X$直接輸入，取得輸出-$P(y|x)$，當entropy愈低，就代表生成的影像可能愈好，因為這樣才能給模型有足夠的信心來集中輸出，這也代表分佈是集中，而不是發散的。

另外，GAN中常見的Mode Collapse問題，如果我們希望確認生成影像是否多樣化的話，可以給定多張影像-$x^1,x^2...,x^N$，得到多張輸出-$P(y^1|x^1),P(y^2|x^2)..,P(y^N|x^N)$，再將得到的所有Distribution平均-$\dfrac{1}{N}\sum_nP(y^n \vert x^n)$，如果最後得到的結果是分散的，那就代表生成的影像其diverse是大的。
### Evaluate by Other Networks - Inception Score
![](https://i.imgur.com/3LtAnf9.png)

[論文連結-Improved Techniques for Training GANs](https://arxiv.org/abs/1606.03498)

顧名思義，是以Inception來衡量GANs，論文中提出了數學式：
* $exp(\mathbb{E}_xKL(p(y\vert x)\Vert p(y)))$
    * $\mathbb{E}_x$： 對$x$取期望值
    * $KL(p(y\vert x)\Vert p(y)))$：計算$p(y\vert x)$與$p(y)$的KL-divergence
    * 展開如下
* $=\sum_x\sum_yP(y\vert x)log\dfrac{P(y\vert x)}{P(y)}$
    * 實務上對$x$取期望值就是加總所有的$x$
    * 將相除展開如下
* $\sum_x\sum_yP(y\vert x)logP(y\vert x)-\sum_x\sum_yP(y\vert x)logP(y)$
    * $\sum_x\sum_yP(y\vert x)logP(y\vert x)$：為$P(y\vert x)$的entropy取負，我們希望給定$x$之後產生的$y$的entropy愈小愈好，這樣Negative enrtopy就會愈大愈好。
    * $-\sum_x\sum_yP(y\vert x)logP(y)$：即Cross entropy，平常做分類就是計算模型輸出與實際資料的Cross entropy，即計算兩個distribution的相似度。此例為計算$P(y\vert x)$與$P(y)$之間的相似度。我們希望Cross entropy愈小愈好，這代表兩個分佈是相似的，也代表$P(y\vert x)$是分散的。

整體來說，我們會希望Inception Score愈大愈好。
### Evaluate by Other Networks - Inception Score
![](https://i.imgur.com/R1k1suo.png)

這是論文內針對各種模型計算Inception Score來判斷模型的好壞。

這邊可以看的到，原始W-GAN(Weight clipping)明顯不如Improved W-GAN(Gradient Penalty)，而Adam略優於RMSProp，但是DCGAN似乎更勝一籌。

W-GAN的優勢在於它的魯棒性較佳，但論文來看DCGAN的生成似乎較好。
### K-Nearest Neighbor
![](https://i.imgur.com/PRwNRsO.png)

[論文連結_A NOTE ON THE EVALUATION OF GENERATIVE MODELS](https://arxiv.org/pdf/1511.01844.pdf)

我們會希望機器可以生成資料集內所沒有的影像資料，但多數時候可能機器只是將其中一張照片稍微些許做平移就當做一張新的生成影像。

上面範例說明，兩張右上黑框圖皆為原始圖，左排由上至下分別為位移一至四個Pixel的影像，右排為計算相關性之後最相關的影像，計算相關性之後發現，右排由上二開始，最相關的影像已經不再是原始圖。

訓練模型用的資料集非常龐大，我們不大可能記住究竟資料集內有多少資料，因此當我們比較相關性之後發現左右不是相同的目標物的時候不用太過開心，因為它可能只是機器位移幾步之後得到的結果。
### Mode Collapse
![](https://i.imgur.com/gfLRkkb.png)

多數情況下GAN都會有Mode Collapse的情況。
### Missing Mode
![](https://i.imgur.com/SVi143C.png)

[論文連結_MODE REGULARIZED GENERATIVE ADVERSARIAL
NETWORKS](https://arxiv.org/pdf/1612.02136.pdf)

但更多情況下我們不知道機器少了什麼，論文告訴我們，上面的生成資料集中少了戴帽子的人。他發現這件事的作法是，訓練一個Discriminator，將實際資料集做為Positive，生成資料做為Negative，接著predict實際資料集的每一張照片。

論文作者發現，有部份的影像會有特別高的置信度，像是上圖戴帽子的女生，這可能就是Missing Mode中，影像生成的時候所不會生成的資料。
