1. 程式人生 > >GAN原理總結

GAN原理總結

基礎GAN:原理
GAN(Generative Adversarial Nets,生成對抗網路)由J.GoodFellow在2014年的文章中正式提出,在其後大熱,在兩三年內被提出多種實用的改進方法,且仍在快速發展.在影象創作,超解析度重建等方面已經得到了有效應用.
GAN是一種無監督學習的網路,這決定了其
假設我們有兩個網路,G(Generator)和D(Discriminator),其中G是一個生成圖片的網路,它接收一個隨機的噪聲z,通過這個噪聲生成圖片,記做G(z).D是一個判別網路,判別一張圖片是不是“真實的”.它的輸入引數是x,x代表一張圖片,輸出D(x)代表x為真實圖片的概率,如果為1,就代表100%是真實的圖片,而輸出為0,就代表不可能是真實的圖片.
在GoodFellow的文章中提出了一種清晰的解釋模型:

Figure 1一種GAN的一維解釋模型
上圖中藍線破折代表判別網路D的分佈,黑色點線代表樣本的分佈p_x,綠色實現代表生成網路G所生成資料的分佈p_g (G)(與p_data相區分).最底層水平線代表z的選取範圍,上層代表x的.其間的箭頭代表對映x=G(z),箭頭的密集程度與p_g分佈有關
圖a對應情形中, p_g與p_data很相似,D作為判別器表現良好.
圖b中,D被訓練地更能區別樣本與生成的資料,並收斂於理論最優值:
D^* (x)=(p_data (x))/(p_data (x)+p_g (x))
圖c表示,在G更新後,利用D的導數改變G(z),使得生成的影象更不易被區分出,在圖上表現為綠線與黑線趨同.
圖d表示訓練完成的情形,此時p_g=p_data,分類器無法區分出樣本與生成資料,D(x)=1/2
在訓練過程中,生成網路G的目標就是儘量生成真實的圖片去欺騙判別網路D.而D的目標就是儘量把G生成的圖片和真實的圖片分別開來.這樣,G和D構成了一個動態的”博弈過程”,以數學式表示如下:
min┬G⁡〖max┬D⁡〖V(D,G)〗=E_(x~p_data (x)) [logD(x)]+〗 E_(z~p(z)) [log⁡(1-D(G(z)))]
這裡,目標函式中log函式的作用是提高早期G與D能力相差過大時的學習效果
對應的梯度學習演算法:

Figure 2批量隨機梯度下降法在GAN訓練中的應用

DCGAN

Figure 3生成網路G結構示意(conv層為fractional-strided convolutions層)

DCGAN(Deep Convolutional GAN,深度卷積對抗網路)是GAN的一個改進版本.它將GAN無監督學習的優點(無需cost function)與CNN結合起來,而GAN也因與卷積神經網路結合提升了針對影象的處理能力.它可以視為在一般CNN上的改進.
與普通的CNN相比,DCGAN有如下特點:
將pooling層用convolution層取代.其中在D上用strided convolutions替代,在G上用fractional-strided convolutions層取代
這使得模型可以學習降取樣過程,雖然犧牲一些穩定性
在G與D上均使用Batch Normalization,即將輸入都歸一化為0均值方差為1
這穩定了學習結果,有助於梯度傳遞
對所有層都採用此方法會導致模型不穩定,不對G的輸出層與D的輸入層採用此方法可以避免這一狀況
移除全連線層:出於收斂速度的考慮
在G上除輸出層均使用ReLU,輸出層用tanh,在D上所有層使用LeakyReLU
對於G有界的啟用函式可以使模型更快飽和,從而覆蓋待學習分佈的色彩空間
對於D,尤其是用於超分辨重建時可以取得更好的效果
模型細節:
除將輸入影象歸一化至[-1 1]外無額外初始化處理
全部採用小批量隨機梯度下降法(SGD)訓練,最小批量為128
所有權重初始化值隨機生成,並滿足均值為0,標準差為0.02的正態分佈
LeakyReLU的leak斜率被設定為0.2
訓練中採用Adam動量法來加速
學習率設定為0.0002,0.001過快
動量項β設為0.9過快,取0.5