Generative Adversarial Nets

說明:以下內容是自己看論文的一些拙見,如有錯誤請指正。

《Generative Adversarial Nets》是Goodfellow大神在受到“二人零和博弈”的影響之後寫出的GAN的開山之作。
GAN的基本原理比較簡單:假設我們有兩個模型,一個用來捕獲數據分佈的生成模型G(Generator)和一個用來估計樣本來自訓練數據而不是G的概率的判別模型D(Discriminator),G的訓練過程是最大化D產生錯誤的概率。

以上是原文中所描述的內容,比較難以直接理解。做如下通俗解釋:
G:是一個生成圖片的網絡,它接收一個隨機的噪聲z,通過這個噪聲生成圖片,記做G(z)。
D:是一個判別網絡,判別一張圖片是不是“真實的”。它的輸入參數是x,x代表一張圖片,輸出D(x) 代表x爲真實圖片的概率,如果爲1,就代表100%是真實的圖片,而輸出爲0,就代表不可能是真實的圖片。
而G的訓練過程就是儘可能的生成與真實圖片相一致的圖片,並讓D相信它是真的;D的訓練過程就是儘可能的區分一張圖片是真實圖片或G生成圖片。在D和G的訓練過程中,就構成了一個動態的博弈。

最後博弈的結果是什麼?在最理想的狀態下,G可以生成足以“以假亂真”的圖片G(z)。對於D來說,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) = 0.5。
下面的圖片很好的描述了這個過程:
這裏寫圖片描述

用數學公式來表示,D和G的訓練是關於值函數V(G,D)的極小化極大的二人博弈問題:
這裏寫圖片描述

G希望自己生成的圖片“越接近真實越好”。也就是說,G希望D(G(z))儘可能得大,這時V(D, G)會變小。因此我們看到式子的最前面的記號是min_G。
D的能力越強,D(x)應該越大,D(G(x))應該越小。這時V(D,G)會變大。因此式子對於D來說是求最大(max_D)

以上的訓練過程看起來很清晰,我們只需要兩步就能得到真實數據的分佈,但現實中卻並非如此。

第一,我們的 generator 並不是一個真正的「生成樣本」的分佈,通常我們的用作 generator 的模型的 capacity 都是有限的,它很大可能只是生成了所謂「生成樣本流形」中一個子流形。所以如果我們用這樣的 generator 生成的樣本和真實樣本去訓練 D ,是不可能得到真正的 P(c|X) 的(關於這個概率,意思就是說在圖片是真實圖片的情況下,D判斷其爲真的概率),直覺上而言,因爲這樣的 discriminator 只能把一個子流形與真實樣本模型分開,所以這個 discriminator 可能太「鬆」。

第二,D 的 capacity 也有限。

所以,在現實中,我們沒法用兩步優化就得到真實樣本的概率分佈。論文裏提出了一種交替優化的方法解決這個問題。
這裏寫圖片描述

第一步我們訓練D,用 SGD ,先對做 k 步等式(1)內部最大化。D是希望V(G, D)越大越好,所以是加上梯度(ascending)。第二步訓練G時,外部的最小化。V(G, D)越小越好,所以是減去梯度(descending)。整個訓練過程交替進行。D 每次優化都達到最優的時候,G 學習到的概率分佈收斂於真實分佈。

這裏寫圖片描述

圖1.訓練對抗的生成網絡時,同時更新判別分佈(D,藍色虛線)使D能區分數據生成分佈px(黑色虛線)中的樣本和生成分佈pg (G,綠色實線) 中的樣本。下面的水平線爲均勻採樣z的區域,上面的水平線爲x的部分區域。朝上的箭頭顯示映射x=G(z)如何將非均勻分佈pg作用在轉換後的樣本上。G在pg高密度區域收縮,且在pg的低密度區域擴散。(a)考慮一個接近收斂的對抗的模型對:pg與pdata相似,且D是個部分準確的分類器。(b)算法的內循環中,訓練D來判別數據中的樣本,收斂到:D∗(x)=pdata(x)/[pdata(x)+pg(x)]。(c)在G的1次更新後,D的梯度引導G(z)流向更可能分類爲數據的區域。(d)訓練若干步後,如果G和D性能足夠,它們接近某個穩定點並都無法繼續提高性能,因爲此時pg=pdata。判別器將無法區分訓練數據分佈和生成數據分佈,即D(x)=1/2。

當訓練剛開始時候,D(G(z)) 很小,這時候 log(1-D(G(z))) 趨向飽和,而 logD(G(z)) 的導數卻很可觀,所以與其最小化 log(1-D(G(z))) 不如最大化 logD(G(z)) 。

剩下關於對算法的證明 ,文章中講的很詳細,不贅述。

發佈了31 篇原創文章 · 獲贊 12 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章