生成式對抗網路 NIPS 2016 課程 第 3 節

3 GANs 如何工作?

我們現在已經看過了幾種其他的生成式模型,並解釋了 GANs 與他們的不同原理。但是 GANs 是如何工作的呢?

3.1 GAN 框架

GANs 的基本思想是設置兩個參與人的博弈。其中一個是生成器(generator)。生成器產生來自和訓練樣本一樣的分布的樣本。另外一個判別器(discriminator)。判別器檢查這些樣本來確定他們是真實的還是偽造的。判別器使用傳統的監督學習技術進行訓練,將輸入分成兩類(真實的或者偽造的)。生成器訓練的目標就是欺騙判別器。我們可以將生成器當做一個偽鈔製造者,而判別器是警察,想要找出偽鈔。為了在這樣的博弈中取勝,偽鈔製造者必須學會製造出與真幣相似的偽鈔,生成器網路必須學會產生出和訓練數據一致的分布的樣本。圖 12 解釋了這個過程。

圖 12

形式上看,GANs 是一種結構化概率模型(參看 Goodfellow 等人書的第 16 章)包含了隱含變數 z 和可觀測變數 x。圖結構在圖 13 展示。

圖 13

博弈中的兩個參與人由兩個函數表示,每個都是關於輸入和參數可微分的。判別器是一個以 x 作為輸入和使用 	heta^{(D)}為參數的函數 D 定義。生成器由一個以 z 為輸入使用 	heta^{(G)}為參數的函數 G 定義。

兩個參與人有用兩個參與人的參數定義的代價函數。判別器希望僅控制住 	heta^{(D)} 情形下最小化 J^{(D)}( 	heta^{(D)}, 	heta^{(G)})。生成器希望在僅控制 	heta^{(D)} 情形下最小化 J^{(G)}( 	heta^{(D)}, 	heta^{(G)})。因為每個參與人的代價依賴於其他參與人的參數,但是每個參與人不能控制別人的參數,這個場景其實更為接近一個博弈而非優化問題。優化問題的解是一個局部最小,這是參數空間的點其鄰居有著不小於它的代價。而對一個博弈的解釋一個納什(Nash)均衡。這裡我們使用局部可微分納什均衡這個術語。在這樣的設定下,納什均衡是一個元組,( 	heta^{(D)}, 	heta^{(G)}) 既是關於	heta^{(D)}J^{(D)} 的局部最小值和也是關於  	heta^{(G)} J^{(G)}局部最小值。

生成器 生成器是一個可微分函數 G。當 z 從某個簡單的先驗分布中採樣出來時,G(z) 產生一個從 p_{	ext{model}} 中的樣本 x。一般來說,深度神經網路可以用來表示 G。注意函數 G 的輸入不需要和深度神經網路的第一層的輸入相同;輸入可能放在網路的任何地方。例如,我們可以將 z 劃分成兩個向量 z^{(1)}z^{(2)},然後讓 z^{(1)} 作為神經網路的第一層的輸入,將 z^{(2)} 作為神經網路的最後一層的輸入。如果 z^{(2)} 是 Gaussian,這就使得 x 成為 z^{(1)} 條件高斯。另外一個流行的策略是將雜訊加到或者乘到隱含層或者將雜訊拼接到神經網路的隱含層上。總之,我們看到其實對於生成式網路只有很少的限制。如果我們希望 p_{	ext{model}}x 空間的支集(support),我們需要 z 的維度需要至少和 x 的維度一樣大,而且 G 必須是可微分的,但是這些其實就是僅有的要求了。特別地,注意到使用非線性 ICA 方法的任何模型都可以成為一個 GAN 生成器網路。GANs 和變分自編碼器的關係更加複雜一點;一方面 GAN 框架可以訓練一些 VAE 不能的訓練模型,反之亦然,但是兩個框架也有很大的重合部分。 最為顯著的差異是,如果採用標準的反向傳播,VAEs 不能在生成器輸入有離散變數,而 GANs 不能夠在生成器的輸出層有離散變數。

