常見的五種神經網絡(5)-生成對抗網絡(下)之GAN、DCGAN、W-GAN

在上一篇文章中介紹了生成模型的基本結構、功能和變分自動編碼器,在本篇文章中主要介紹一下生成對抗網絡(Generative Adversaarial Networks,GAN)

KL散度、JS散度、Wassertein距離

KL散度

KL散度又稱相對熵,信息散度,信息增益。KL散度是兩個概率分佈P和Q差別的非對稱性的度量。在經典境況下,P表示數據的真實分佈,Q表示數據的理論分佈,模型分佈。

DKL(PQ)=i=1nPilog(PiQi) D_{KL}(P \parallel Q)= \sum_{i=1}^{n}P_i log(\frac{P_i}{Q_i})

JS散度

JS散度是度量兩個概率分佈的相似度,是基於KL散度的變體,解決了KL散度非對稱的問題。
DJS(PQ)=12DKL(PP+Q2)+12DKL(QP+Q2) D_{JS}(P \parallel Q)=\frac{1}{2} D_{KL}(P \parallel \frac{P+Q}{2}) + \frac{1}{2} D_{KL}(Q \parallel \frac{P+Q}{2})
KL散度和JS散度度量的時候都有一個問題:如果兩個分佈P,Q距離較遠,完全沒有重疊的時候,KL散度是沒有意義的,在學習的時候,這就意味着在這一點的梯度爲0,即梯度消失了。

Wassertrin距離

Wasserstein距離度量的是兩個管理分佈之間的距離。
W(P,Q)=infγ(P,Q)E(x,y)γ[xy] W(P,Q) = \underset{\gamma \sim \prod (P, Q) }{inf} E_{(x,y) \sim \gamma} \left [ ||x-y|| \right ]
其中(P,Q)\prod (P, Q)是邊際分佈爲PPQQ的所有可能的聯合分佈集合。

顯式和隱式密度模型

在上一篇文章中介紹的變分自動編碼器,之前介紹的深度信念網絡都是顯式的構建樣本的密度函數p(xθ)p(x|\theta),並通過最大似然估計來求解參數,稱之爲顯式密度模型(Explicit Density Model)

如果只是希望有一個模型能生成符合數據分佈pr(x)p_r(x)的樣本,那麼可以不顯式地估計出數據分佈的密度函數。假設在低維空間ZZ中有一個簡單容易採樣的分佈p(z)p(z)p(z)p(z)通常爲標準多元正態分佈N(0,1)N(0,1)。我們使用神經網絡構建一個映射函數G:ZXG: Z \rightarrow X稱爲生成網絡。利用神經網絡強大的擬合能力,使得G(z)G(z)服從數據分佈pr(x)p_r(x)。這種模型就稱爲隱式密度模型(Implicit Density Model)。所謂隱式模型就是指並不顯示地建模pr(x)p_r(x),而是建模生成過程。

網絡分解與訓練

判別網絡

隱式密度模型的一個關鍵是如何確保生成網絡產生的樣本一定是服從真實的數據分佈。既然我們不構建顯式密度模型,就無法通過最大似然估計等方法來訓練。

生成對抗網絡(Generative Adversarial Networks,GAN)是通過對抗訓練的方式來使得生成網絡產生的樣本服從真實數據分佈。在生成對抗網絡中,有兩個網絡進行對抗訓練。一個是判別網絡,目標是儘量準確地判斷一個樣本是來自於真實數據還是生成網絡產生的;另一個是生成網絡,目標是儘量生成判別網絡無法區分來源的樣本。這兩個目標相反的網絡不斷地進行交替訓練。當最後收斂時,如果判別網絡再也無法判斷出一個樣本的來源,那麼也就等價於生成網絡可以生成符合真實數據分佈的樣本。生成對抗網絡的流程圖如下圖所示:

生成對抗網絡的流程圖

