Generative Adversarial Networks 算法
GAN框架是有兩個對象(discriminator,generator)的對抗遊戲。generator是一個生成器,generator產生來自和訓練樣本同樣的分佈的樣本。discriminator是一個判別器,判別是真實數據仍是generator產生的僞造數據。discriminator使用傳統的監督學習技術進行訓練,將輸入分紅兩類(真實的或者僞造的)。generator訓練的目標就是欺騙判別器。 網絡
遊戲中的兩個參與對象由兩個函數表示,每一個都是關於輸入和參數的可微分函數。discriminator是一個以 x 做爲輸入和使用θ(D) 爲參數的函數D,D(x)是指判斷輸入樣本x是真實樣本的機率 ;generator由一個以z爲輸入使用 θ(G) 爲參數的函數G,G(z)是指輸入樣本z產生一個新的樣本,這個新樣本但願接近真實樣本的分佈。 框架
discriminator與generator都用兩個參與對象的參數定義的代價函數。discriminator但願僅控制住θ(D) 情形下最小化 J(D)(θ(D), θ(G))。generator但願在僅控制θ(D) 情形下最小化 J(G)(θ(D),θ(G))。由於每一個參與對象的代價依賴於其餘參與對象的參數,可是每一個參與對象不能控制別人的參數,這個場景其實更爲接近一個博弈而非優化問題。優化問題的解是一個局部最小,這是參數空間的點其鄰居有着不小於它的代價。而對一個博弈的解釋一個納什均衡。在這樣的設定下,Nash 均衡是一個元組,( θ(D), θ(G)) 既是關於θ(D)的 J(D) 的局部最小值和也是關於θ(G)的 J(G) 局部最小值。 函數
圖 1 GAN兩種場景 性能
如圖 1所示GAN有兩種場景,第一種場景(左圖),discriminator對象隨機從樣本集中取一個元素X做爲輸入,discriminator對象的目標是以真實樣本X做爲輸入時,儘可能判斷D(x)爲1;而第二種場景(右圖),具備discriminator和generator兩個對象的參與,generator對象以噪聲變量z做爲輸入,而後產生一個樣本G(z),discriminator對象以G(z)做爲輸入並儘可能判斷D(G(z) )爲0;而generator對象的目標是儘可能讓discriminator對象計算D(G(z) )爲1。最後這個遊戲是達到納什均衡(Nash equilibrium),即G(z)產生的數據樣本分佈與真實數據樣本分佈同樣,即對於全部的輸入x,D(x) 的計算結果爲0.5。 學習
GAN是由一個判別模型(discriminator)和生成模(generator)型組成。其中discriminator和generator能夠由任何可微函數來描述,如圖 4所示是採用兩個多層的神經網絡來描述discriminator和generator模型,即圖中的G和D函數。 優化
圖 2 ui
generator是一個可微分函數 G。當 z 從某個簡單的先驗分佈中採樣出來時,G(z) 產生一個從 pmodel 中的樣本。通常來講, GAN對於generator神經網絡只有不多的限制。若是咱們但願 pmodel 是 x 空間的支集(support),咱們須要 z 的維度須要至少和 x 的維度同樣大,並且 G 必須是可微分的,可是這些其實就是僅有的要求了。 spa
交叉熵代價函數(Cross-entropy cost function)是用來衡量人工神經網絡(ANN)的預測值與實際值的一種方式。交叉熵損失函數定義以下: .net
其中:
目前爲 GANs 設計的全部不一樣的博弈針對discriminator的 J(D) 使用了一樣的代價函數。他們僅僅是generator J(G) 的代價函數不一樣。
discriminator的代價函數是:
其中: 表示在分佈上的指望,D(x)爲機率函數。
其實就是標準地訓練一個sigmoid 輸出的標準二分類器交叉熵代價函數。惟一的不一樣就是分類器在兩個 minibatch 的數據上進行訓練;一個來自數據集(其中的標籤均是 1),另外一個來自生成器(其標籤均是 0)。
經過給discriminator模型定義損失函數後,將優化discriminator模型轉移爲優化等式,即訓練discriminator模型就是爲了最小化discriminator的等式。
GAN框架有兩個參與對象discriminator和generator ,上一節只考慮優化discriminator模型,還須要考慮優化generator模型。GAN使用了零和博弈思想爲generator模型定義損失函數。在零和博弈遊戲中,其全部參與人的代價老是 0,即在遊戲中贏的得正數,輸的得負數,因此總和爲0。在零和博弈中,參加遊戲雙方的得分互爲相反數,因此根據discriminator的損失函數,可推導出generator的損失函數爲:
因此優化generator模型,同樣是優化 損失函數,即最小化該損失函數。因爲和兩個損失函數只是互爲相反數,因此能夠將兩個等式合併爲一個優化等式。即
因爲咱們訓練D來最大化分配正確標籤給不論是來自於訓練樣例仍是G生成的樣例的機率.咱們同時訓練G來最小化。換句話說,D和G的訓練是關於值函數V(G,D)的極小化極大的二人博弈問題:
其中:
圖 3
如圖 2所示a-b是模型G和D的優化過程,黑色的虛線表示訓練數據的分佈;綠色的實線表示模型G產生的分佈;藍色的虛線表示模型D的計算值;水平X軸表示D函數的計算值;水平z軸表示噪聲值。一開始G的產生分佈於真實數據分佈偏離較大,且模型D對真實數據和僞造數據區分能力較強,即對真實數據D函數的計算值較大,而對僞造數據D函數的計算值較小,如圖a;隨着模型的訓練,G數據分佈於真實數據分佈逐漸重合,如圖d,最後D的計算值恆等爲0.5。
訓練過程包含同時隨機梯度降低 simultaneous SGD。在每一步,會採樣兩個 minibatch:一個來自數據集的 x 的 minibatch 和一個從隱含變量的模型先驗採樣的 z 的 minibatch。而後兩個梯度步驟同時進行:一個更新 θ(D) 來下降 J(D),另外一個更新 θ(G) 來下降 J(G)。這兩個步驟均可以使用你選擇的基於梯度的優化算法。
生成對抗網絡的minibatch隨機梯度降低訓練。判別器的訓練步數,k是一個超參數。在咱們的試驗中使用k=1,使消耗最小。
圖 4
GAN的設計思想採用discriminator和generator兩個模型進行對抗優化,本章用兩個證實來從理論上論證了對抗網絡的合理性。
命題:當G固定的時候,D會有惟一的最優解。真實描述以下:
證實以下:
因此得證。
命題:若是G和D有足夠的性能,對於算法中的每一步,給定G時,判別器可以達到它的最優,而且經過更新pg來提升這個判別準則。
則pg收斂爲pdata。
證實略,看不太懂。
CycleGAN的原理能夠概述爲: 將一類圖片轉換成另外一類圖片 。也就是說,如今有兩個樣本空間X和Y,咱們但願把X空間中的樣本轉換成Y空間中的樣本。(獲取一個數據集的特徵,並轉化成另外一個數據集的特徵).
圖 5
CycleGAN模型的學習目標是訓練兩個映射函數:G:XàY和F:YàX,同時CycleGAN模型還包含了兩個相關的discriminator對象:Dx和Dy。Dy是爲了區分G函數產生的數據和Y數據;而Dx是爲了區分F函數產生的數據和X數據,如圖 5(a)所示。
如3.2小節所示介紹的對抗網絡,對於一個映射函數G:XàY,和discriminator對象DY,則GAN的損失函數定義爲:
其中,映射函數G是將X領域的數據轉換爲相似Y領域的數據,而DY就是判別真實的Y數據和G僞造的Y數據。即GAN的優化目標是:。一樣的對於映射F:YàX,和discriminator對象DX,能夠定義一個GAN損失函數的優化目標:.
理論上GAN可以學習兩個映射函數G和F,其可以分別從X或Y一個領域的數據生成到另外一個領域的數據。可是因爲映射函數變換可能性很是多,沒法保證映射函數可以將一個領域的輸入數據xi轉換爲其它領域的數據yi。爲了減小映射函數的變換範圍或可能性,CycleGAN增長了一些約束函數來限制這種變換範圍過大的問題。
如圖 5(b)所示,經過映射函數G和F,能夠從X領域的數據樣本變換爲領域Y的數據樣本,再變換爲X領域的數據樣本,從而生成一個環,即:,同理有圖 5(c)的。因此原始數據樣本x和循環產生的數據F(G(x))之間確定有差別,那麼能夠定義一致性損失函數爲:
其中式中的方括號是使用了L1規範化。
綜上所述,CycleGAN的損失函數能夠完整表達爲:
其中控制了映射函數G和F的相對重要性。因此CycleGAN的優化目標是:
其中G和F兩個映射函數的內部結構互相彼此獨立,即它們能將一個數據樣本映射到另外一個領域的數據樣本。
CycleGAN網絡的實現就是定義四個神經網絡:G、F、Dx和Dy;而後優化這個最終的表達式,