關於GAN的個人理解

宋霖軒發表於2019-02-11

一、基本原理:

GAN其實本質就是由兩個網路組成,一個為我們熟知的判別網路,還有一個為生成網路;GAN的最終目標就是通過使用判別器,能夠使生成器生成我們需要的影象;

通常我們我們將生成網路簡寫為G,將辨別網路稱為D。

G主要接受一個噪音,並且生成偽造的資料,塞給D進行辨別,由D進行辨別,理想狀態下,D會成功的鑑別出來G生成的資料為假。這時,G會進行改進,進一步的將噪音偽造成真實資料的樣子,塞給D鑑別;

同時,D也會學習如何鑑別出G的造假技巧,從而能夠將G生成的假圖片甄別出來;可以看出,這就是一個動態的過程,其最終的目的是D無法鑑別出G生成的資料是真的還是假的;

二、基本原理:

GAN網路的一大特點就是可以使用噪音,學習到真實的資料分佈,從而模擬出真實資料的資料分佈;

下面是GAN的目標函式:

關於GAN的個人理解

對於GAN網路,我們採用的是交替訓練,也就是先固定住一個網路,去訓練另一個網路;

我們先固定G訓練D,從而有:

關於GAN的個人理解

對於這個式子,我們希望他越大越好。在理想狀態下,真實的資料辨別成1,而G生成的資料,也就是G(z),應該辨別成0;

觀察這個式子我們可以發現,如果真實資料x或者生成資料是G(z)被分類錯一個,這個式子的最終值都會變成負無窮,所以這就可以看出有很大的優化空間去是這個式子的值最大;

接下來我們固定D訓練G,會得到以下式子:

關於GAN的個人理解

對於這個式子,我們的目的是使其最小化。對於該式的第一項,可以在這個時候理解成一個常數項,第二項才是影響這個式子值的關鍵;

G的目的是希望D將他生成的資料錯認為是真的,所以應該有D(G(z))=1,此時第二項為負無窮,滿足式子的最小值要求;

我們所說的GAN網路可以很好的學習真實資料的分佈,所以在訓練中,如果固定網路G不動,訓練D,所以會有最優結果:

關於GAN的個人理解
其中右邊代表的概率分別是真實資料的分佈以及學習資料的分佈,隨著學習的分佈趨於真實的資料分佈,該式子的值會到達0.5,到此時,G、D網路都達到平衡狀態,兩個網路無法進一步更新。

三、損失函式:

損失函式的定義可以說是GAN網路的關鍵;

對於判別器的損失函式,大多都採用如下式子定義:

關於GAN的個人理解
該式子是一個標準的交叉熵損失函式;這裡使用交叉熵可以有效的衡量真實資料的分佈和學習生成有效的分佈的差距,歸根到底就是統計學中散度的計算(該概念後續會進行總結)。對於生成起來說,我們期望D的交叉熵越小越好;

對於生成網路的損失函式,有兩種形式:

第一種是採用零和博弈。零和博弈從通俗理解就是拼個你死我活,你賺了我必然虧,我虧了多少你就賺多少;此時,G的代價函式就變為:

關於GAN的個人理解

此時,我們訓練的目的就是能夠使的生成器和判別器達到一個平衡點,也就是鞍點,使得兩者達到平衡;

但是關鍵點在於,這個方法理論上是可行,但是實踐使用很糟糕;因為當判別器訓練到一定程度,完全有把握的拒絕生成樣本時,生成器的梯度就會消失,這裡可以近似的認為生成模型和源資料你和之後,求導結果都為(1/2)'=0;

所以,就有第二博弈形式:非飽和博弈;

也就是將G的代價函式變為:

關於GAN的個人理解
從而使得D完美之後,G還可以繼續優化。詳細的數學推導這裡先不給出,後續補充;

相關文章