判別網絡(Discriminator Network)D(x,ϕ)D(x,\phi) 的目標是區分出一個樣本xx是來自於真實分佈pr(x)p_r(x)還是來自於生成模型pθ(x)p_{\theta}(x),因此判別網絡實際上一個兩類分類器。用標籤y=1y=1來表示樣本來自於真實分佈,y=0y=0表示樣本來自模型,判別網絡的D(x,ϕ)D(x,\phi)的輸出爲xx屬於真實數據分佈的概率,即:
p(y=1x)=D(x,ϕ) p(y=1|x)=D(x, \phi)
則樣本來自模型生成的概率位p(y=0x)=1D(x,ϕ)p(y=0|x)=1-D(x, \phi)

給定一個樣本(x,y),y={1,0}(x,y),y=\{1,0\}表示其是來自於pr(x)p_r(x)還是pθ(x)p_{\theta}(x),判別網絡的目標函數爲最小化交叉熵,即最大化對數函數(公式1-1)。
minϕ=(Ex[ylog  p(y=1x)+(1y)log  p(y=0x)])=maxϕ(Expr(x)[log  D(x,ϕ)]+Ezp(z)[log(1D(G(z,θ),ϕ))]) \underset{\phi}{min} = \left ( E_x[y log \,\, p(y=1 | x) + (1-y) log \,\, p(y=0|x) ] \right ) \\ = \underset{\phi}{max} \left ( E_{x\sim p_r(x)} [log \,\, D(x, \phi)] + E_{z\sim p(z)}[ log (1-D(G(z,\theta), \phi))] \right )

其中θ,ϕ\theta, \phi分別是生成網絡和判別網絡的參數。

生成網絡

生成網絡(Generator Network) 的目標剛好和判別網絡相反,即讓判別網絡將自己生成的樣本判別爲真實樣本。其目標函數如下(公式1-2):
maxθ(Ezp(z)[log  D(G(z,θ),ϕ)])=minθ(Ezp(z)[log  (1D(G(z,θ),ϕ))]) \underset{\theta}{max} \left ( E_{z\sim p(z)} [log \,\, D(G(z , \theta), \phi)] \right ) \\ = \underset{\theta}{min} \left ( E_{z\sim p(z)} [log \,\, (1-D(G(z , \theta), \phi))] \right )
上面的這兩個目標函數是等價的。但是在實際訓練時,一般使用前者,因爲其梯度性質更好。我們知道,函數log(x),x(0,1)log(x), x\in (0,1)xx接近1時的梯度要比接近0時的梯度小很多,接近飽和區間。這樣,當判別網絡DD以很高的概率認爲生成網絡GG產生的樣本是“假”樣本,即(1D(G(z,θ),ϕ))1(1-D(G(z, \theta), \phi)) \rightarrow 1。這時目標函數關於θ\theta的梯度反而很小,從而不利於優化。

網絡訓練

在生成對抗網絡的訓練過程中,需要平衡兩個網絡的能力。對於判別網絡來說,一開始的判別能力不能太強,否則難以提升生成網絡的能力。然後也不能太弱,否則針對他訓練的生產網絡也不會太好。在訓練時需要使用一些技巧,使得在每次迭代中,判別網絡臂生成網絡的能力強一些,但又不能強太多。

生成對抗網絡的訓練流程如下所示,每次迭代時,判別網絡更新KK次而生成網絡更新一次,即首先要保證判別網絡足夠強才能開始訓練生成網絡。在實踐中KK是一個超參數,其取值一般取決於具體任務。

生成對抗網絡的訓練流程

DCGAN

DCGAN介紹

生成對抗網絡是指一類採用對抗訓練方式來進行學習的深度生成模型,其包含的判別網絡和生成網絡都可以根據不同的生成任務使用不同的網絡結構。

在深度卷積生成對抗網絡(Dee Convolutional Generative Adversarial Neteorks,DCGAN)中,判別網絡是一個傳統的深度卷積網絡,但使用了帶步長的卷積來實現下采樣操作,不用最大匯聚(pooling)操作。生成網絡使用一個特殊的深度卷積網絡來實現,如下圖所示,使用微步卷積來生成64x63大小的圖像。

