GAN入門理解及公式推導

首先,當我們拿到一個嶄新的網路的時候,先不管它到底是什麼,作為一個黑盒來研究研究它的外觀。

GAN:生成對抗網路

輸入:原始數據x和隨機雜訊信號z (比如高斯分布或者均勻分布)

輸出:一個概率值或一個標量值。

首先舉個簡單例子好個初始的印象:警察與造假幣者

造假者按照真實錢幣的樣子來造假,警察來分辨遇到的錢幣是真還是假。最初的時候,造假者的造假能力不高,所以警察可以很容易的分辨出來。當被識別出來的時候,造假者就會繼續修鍊自己的技藝。

與此同時 警察的分辨能力也要相應提高。這樣的過程就是一種生成對抗的過程。對抗到最後,造假者已經能夠創造出可以以假亂真的錢幣,警察難以區分真假。

所以猜對的概率變成0.5。最後得到的造假者 已經是一個可以很好的刻畫錢幣的人,他掌握了錢幣的各種特徵,他也就是我們希望得到的生成器。

---------------------------------------------------------------------------------------

好,接下來開始研究一下黑盒內部,GAN的組成和工作原理。

生成對抗網路GAN,就是在這種對抗與生成的交替進行中對原數據進行刻畫的。

GANGAN啟發自博弈論中的二人零和博弈[1](此為註解,不理解的讀者可以跳到最後查看解答)是由Ian Goodfellow 於2014年開創性的提出。GAN是由兩部分主成:生成模型G(generative model)和判別模型D(discriminative model)。生成模型捕捉樣本數據的分布,判別模型是一個二分類器,判別輸入是真實數據還是生成的樣本。

X是真實數據,真實數據符合Pdata(x)分布。z是雜訊數據,雜訊數據符合Pz(z)分布,比如高斯分布或者均勻分布。然後從雜訊z進行抽樣,通過G之後生成數據x=G(z)。然後真實數據與生成數據一起送入分類器D,後面接一個sigmoid函數,輸出判定類別。

這裡,z是雜訊數據,從z中採樣作為x,形成綠色的高聳的部分,原始數據Xdata是不變的。藍色虛線是分類器(sigmoid),黑色虛線是原始數據,綠色實線是生成數據。最初的時候D可以很好的區分開真實數據和生成數據,看圖(b),對於藍色虛線而言,單純的綠色部分可以很明確的劃分為0,黑色虛線的部分可以很明確的劃分成1,二者相交的部分劃分不是很明確。看圖(c)綠色實現生成數據更新,與原始數據相似度增加。最後一張圖,經過多次更新與對抗生成之後,生成數據已經和原始數據非常相像的了,這時分類器已經無法判斷到底是輸出1還是0,於是就變成了0.5一條水平線。

這張圖形象的說明了一下G和D的優化方向。優化D的時候需要很好的畫出黑色虛線,使它能夠區分開真實數據和生成數據。優化G的時候,生成數據更加接近原始數據的樣子,使得D難以區分數據真假。如此反覆直到最後再也畫不出區分的黑色虛線。

主要特點和應用場景

(1)GAN可以用來產生data。

(2)根據GAN的組成結構我們可以知道,GAN 整個的過程就是,G產生一個自創的假數據和真數據放在一起讓D來區分,在這種不停的較量中G就模擬出來了跟真實數據十分相近的數據。所以GAN主要的應用場景就是能夠學習出這樣模擬分布的數據,並且可以用模擬分布代替原始數據的地方!

---------------------------------------------------------------------------------------

GAN優化目標函數:

D想辦法增加V的值,G想辦法減小V的值,兩人在相互的對抗。

下面講這個式子的數學意義。

首先固定G訓練D :

1)訓練D的目的是希望這個式子的值越大越好。真實數據希望被D分成1,生成數據希望被分成0。

第一項,如果有一個真實數據被分錯,那麼log(D(x))<<0,期望會變成負無窮大。

第二項,如果被分錯成1的話,第二項也會是負無窮大。

