李宏毅机器学习笔记第14周_生成式对抗网络(GAN)
文章目錄
- 一、Network as Generator
- 二、Why distribution?
- 三、Anime Face Generation
- 四、Discriminator
- 五、Basic Idea of GAN
- 六、Algorithm
- 七、Progressive GAN
- 八、Our Objective
- 九、Sampling is good enough
- 十、Discriminator
- 十一、Tips for GAN
- 1. JS divergence is not suitable
- 2. JS divergence的缺點
- 3. Wasserstein distance
- 4. WGAN
- 十二、GAN is still challenging
- 十三、Possible Solution?
- 十四、Evaluation of Generation
- 十五、Conditional Generation
- 十六、Learning from Unpaired Data
一、Network as Generator
我們把Network當作Generator使用時,會在Network的輸入中加上一個z(從某一個Distribution Simple出來的),這個z是不固定的,因為每一次使用這個Network是隨機生成z的。這里的Distribution存在一個限制,限制是它足夠簡單,能夠讓我們知道它的式子是什么樣子。因此,隨著Sample出來的Z不同,得到的輸出也就會不同,現在的輸出不在單一,而變成一個Complex Distribution。
二、Why distribution?
1. 舉例說明為什么需要輸出是一個Distribution?如下圖所示,一個Video Prediction的例子,它要做的是預測小精靈游戲下一步的游戲畫面。Network的輸入是之前的游戲畫面,我們希望輸出與下一步的游戲畫面越接近越好(我們把游戲畫面用一個很長的向量表示)。現在遇到一個問題是小精靈在某一時刻會向左右兩端分裂,因此我們希望輸出與向左轉接近的同時也與向右轉接近,解決這個問題就需要Network的輸出是有機率的,是一個Distribution。
2. 什么時候我們需要處理上述問題呢?當我們的任務需要創造力時,具體來說就是給一個Function,同樣的輸入會得到不同的輸出。如下圖所示,舉例說明為什么需要創造力。
三、Anime Face Generation
Unconditional generation就是輸入中不添加x,所以Generator的輸入是z(從Normal Distribution Sample出來的Low-dim vector,它的維度由自己決定),輸出是y(Complex Distribution,輸出是high-dim vector,然后把它整理成一張二次元人臉)。
四、Discriminator
Discriminator的輸入是一張圖片,輸出是一個數值,數值越大代表輸入的圖片越真,反之,數值越小代表輸入的圖片越假(在Discriminator里面可能會有大量CNN的架構)。
五、Basic Idea of GAN
如下圖所示,說明了Generator與Discriminator彼此之間互動,對抗中發展的過程。
六、Algorithm
1. Generator與Discriminator的運作過程:首先要初始化Generator與Discriminator的參數,固定Generator并訓練Discriminator,我們用真正的二次元頭像與Generator生成的頭像訓練Discriminator,訓練的目標是分辨真正的二次元頭像與Generator生成頭像的差異。
2. 固定Discriminator并訓練Generator,也就是讓Generator欺騙Discriminator成功,讓輸出的分數越來越大。
3. 現在就要反復地訓練Generator與Discriminator,期待Generator與Discriminator的結果越來越好。
七、Progressive GAN
Progressive GAN可以產生非常高清的人臉。舉例說明,GAN的輸入是一個向量,輸出是一張圖片。現在可以把輸入的向量做內差,我們可以看到兩張圖片之間連續地變化。
八、Our Objective
1. 我們有一個Generator,輸入是從Normal Distribution中sample出來的vector,輸出是P(G)(一個復雜的Distribution),現在有一堆data形成的P(data)(Distribution),希望P(G)與P(data)越接近越好。
2. 如下圖所示,用一維向量和式子來說明上面的情況。圖中的Divergence代表了P(G)與P(data)的差異度,Divergence越大代表P(G)與P(data)差距大,反之,Divergence越小代表P(G)與P(data)差距小。
九、Sampling is good enough
現在有一個問題是不知道如何計算Divergence,解決這個問題的方法是我們要sample出P(G)與P(data)。
十、Discriminator
1. 現在我們要把從P(G)與P(data)中sample出來的data拿去訓練一個Discriminator,訓練的目標是給從P(data) 中sample出來的data較高的分數,給從P(G)中sample出來的data較低的分數。
2. 如下圖所示,用式子來說明上面的情況。現在我們希望圖中的Dy(從P(data) 中sample出來的y)分數越高越好,Dy(從P(G)中sample出來的y)分數越低越好,也就是對V(D,G)取最大值。因此,max V(D,G)可以看作帶上負號的cross entropy,相當于minimize cross entropy。
3. 為什么max V(D,G)與Divergence有關系?當訓練有較小的Divergence的data時,會很難去discriminate,也就會得到較小的max V(D,G),當訓練有較大的Divergence的data時,會很容易去discriminate,也就會得到較大的max V(D,G)。
4. 通過上面步驟的說明,我們就可以得到下圖所示的結果,可以把max V(D,G)代替Divergence。
十一、Tips for GAN
1. JS divergence is not suitable
在大多例子中,P(G)與P(data)重疊的部分很少。有下面兩個原因:
1) Data本身的特性,重疊會被忽略掉。
2) 假設sample出來的點較少,就算P(G)與P(data)有重疊,對Discriminator來說是沒有重疊的。
2. JS divergence的缺點
JS divergence有一個特性是兩個沒有重疊的Distribution計算出來永遠是log2(不管這兩個Distribution是如何分布的),這會導致generator無法提高。
3. Wasserstein distance
在兩個沒有重疊的Distribution中,Wasserstein distance相比JS divergence做的更好在一直在向更好的方向發展而并非是處于一個恒定值。
4. WGAN
1) WGAN就是用Wasserstein distance取代JS divergence的GAN,WGAN的限制條件是D必須是1-Lipschitz,目的是為了讓生成數據與真實數據的差距不會太大。
2) 如下圖所示,WGAN做到限制的方法。
十二、GAN is still challenging
1. GAN很難訓練的原因是Generator與Discriminator相互促進,在訓練的過程中,只要其中一個停止進步,另外一個也會跟著停止進步。
2. 如下圖所示,GAN生成一段文字的難點在于Decoder改變參數后,得到最大的中文字沒有改變,Discriminator輸出的分數沒有改變,因此不能去計算微分,也就不能做Gradient Descent。
十三、Possible Solution?
現在考慮用Supervised Learning的方法,訓練一個Network,輸入是一堆圖片,每一個圖片用向量表示,輸出是一張圖片,希望輸出與原始圖片更加接近。
十四、Evaluation of Generation
1. 將GAN產生的圖片放入Image Classifier,輸出是一個機率分布,這個機率分布越集中代表產生出來的圖片質量越高。
2. 遇到的一個問題是Mode Collapse,它是指訓練開始時,產生的圖片質量比較不錯,當訓練很久后,會發現它產生的圖片數目比較匱乏。產生Mode Collapse的原因是Generation產生了Discriminator分辨不了的圖片后,Generation會抓住這一點,一直產生這類的圖片。
3. 遇到另外一個問題是Mode Dropping,它是指產生的資料只有真實資料的一部分,雖然產生的資料分布表示不錯,但是真實資料的分布比它更加豐富。
4. Diversity會參考一堆圖片,輸出的機率分布越平均,代表具有較高的多樣性。
5. IS的問題在于它可以判斷生成圖像的正確類型,但不能保證生成圖像的多樣性和質量。Fréchet Inception Distance可以解決這個問題,它的主要思想是通過輸出分類的倒二層的特征進行判斷。
十五、Conditional Generation
Conditional GAN是指額外地輸入一段向量,這段向量規定生成的圖像需要包含什么特征。
十六、Learning from Unpaired Data
1. 在Image Style Transfer中,我們要訓練一個Deep Network,現在的訓練資料是不成對的(unpaired),因此考慮用GAN來解決問題。
2. 如下圖所示,有一種想法:輸入是Domain x圖片的分布,輸出是Domain y圖片的分布。
3. 實際操作與之前的GAN不同在于Generator會無視輸入,也就是生成的二次元圖片與輸入的真人圖片沒有聯系,因此考慮使用Cycle GAN。Cycle GAN會訓練兩個Generator,這兩個Generator的作用是將原來的真人圖轉成二次元圖,再將二次元圖轉成真人圖,目標是輸入的真人圖與輸出的真人圖越接近越好。
4. 如下圖所示,StarGAN可以在多種風格間做轉換。
總結
以上是生活随笔為你收集整理的李宏毅机器学习笔记第14周_生成式对抗网络(GAN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中zip文件解压命令,Linu
- 下一篇: 面向对象习题(附带解析)