DCGAN中的生成網絡

上圖中,第一層是全連接層,輸入是從均勻分佈中隨機採樣的100維向量zz,輸出是4x4x1024的向量,重塑爲4x4x1024的張量,然後是四層的微步卷積,沒有匯聚層。

DCGAN的主要優點是通過一些經驗性的網絡結構設計使得對抗訓練更加穩定。比如:

  • (1)使用代步長的卷積(在判別網絡中)和微步卷積(在生成網絡中)來代替匯聚操作,以免損失信息
  • (2)使用批量歸一化
  • (3)去除卷積層之後的全連接層
  • (4)在生成網絡中,除了最後一層使用Tanh激活函數外,其餘層都使用ReLU函數
  • (5)在判別網絡中,都適用LeakyReLU激活函數

模型分析

將判別網絡和生成網絡合並,整個生成對抗網絡得整個目標函數看作最小最大化遊戲(Minimax Game),表達式如下(1-3):
minθmaxϕ(Expr(x)[log  D(x,ϕ)]+Expθ(x)[log  (1D(x,ϕ))]) \underset{\theta}{min} \, \underset{\phi}{max}\left ( E_{x \sim p_r{(x)}} \left [ log\,\, D(x, \phi) \right ] + E_{x \sim p_{\theta}(x)} \left [ log\,\,(1- D(x, \phi)) \right ] \right )
因爲之前提到的生成網絡梯度問題,這個最小化最大化形式的目標函數一般用來進行理論分析,並不是實際訓練時的目標函數。

假設pr(x)p_r(x)pθ(x)p_{\theta}(x)已知,則最優得判別器爲:
D(x)=pr(x)pr(x)+pθ(x) D^*(x) = \frac{p_r(x)}{p_r(x) + p_{\theta}(x)}
將最優得判別器D(x)D^*(x)代入公式1-3,則目標函數變爲(公式1-4):
L(GD)=Expr(x)[log  D(x)]+Expr(θ)[log  (1D(x))]=2DJS(prpθ)2log2 L(G|D^*) = E_{x \sim p_r{(x)}} \left [ log\,\, D^*(x) \right ] + E_{x \sim p_r{(\theta})} \left [ log\,\,(1- D^*(x)) \right ] \\ = 2D_{JS}(p_r||p_{\theta}) - 2log2
其中DJSD_{JS}爲JS散度。

在生成對抗網絡中,當判別網絡爲最優時,生成網絡的優化目標是最小化真實分佈prp_r和模型分佈pθp_{\theta}之間得JS散度。當兩個分佈相同時,JS散度爲0,最優生成網絡GG^*對應得損失爲L(GD)=2log2L(G^*|D^*)=-2log2

然而JS散度的一個問題是:當兩個分佈沒有重疊時,他們之間得JS散度恆等於常數log2。對生成網絡來說,目標函數關於參數的梯度爲0。
L(GD)θ=0 \frac{ \partial L(G|D^*) }{ \partial \theta} =0
下圖給出了生成對抗網絡中的梯度消失問題的示例。當真實分佈prp_r和模型分佈pθp_{\theta}沒有重疊,最優的判斷網對對所有生成數據得輸出都爲0,D(G(z,θ))=0,zD^*(G(z, \theta))=0, \forall z。因此生成網絡得梯度消失。

生成網絡中得梯度消失問題

在實際訓練生成對抗網絡時,我們一般不會將判別網絡訓練到最優,只進行一步或多步梯度下降,使得生成網絡的梯度依然存在。然而,判別網絡也不能太差,否則生成網絡的梯度爲錯誤的梯度。如何使得判別網絡在梯度消失和梯度錯誤之間取得平衡並不是一件容易的事。

模型坍塌