訓練過程 訓練過程包含同時隨機梯度下降 simultaneous SGD。在每一步,會採樣兩個 minibatch:一個來自數據集的 x 的 minibatch 和一個從隱含變數的模型先驗採樣的 z 的 minibatch。然後兩個梯度步驟同時進行:一個更新  	heta^{(D)} 來降低 J^{(D)},另一個更新  	heta^{(G)} 來降低 J^{(D)}。這兩個步驟都可以使用你選擇的基於梯度的優化演算法。 Adam (Kingmaand Ba, 2014) 通常是一個好的選擇。很多作者推薦其中某個參與人運行更多步驟,但是在 2016 年的年末,本文作者觀點是最好的機制就是同時梯度下降,每個參與人都是一步。

3.2 代價函數

有幾種不同的代價函數可以用在 GANs 框架中。

3.2.1 判別器的代價 J^{(D)}

目前為 GANs 設計的所有不同的博弈針對判別器 J^{(D)} 使用了同樣的代價函數。他們僅僅是生成器 J^{(G)} 的代價函數不同。

判別器的代價函數是:

這其實就是標準的訓練一個 sigmoid 輸出的標準的二分類器交叉熵代價。唯一的不同就是分類器在兩個 minibatch 的數據上進行訓練;一個來自數據集(其中的標籤均是 1),另一個來自生成器(其標籤均是 0)。

GAN 博弈的所有版本都期望判別器能夠最小化(8)式。所有情況下,判別器有同樣最優策略。讀者現在可以嘗試一下 7.1 節的練習並在 8.1 節可以考到給出的答案。這個練習展示了如何去推到最優的判別器策略並討論了這個解的形式的重要性。

我們發現通過訓練這個判別器,能夠得到一個在每個點 x 對下面的比例的估計:

對其的估計可以讓我們計算很多的散度和梯度。這其實是將 GANs 和變分自編碼器和 Boltzmann machines 區分開的關鍵的近似技術。其他的深度生成式模型基於下界或者 Markov chain 進行近似;GANs 基於監督學習來估計兩個密度的比例來進行近似。GANs 近似受到監督學習的影響:過匹配或者欠匹配。原則上講,有最好的優化技術和足夠多的訓練數據,這些影響可以被克服。其他的模型使用不同的近似方法也有對應的缺點。

由於 GAN 框架可以被博弈論工具自然地分析,我們稱 GANs 「對抗」。但是我們同時也將其看做「合作」的,因為判別器估計密度之間的比例,然後自由地將這個信息分享給了生成器。從這一點看,判別器更加像是一名老師在教生成器如何提升效果。到目前為止,合作博弈的觀點還沒有產生特定的數學形式的變化。

3.2.2 Minimax

我們目前僅僅介紹了判別器的代價函數。而這個博弈需要的完整的說明包含對生成器的代價函數介紹。

最簡單的博弈版本是零和博弈,其中所有參與人的代價總是 0。在這個版本的博弈中,

因為 J^{(G)}J^{(G)} 直接捆綁,我們可以將整個博弈通過一個指定判別器收益的值函數來進行刻畫:

Minimax 博弈由於其理論分析的便利,大家都比較喜歡。Goodfellow et al. (2014b) 使用這個 GAN 博弈變體展示了在這個博弈中的學習類似於最小化數據分布和模型分布 Jensen-Shannon 散度,當所有參與人的策略可以在函數空間直接進行更新時,這個博弈將收斂到均衡點。特別地,參與人由深度神經網路表示,更新則是在參數空間中,所以這些依賴於凸性(convexity)的結論不能應用。

3.2.3 啟發式,非飽和博弈

在 minimax 博弈中用在生成器上的代價對理論分析很有用但是在實踐中表現很糟糕。

最小化目標類和分類器預測的分布的交叉熵是很高效的,因為代價不會在分類器有錯誤的輸出的時候飽和。最終代價會飽和到 0,但是僅僅是在分類器選擇了正確的類標的情況下。

在 minimax 博弈中,判別器最小化交叉熵,但是生成器是最大化同一個交叉熵。這對於生成器是不利的,因為判別器成功地以高置信度反對生成器產生的樣本時,生成器的梯度會消失。

