# ML(Hung-yi Lee)_Lecture05. Generative Adversarial Network(GAN) ###### tags: `Machine Learning` ## Network as Generator * 不只看x當作輸出,還看z(從distribution simple出來的,不固定) ![](https://i.imgur.com/bEGDtPJ.png) * why distribution? * video prediction * 世界有很多不可預測的東西 * when the tasks need **creativity** : 有多種可能輸出並且都是正確的 ## Generative Adversarial Network(GAN) ### Unconditional generation #### Generator 產生一個非常高維的向量 ![](https://i.imgur.com/ZpHSHq4.png) #### Discriminator 輸入:image 輸出:scalar #### Algorithm step1. fix generator **G**, update discriminator **D** * **D**訓練目標:分辨出真正的二次元人物和**G**產生出來的差別 step2. fix discriminator **D**, update generator **G** * **G** learn how to fool **D** * **G**產生二次元照片由**D**評分來做training ![](https://i.imgur.com/aklgblM.png) #### progressive GAN 產生真實人臉 ![](https://i.imgur.com/MT5a3jQ.png) 目標: * $P_G、P_{data}$愈相近愈好 * 找一個generator $G^*=argminDiv(P_G,P_{data})$ * 計算divergence:**D**看到real data就給高分(分辨真圖和生成圖) * $V(G,D)=E_{y~P_{data}}[logD(y)]+E_{y~P_G}[log(1-D(y))]$ ($P_{data}$是真正的images,$P_G$是從**G**產生的images) * $E_{y~P_{data}}[logD(y)]$:越大越好 * $E_{y~P_G}[log(1-D(y))]$ :越小越好 * 等同於minimize cross entropy=訓練一個classifier ### Tips for GAN #### Js divergence * $P_G,P_{data}$原始資料重疊部份少 * if smapling的點不夠多還是沒有很多交集 * 怎麼train結果都很好 #### Wasserstein distance 窮舉所有把P變成Q的方法看看哪一個平均距離最短,計算distance的計算量很大 ![](https://i.imgur.com/kwtAWaD.png) 從左到右 **G**越來越強,但是觀察**D**會看不出東西從左到右的divergance都相同,但是wasserstein distance愈來愈好 ![](https://i.imgur.com/PzQtZYO.png) #### WGAN * 計算wasserstein distance between $P_{data},P_G$ ![](https://i.imgur.com/TeOPi1H.png) * 加上$D\in1-Lipschitz$的限制避免generated往無窮負、real的往無窮正,要求**D**夠平滑不能變化劇烈 * improved WGAN $\rightarrow$ Gradient Penalty * keep the gradient close to 1 * Spectral Normalization * **G**和**D**只要有其中一者不再進步另一個也會跟著停擺 #### Evaluation of Generation * **mode collapse**問題 ![](https://i.imgur.com/J1vmiUY.png) * **mode dropping** 產生出來的資料只有真實資料的一部份 ![](https://i.imgur.com/4kDiyn2.png) * 確認**diversity**:做分類,產生的圖片分佈不同 (image classifier) * Inception Score(IS) : good quality, large diversity$\rightarrow$large **IS** (但如果是產生人臉,diversity本來就會很小IS不適用) * Ferchet Inception Distance(FID):拿進入softmax之前的hidden layer的輸出 ![](https://i.imgur.com/EmXoh0Q.png) 真實data和generator產生的image distance愈小愈好 ### Conditional Generation 可操控輸出 ![](https://i.imgur.com/H7hycCt.png) ![](https://i.imgur.com/qoQDX02.png) if這樣訓練會產生清晰的圖片但和輸入完全無關 在Conditional GAN裡**D**的input不只要吃image y同樣要把x(敘述)一起讀進去判斷$\rightarrow$**需要label成對資料** ![](https://i.imgur.com/dGtXOUZ.png) ### learning from unpaired data x和y不是成對的 ex.影像風格轉換(真人轉換成動慢) ![](https://i.imgur.com/BkJS7jf.png) * 怎麼強化輸入&輸出的關係 **cycle GAN** ![](https://i.imgur.com/6YM5IEy.png) 輸入的圖片和輸出無關 solution_3個Generator: 1. 把x轉成y 2. 把y還原成x 3. 看**D**的輸出像不像y domain的圖 ![](https://i.imgur.com/fNLIVT1.png)