很多被分錯的話,就會出現很多負無窮,那樣可以優化的空間還有很多。可以修正參數,使V的數值增大。

2)訓練G ,它是希望V的值越小越好,讓D分不開真假數據。

因為目標函數的第一項不包含G,是常數,所以可以直接忽略 不受影響。

對於G來說 它希望D在劃分他的時候能夠越大越好,他希望被D劃分1(真實數據)。

第二個式子和第一個式子等價。在訓練的時候,第二個式子訓練效果比較好 常用第二個式子的形式。

證明V是可以收斂導最佳解的。

(1)global optimum 存在

(2)global optimum訓練過程收斂

全局優化首先固定G優化D,D的最佳情況為:

1、證明D*G(x)是最優解

由於V是連續的所以可以寫成積分的形式來表示期望:

通過假設x=G(z)可逆進行了變數替換,整理式子後得到:

然後對V(G,D)進行最大化:對D進行優化令V取最大

取極值,對V進行求導並令導數等於0.求解出來可得D的最佳解D*G(x)結果一樣。

2、假設我們已經知道D*G(x)是最佳解了,這種情況下G想要得到最佳解的情況是:G產生出來的分布要和真實分布一致,即:

在這個條件下,D*G(x)=1/2。

接下來看G的最優解是什麼,因為D的這時已經找到最優解了,所以只需要調整G ,令

對於D的最優解我們已經知道了,D*G(x),可以直接把它帶進來 並去掉前面的Max

然後對 log裡面的式子分子分母都同除以2,分母不動,兩個分子在log裡面除以2 相當於在log外面 -log(4) 可以直接提出來:

結果可以整理成兩個KL散度-log(4)

KL散度是大於等於零的,所以C的最小值是 -log(4)

當且僅當

所以證明了 當G產生的數據和真實數據是一樣的時候,C取得最小值也就是最佳解。

證明收斂:

核心部分偽代碼描述:

For number of training steps

Sample n training images, X

Compute n generated images, G

Compute discriminator probabilities for X and G

Label training images 1 and generated images 0

Cost = (1/n)sum[log(D(X)) + log(1 - D(G))]

Update discriminator weights, hold generator weights constant

Label generated images 1

Cost = (1/n)sum[log(D(G))]

Update generator weights, hold discriminator weights constant

---------------------------------------------------------------------------------------

Further Research:DCGAN和Adversrial Autoencoders

---------------------------------------------------------------------------------------

[1] 零和博弈(zero-sum game),又稱零和遊戲,與非零和博弈相對,是博弈論的一個概念,屬非合作博弈。指參與博弈的各方,在嚴格競爭下,一方的收益必然意味著另一方的損失,博弈各方的收益和損失相加總和永遠為「零」,雙方不存在合作的可能。就像下棋的遊戲一樣,你走的每一步和對方走的每一步都是向著對自己有利的方向走,然後你和對手輪流走步

每一步都向著自己最大可能能贏的地方走。這就是零和博弈。

Vs代表S能贏的可能性,S是當前棋手,S-是對方,aS是當前棋手可以做的選擇,aS-是對方可做的選擇。對於S來講V越大越容易贏。

=============================================================

參考資料:

(1)文章:2014 GAN 《Generative Adversarial Networks》-Ian Goodfellow, arXiv:1406.2661v1

視頻:youtube.com/watch?

slides:slideshare.net/ckmarkoh

blog:blog.csdn.net/solomon15

cnblogs.com/Charles-Wan

cnblogs.com/wangxiaocvp

(2)DCGAN:文章:2015 DCGAN《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》 - Alec Radford & Luke Metz, arxiv:1511.06434

代碼:github.com/kkihara/GAN

post:kenkihara.com/projects/

slides:github.com/kkihara/GAN/


推薦閱讀:

第一個永生的人類可能已經誕生
請簽收,這是你的2018新年禮物!
AI相關概念辨析
美國用人臉識別防範恐襲
十年後AI會成就怎樣的新零售?連阿里首席科學家都無法想像

TAG:生成对抗网络GAN | 深度学习DeepLearning | 人工智能 |