如果使用公式1-2作爲生成網絡的目標函數,將最優判斷網絡DD^*代入,得到:
L(GD)=Expθ(x)[logD(x)]=Expθ(x)[logpr(x)pr(x)+pθ(x)pθ(x)pθ(x)]=Expθ(x)[logpθ(x)pr(x)]+Expθ(x)[logpr(x)pr(x)+pθ(x)]=DKL(pθpr)+Expθ(x)[log(1D(x))]=DKL(pθpr)+2DJS(prpθ)2log2Expr(x)[logD(x)] L'(G|D^*) = E_{x \sim p_{\theta}(x)} \left [ log \, D^*(x) \right ] \\ = E_{x \sim p_{\theta}(x)} \left [ log \, \frac {p_r(x)}{p_r(x) + p_{\theta}(x) } \cdot \frac{p_{\theta}(x) }{p_{\theta}(x) } \right ] \\ = - E_{x \sim p_{\theta}(x)}\left [ log \, \frac{p_{\theta}(x)}{p_r(x)} \right ] + E_{x \sim p_{\theta}(x)} \left [ log \, \frac {p_r(x)}{p_r(x) + p_{\theta}(x) } \right ] \\ = -D_{KL}(p_{\theta} || p_r) + E_{x \sim p_{\theta}(x)} \left [ log (1-D^*(x)) \right ] \\ = -D_{KL}(p_{\theta} || p_r) + 2D_{JS}(p_r || p_{\theta})-2log2 - E_{x \sim p_r(x)} \left [ log \, D^* (x) \right ]

其中後兩項和生成網絡無關,因此:
maxθL(GD)=minθDKL(pθpr)2DJS(prpθ) \underset{ \theta }{ max } L'(G | D^*) =\underset{ \theta }{ min } D_{KL} (p_{\theta} || p_r) - 2D_{JS} (p_r || p_{\theta} )
其中JS散度和DJS(pθpr)[0,log2]D_{JS}(p_{\theta} || p_r) \in [0, log 2]爲有界函數,因此生成網絡的目標是爲更多的受逆向KL散度DKL(pθpr)D_{KL}(p_{\theta} || p_r)影響,使得生成網絡更傾向於生成一些更安全的樣本,從而造成**模型坍塌(Model Collapse)**問題

前向和逆向KL散度

KL散度是一種非對稱的散度,在計算真實分佈prp_r和模型分佈pθp_{\theta}之間得KL散度時,按照順序不同,有兩種KL散度:前向KL散度(Forward KL divergence)DKL(prpθ)D_{KL}(p_r || p_{\theta}) 和逆向KL散度(Reverse KL divergence)DKL(pθpr)D_{KL}(p_{\theta} || p_r)

前向和逆向KL散度分別定義爲:
DKL(prpθ)=pr(x)logpr(x)pθ(x)dxDKL(pθpr)=pθ(x)logpθ(x)pr(x)dx D_{KL}(p_r || p_{\theta}) = \int p_r(x) log\, \frac{p_r(x)}{p_{\theta}(x)}dx \\ D_{KL}(p_{\theta} || p_r) = \int p_{\theta}(x) log\, \frac{p_{\theta}(x)}{p_r(x)}dx
在前向KL散度中:

  • (1)當pr(x)0p_r(x) \rightarrow 0pθ(x)>0p_{\theta}(x)> 0時,pr(x)logpr(x)pθ(x)0p_r(x) log\, \frac{p_r(x)}{p_{\theta}(x)} \rightarrow 0。不管pθ(x)p_{\theta}(x)如何取值,都對前向KL散度的計算沒有貢獻。
  • (2)當pr(x)>0p_r(x) > 0pθ(x)0p_{\theta}(x) \rightarrow 0時,pr(x)logpr(x)pθ(x)p_r(x) log\, \frac{p_r(x)}{p_{\theta}(x)} \rightarrow \infty。前向KL散度會變得非常大。

因此,前向KL散度會鼓勵模型分佈pθ(x)p_{\theta}(x)儘可能的覆蓋所有真實分佈pr(x)>0p_r(x)>0的點,而不用迴避pr(x)0p_r(x)\approx 0的點。