為了解決這個問題,一種方式是繼續使用交叉熵來最小化生成器。不過我們不是去改變判別器代價函數的正負號來獲得生成器的代價。我們是將用來構造交叉熵代價的目標的正負號。所以,生成器的代價函數就是:

在 minimax 博弈中,生成器最小化判別器正確的對數概率。在這個博弈中,生成器最大化判別器錯誤的對數概率。

這個版本的博弈是啟發式激發的想法,而非理論上的考量。而唯一的動機就是確保每個參與人在他要輸掉博弈時有一個更強的梯度。

當然,這裡已經不再是零和博弈了,所以不能被描述成一個單一值函數。

3.2.4 最大似然博弈

我們可能能夠使用 GANs 進行最大似然學習,這就意味著可以最小化數據和模型之間的 KL 散度,見(4)。

在第 2 節中,為了簡化模型之間的對比,我們提到 GANs 可以選擇性地實現最大似然。

有很多中方式能夠使用 GAN 框架來近似(4)式。 Goodfellow (2014) 使用下式:

其中 sigma 是 logistic sigmoid 函數,等價於在假設判別式最優的情形下最小化(4)式。這個等價關係依照期望的形式成立;實踐中,對 KL 散度進行隨機梯度下降和GAN 訓練過程由於通過採樣(x 為最大似然而 z 為GANs)來構造期望梯度將會按照某個方差在真實的期望梯度附近。這個等價關係可以作為一個練習(參見 7.3 節練習,8.3 節答案)。

另外還有一些近似最大似然的方法。比如說 Nowozin et al. (2016).

3.2.5 選擇散度是 GANs 的突出特點么?

作為我們討論 GANs 如何工作的一部分,大家可能想知道什麼讓 GANs 能夠產生更好的樣本。

以前,很多人(包括作者本人)相信 GANs 能夠產生清晰真實的圖片是由於他們最小化了數據和模型之間的 Jensen-Shannon 散度而 VAEs 產生模糊的圖片是其最小化 KL 散度 造成的。

KL 散度不是對稱的;最小化 D_{	ext{KL}}(p_{	ext{data}} || p_{	ext{model}})D_{	ext{KL}}(p_{	ext{model}} || p_{	ext{data}}) 並不相同。最大似然估計執行的是前者,而最小化 Jensen-Shannon 散度某種程度上是後者。正如圖 14 所示,後者可能會期望得到更好的樣本因為使用這個散度訓練的模型更傾向於生成僅僅來自訓練分布的眾數(mode)樣本即使會忽略一些眾數,而不是包含所有的眾數但是生成不來自任何訓練數據眾數的一些樣本。

某些更新的證據表明使用 Jensen-Shannon 散度並沒有解釋為何 GANs 得到更加清晰的圖片:

圖 15

  • 3.2.4 節提到現在可以使用最大似然來訓練 GANs 了。這些模型也能夠產生清晰的樣本,並且也選擇了少量的眾數。參見圖 15.
  • GANs 通常會從極少量的眾數中選擇生成;小於由模型容量帶來的限制。逆 KL 傾向於生成和模型能夠容納的那麼多的數據分布的眾數;一般不會是更少的眾數。這就意味著眾數坍縮是由於散度之外的因素導致。

總之,GANs 由於訓練過程的問題選擇生成小量的眾數,並不是選擇最小化的散度導致。在 5.1.1 節會進行討論。GANs 產生更加清晰的樣本的原因還很模糊。可能是使用 GANs 訓練的模型族和使用 VAEs 訓練的模型族不同(例如,用 GANs 很容易使得模型的 x 有更加複雜的分布而不僅僅是一個各向同性 isotropic 高斯條件分布在生成器的輸入上)可能是 GANs 的近似的類型有這個不同於其他框架使用的近似導致的效果。

3.2.6 代價函數的比對

我們可以講生成式網路看成是一個特別的強化學習。不是被告知一個具體的輸出 x 應該被關聯上每個 z,生成器採取行動並接受獎勵。特別是,注意到 J^{(G)} 沒有直接引用訓練數據,所有關於訓練數據的信息都僅是從判別器所學到的獲得。(巧的是,這會讓 GANs 不再害怕過匹配,因為生成器不能夠直接複製訓練樣本)學習過程和傳統的強化學習也有一點差異:

  • 生成器能夠同時觀察獎勵函數的輸出和梯度
  • 獎勵函數不是靜止的,獎勵是基於學習生成器策略的變化的判別器的。

