【GANs学习笔记】(三)GANs理论基础
完整筆記:http://www.gwylab.com/note-gans.html
——————————————————————-
第二章 GANs的理論與提升
?????? 本章會介紹一些與提升和改進GANs相關的paper,這涉及到一些與GANs理論相關的知識,在第一部分會用較簡短的話語介紹一些GANs的相關核心理論,第二部分是GANs存在的一些缺陷和改進手段,第三部分會介紹一個很有趣的paper――fGAN,它能幫助我們更深的理解GANs的算法思想,第四部分開始就是更多的paper,它們會用到一些很有意思的tricks去提升和改進GANs。
1. GANs相關理論
?????? GANs本質上在做的事情是什么?
?????? 我們假設把每一個圖片看作二維空間中的一個點,并且現有圖片會滿足于某個數據分布,我們記作Pdata(x)。以人臉舉例,在很大的一個圖像分布空間中,實際上只有很小一部分的區域是人臉圖像。如上圖所示,只有在藍色區域采樣出的點才會看起來像人臉,而在藍色區域以外的區域采樣出的點就不是人臉。今天我們需要做的,就是讓機器去找到人臉的分布函數。具體來說,就是我們會有很多人臉圖片數據,我們觀測這些數據的分布,大致能猜測到哪些區域出現人臉圖片數據的概率比較高,但是如果讓我們找出一個具體的定義式,去給明這些人臉圖片數據的分布規律,我們是沒有辦法做到的。但是如今,我們有了機器學習,希望機器能夠學習到這樣一個分布規律,并能夠給出一個極致貼合的表達式。
?????? 在GANs出現之前,人們采用的方法是Maximum Likelihood Estimation。
?????? 簡單來說,就是我們有一個生成器和一組參數 θ,我們還有從真實分布Pdata(x)中sample出的數據{},我們不知道數據的真實分布具體長什么樣,但是我們希望不斷地調整和θ,讓越接近越好。具體的做法是,對于每一組參數θ和真實分布的抽樣,我們能夠計算出參數θ下的生成器生成該真實抽樣的likelihood,于是我們希望找到一個最佳的參數組,使得生成器的結果最接近,也就是對于每個真實抽樣的likelihood都最大,這等價于所有真實抽樣的likelihood的乘積最大,那原始問題就轉換為如下這個最大似然問題:
?????? 下面我們需要求解這個maximizing the likelihood問題,我們先證明,它其實等價于求minimize KL divergence(KL divergence是一個衡量兩個分布之間的差異的計算式)問題。
?????? 首先我們加上一個對數log,將累乘轉化為累加問題。然后再將累加轉化為期望問題
?????? 然后這個期望也就是積分問題:
?????? 因為是arg max,后面可以再補上一項:
?????? 補完之后的式子便剛好等價于與的KL Divergence的最小化求解。
?????? 現在這個KL Divergance的最小化問題如何求解呢?我們不介紹傳統的數學方法求解了,我們下面考慮引用neural network。
?????? 我們把這個neural network稱作generator。通過上述的分析我們知道,我們需要訓練出這樣的generator,對于一個已知分布的數據z,它可以把數據z轉化成一個未知分布的數據x,這個未知分布可以與z所在的分布完全不一樣,我們把它稱作,并且我們希望與之間的Divergence越小越好。如果能找到這樣的,那也就意味著我們找到了真實數據分布的近似解,也就意味著我們能夠生成各種各樣符合真實分布規律的數據。
?????? 現在一個最關鍵的問題是,這個Divergence要如何計算出來呢?理論上來說我們不知道是什么,我們也不知道是什么,因此Divergence是我們無法計算的。但是,人無法計算的東西,交給神經網絡或許就知道如何計算了。于是,我們新建了一個neural network,專門來量與之間的Divergence,這個neural network,就叫做Discriminator。
?????? 如上圖所示,藍色星星是從中sample出的數據,黃色星星是從中sample出的數據,現在交給Discriminator去判別讀入數據是來自還是,實際上就是在衡量與之間的Divergence,因為如果二者之間的Divergence越大,Discriminator就會給的數據更低的分數,給的數據更高的分數;而如果二者之間的Divergence越小,Discriminator就會給二者的分數越接近;當與完全一致時,也就是Divergence=0時,
Discriminator給二者的分數就都是0.5了。
?????? 當然,上述只是我們直觀上覺得說,Discriminator是與Divergence有關的,下面我們需要用數學方法證明:Discriminator真的可以衡量Divergence的值。我們先來看一下Discriminator的目標式:
?????? 這個式子很好理解,如果來源x~,D(x)盡可能高;如果來源x~,D(x)盡可能低。下面我們求解一下這個目標式。
?????? 首先將目標式轉化為一個積分:
?????? 我們假設D(x)可以是任意函數。那么現在這個表達式,對于所有的x,計算出一個表達式,使得所有表達式的積分求和最大,這等價于,如果對于每一個表達式,我們能找到一個D的取值,使得這個表達式的最大,那么最終所有表達式的積分求和也最大,即:
?????? 這個方程的求解非常容易,最后的結果是;
?????? 現在把代入到目標表達式中得到:
?????? 進一步變形(分子分母同除以2),轉化為:
?????? 這個表達式等價為:
?????? 至此,我們證明了,最大化V(G,D)問題的求解實際上就是在求解與之間JS Divergence的值(與前面提到的KL Divergence可以認為是等效的)。
?????? 于是,我們可以再回到Generator要解決的問題上:
?????? Generator的目的,是讓產生數據與真實數據之間的Divergence最小,本來Divergence是沒有辦法計算的,但是現在有了Discriminator之后,Divergence變得可以計算了,于是Generator的新的目標表達式變為:
?????? 接下來我們需要求解這個表達式。值得注意的是,在實際的網絡訓練中,discriminator與generator是交替訓練的,并且是先訓練discriminator再訓練generator,因此,當generator需要求解上述表達式的時候,discriminator是已經訓練好的,于是這個式子就可以寫成L(G),目標表達式就轉化成:
?????? 這是一個最初級的目標表達式,用基本的gradient descent就能求解:
?????? 綜上,我們求解出了Disciminator,然后我們也求解出了Generator,下面我們先用一個完整的算法來回顧一下這整套流程,然后我們會反思目前的這套架構是否已經是完美的。
?????? 第一個部分是訓練discriminator,先從真實數據分布中抽樣,然后從先驗分布中抽樣z,并通過generator產生仿造數據,接著把和丟入discriminator中訓練,使得目標函數最大;第二個部分是訓練generator,從先驗分布中抽樣新的z,接著把丟入generator中訓練,使得目標函數最小。這樣循環交替,最終generator產生的數據就會越來越接近真實數據。
總結
以上是生活随笔為你收集整理的【GANs学习笔记】(三)GANs理论基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10 鼠标指针
- 下一篇: 素数环问题