# HY機器學習#7: 生成式對抗網路(Generative Adversarial Network, GAN) 輸入會再多加一個隨機的變數z(可能是串接或相加),隨機變數z要是固定的分佈且可以取樣的,這樣network就可以視為一個generator,而輸出不再固定 時機:有時候輸出本來就是機率分布,有很多可能,或是任務是有創造性的時候。例如機器畫圖、機器對話 GAN就是其中一種network ## Generative Adversarial Network (GAN) ![](https://i.imgur.com/gWpb8jr.png) ### 以unconditional generation為例 (沒有資料輸入,純粹只有隨機變數輸入) 輸入(某一個向量,每次不同)->(generator)->輸出(向量,dim數跟輸入不一定要一樣)並調整成要的東西(例如圖像) ![](https://i.imgur.com/8TEbWJ0.png) ### Discriminator 輸入一張圖像,輸出值表示是否越接近要的東西(可用數值或是分類的向量) 架構可以自己創造,例如說處理圖像可以用CNN 作用是要拿來偵測generator製造的圖片是否是想要的 ![](https://i.imgur.com/8hZrgkb.png) Discriminator與Generator有對抗關係,製造出結果->找麻煩->用更多特徵去製造->繼續找麻煩.....,因此才會有Advisersarial(對抗)這個字眼 ![](https://i.imgur.com/sE8UeIj.png) ## 訓練過程 輸入->Generator(G)->Discriminator(D)->輸出 跟實際正確結果比較 而G-D可以看成一個大的Network Step 1:固定G,訓練D讓D盡可能在正確的圖輸出1、G產生的圖輸出0(或分類) (一開始G可能是隨機的,會輸出雜訊) ![](https://i.imgur.com/LxiQjjF.png) Step 2:固定D,調整訓練G可以讓加上D輸出的結果越高越好(覺得是正確的圖) ![](https://i.imgur.com/2UJwSb6.png) Step 3:重複1 2 ![](https://i.imgur.com/bts5P14.png) ### Progressive GAN 製造人臉的技術 https://arxiv.org/abs/1710.10196 也可以調整兩個輸入向量(內插),得到兩個照片的特徵的綜合(例如左看0右看1,使0.5看中間) ## GAN理論 ### Generator目標 找到一組參數,使得Generate的資料以及Sample的資料Diverenge最小(兩者的機率分布越接近) ![](https://i.imgur.com/sKx87H9.png) 分布沒有函數,只能從Discriminator下手 目標是最大化某個function V:使得原始圖形y帶入並取log會較大、製造出來的圖形取log較小(因此取1-log) 此式即為負的Cross Entropy,也就是計算分類問題時候會用到的公式,也推導出"跟JS Divergence有關",因此連接回原來的目標 ![](https://i.imgur.com/SgKrxFK.png) 直觀解釋:兩組資料很像,表示Discriminator不容易分辨,也造成V舉之後的最大值是比較小的值,Divergence就會比較小 ![](https://i.imgur.com/K8thLUw.png) 將原始的Divergence替換成Discriminator的目標式子 也就是GAN的演算法:最大化D之下調整G參數使得函數值越小 ![](https://i.imgur.com/D4u7FD8.png) 也可以用其他Divergence (設計不同的目標函數,連結到不同Divergence) ![](https://i.imgur.com/eG9HMOP.png) ## GAN的改進:WGAN ### JS Divergence的問題 Pg(Generator產生的資料)以及Pdata分布常常不會有什麼重疊 只要不重疊,不管是否更相近,divergence都是log2,這樣無法分辨是否改善;而且binary classifier都可以得到完全正確答案,不容易藉由訓練而改進。 Wasserstein distance 把某個分布變成另一個分布,所需的最小平均距離 這樣就可以把上面的問題解決,不同相近程度有不同的d ### WGAN 利用Wasserstein distance 取代JS Divergence Wasserstein distance計算麻煩 相當於解下面問題(找出D(x),D是一個足夠平滑的函數) 式子的值就是Wasserstein distance ![](https://i.imgur.com/k3JbafM.png) ![](https://i.imgur.com/tlBTMZP.png) ### 其他GAN影片 https://www.youtube.com/playlist?list=PLJV_el3uVTsMq6JEFPW35BCiOQTsoqwNw Variational Autoencoder (VAE) https://www.youtube.com/watch?v=8zomhgKrsmQ FLOW-based Model https://www.youtube.com/watch?v=uXY18nzdSsM ### 直接用supervise方法得到圖形 Generative Latent Optimization (GLO) https://arxiv.org/abs/1707.05776 Gradient Origin Networks https://arxiv.org/abs/2007.02798 ![](https://i.imgur.com/th4RI2p.png) ## GAN的效能評估 ### 人工看 工資貴且太過主觀 ### 通過Classifier 單一圖片丟入影像分類系統: Inception net, VGG, etc. 若同一類的分數高,表示系統肯定影像就是某種類別,表現較佳 以下缺點至今難解 1. More Collapse:只產生出某幾種很像的圖片(D的盲點,G根據盲點產出) ![](https://i.imgur.com/XivsqJ1.png) 2. More Dropping:多樣性有問題,有相同的某一特徵 將每張圖片丟入分類後,將結果平均,若分布過於集中,表示有此問題 (越平坦越好,表示每張照片都處於不同類別) ![](https://i.imgur.com/wo4HVGz.png) Inception Score (IS): Good quality(單張分類) large diversity(各張分布) → Large IS FID: 把真實跟產出圖片丟入系統,SoftMax之前的向量評比,假設都是高斯分布,用某公式寄送兩個分布的差距,越小越好 ![](https://i.imgur.com/4EpWOBz.png) 3. Memory GAN 用資料庫的答案作為輸出,表現很好但不是好的系統 ## Conditional Generation 給條件,依此條件給輸出 應用:輸入文字,根據文字給予符合文字特徵的圖片 ###### tags: `機器學習` `李宏毅`