在所有的情形中,我們可以將採樣過程看做是從一個特定 z 選擇開始作為一個 可以獲得獎勵的 episode,而獨立的行動對所有其他的 z 的值進行選擇。給於生成器的獎勵就是一個單個標量值的函數,D(G(z))。我們通常將這個用代價(負的代價)表示。生成器的代價總是在 D(G(z)) 中單調下降的,但是不同的博弈設計成讓這個代價沿著曲線不同的部分下降更快。

圖 16

圖 16 展示了三個不同 GANs 的作為 D(G(z)) 函數的代價反應曲線。我們看到最大似然博弈結果是很高方差,大多數代價梯度來自很少的樣本 z 對於那些更可能是真的樣本。這個啟發式設計的非飽和代價有低的樣本方差,這就可能解釋為何在實踐中更加成功了。因為這表明方差降低技術可以成為一個提升 GANs 性能的重要的研究領域,特別是基於最大似然的 GANs。

圖 17

3.3 DCGAN 架構

大多數 GANs 或多或少是基於 DCGAN 架構的 (Radford et al., 2015). DCGAN 全稱「deep, convolution GAN」。儘管 GANs 在 DCGANs 前也是深的和卷積的,不過 DCGAN 就用來代表這一類風格的架構了。DCGAN 架構的關鍵點如下:

  • 使用批規範化 Batch Normalisation,簡稱 BN (Ioffe and Szegedy, 2015) 層,在判別器和生成器中大多數層是 BN 的,有兩個獨立的 minibatch。生成器最後一層和判別器的第一層沒有 BN,所以模型可以學到數據分布的正確的均值和尺度。參加圖 17。
  • 總體網路結構師從 all-convolutional net(Springenberg et al., 2015). 這個架構不含有 pooling 或者 unpooling 層。當生成器需要增加空間維度是,它使用了 stride 大於 1 的轉置卷積。
  • 使用 Adam 優化器而不是 SGD with momentum

圖 18

在 DCGANs 前,LAPGANs 是唯一一個能規劃化到高解析度圖像的 GAN。LAPGANs 需要一個多步驟生成過程,多個 GANs 產生在一個圖像的 Laplacian 金字塔表示不同細節的層。DCGANs 是第一個學會單步生成高解析度圖像的 GAN。正如圖 18 所示,DCGANs 在限制的圖像領域能夠產生高質量的圖像,比如說卧室的圖像。DCGANs 同樣能夠展示 GANs 學會以很多有意義的方式來使用他們的隱含編碼,隱含空間中的簡單的算術運算也有了語義上的意義,比如圖 19 所示。

圖 19

3.4 GANs 和 noise-contrastive 估計和最大似然有什麼關聯?

在理解 GANs 工作原理時,大家很自然地想了解他們和 noise contrastive estimation(NCE) (Gutmannand Hyvarinen, 2010)的關聯。Minimax GANs 使用 NCE 的代價函數作為值函數,所以這兩個方法看起來緊密關聯。但實際上,他們學到的非常不同的東西,因為兩個方法關注博弈中的不同參與人。粗略地說,NCE 的目標是學習判別器的密度模型,GANs 則是學習定義生成器的採樣器。儘管這兩個任務看起來在相近,其梯度完全不同。令人驚奇的是,最大似然是和 NCE 更為相近的,對應於進行一個用同樣的值函數的 minimax 博弈,但是使用啟發式更新策略而不是對參與人其中之一進行梯度下降。這個在圖 20 中進行了總結。

圖 20
推薦閱讀:

Python · 神經網路(零)· 簡介
譯文:機器學習的首要條件不是數學而是數據分析
零基礎學習Python數據挖掘(修改版)
用 TensorFlow 訓練 Doom 機器人
機器學習領域,如何選擇研究方向?

TAG:生成对抗网络GAN | 深度学习DeepLearning | 机器学习 |