在逆向KL散度中:

  • (1)當pr(x)0p_r(x) \rightarrow 0pθ(x)>0p_{\theta}(x)> 0時,pθ(x)logpθ(x)pr(x)p_{\theta}(x) log\, \frac{p_{\theta}(x)}{p_r(x)} \rightarrow \infty。即當pθ(x)p_{\theta}(x)接近於0,而pθ(x)p_{\theta}(x)有一定的密度時,逆向KL散度會變得非常大。
  • (2)當pθ(x)0p_{\theta}(x) \rightarrow 0, 不管 pr(x)p_r(x)如何取值,pθ(x)logpθ(x)pr(x)0p_{\theta}(x) log\, \frac{p_{\theta}(x)}{p_r(x)} \rightarrow 0

因此逆向KL散度會鼓勵模型分佈pθ(x)p_{\theta}(x)儘可能避開所有真實分佈pr(x)0p_r(x)\approx 0的點,而不需要考慮是否覆蓋所有分佈爲pr(x)>0p_r(x) > 0的點。

下圖給出數據真實分佈爲一個高斯混合分佈,模型分佈爲一個旦高斯分佈時,使用前向和逆向KL散度來進行模型優化的示例,藍色曲線爲真實分佈prp_r的等高線,紅色曲線爲模型分佈pθp_{\theta}的等高線。

前向和逆向KL散度

W-GAN

W-GAN是一種通過使用Wassertein距離替代JS散度來優化訓練的生成對抗網絡。對於真實分佈prp_r和模型分佈pθp_{\theta},他們的1st-wassertein距離爲:
W1(pr,pθ)=infγ(Pr,Pg)E(x,y)γ[xy] W^1(p_r,p_{\theta}) = \underset{\gamma \sim \prod (P_r, P_g) }{inf} E_{(x,y) \sim \gamma} \left [ ||x-y|| \right ]
其中(Pr,Pg)\prod (P_r, P_g)是邊際分佈爲prp_rpθp_{\theta}的所有可能的聯合分佈集合。

當兩個分佈沒有重疊或者重疊非常少時,他們之間的KL散度爲++ \infty,JS散度爲log2,並不隨着兩個分佈之間的距離而變化。而1st-wassertein距離可以依然衡量兩個沒有重疊分佈的距離。

W-GAN的目標函數爲:
maxθEzp(z)[f(G(z,θ),ϕ)] \underset{\theta}{ max } E_{z \sim p(z)} \left [ f(G(z, \theta), \phi) \right ]
因爲f(x,ϕ)f(x, \phi)爲不飽和函數,所以生成網絡參數θ\theta的梯度不會消失,理論上解決了原始GAN訓練不穩定的問題。並且W-GAN中生成網絡的目標函數不再是兩個分佈的比率,在一定程度上緩解了模型坍塌問題,使得生成的樣本具有多樣性。

下圖給出了W-GAN的訓練過程,和原始GAN相比,W-GAN的評價網絡最後一層不使用sigmoid函數,損失函數不取對數。

W-GAN的訓練過程

總結

深度生成模型是一種有機地融合神經網絡和概率圖模型的生成模型,將神經網絡作爲一個概率分佈的逼近器,可以擬合非常複雜的數據分佈。

變分自編碼器是一個有意義的深度生成模型,可以有效地解決含隱變量的概率模型中後驗分佈難以估計的問題。

生成對抗網絡是一個具有開創意義的深度生成模型,突破了以往的概率模型必須通過最大似然估計來學習參數的限制。DC-GAN是一個生成對抗網絡的成功實現,可以生成十分逼真的自然圖像。對抗生成網絡的訓練不穩定問題的一種有效解決方法是W-GAN,通過用 Wassertein 距離替代 JS 散度來進行訓練。

雖然深度生成模型取得巨大的成功,但是作爲一種無監督模型,其主要的缺點是缺乏有效的客觀評價,因此不同模型之間的比較很難客觀衡量。


掃一掃 關注微信公衆號!號主 專注於搜索和推薦系統,嘗試使用算法去更好的服務於用戶,包括但不侷限於機器學習,深度學習,強化學習,自然語言理解,知識圖譜,還不定時分享技術,資料,思考等文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章