您當前的位置:首頁 > 詩詞

當我們在談論 Deep Learning:GAN 與 WGAN

作者:由 余文毅 發表于 詩詞時間:2017-09-16

本系列意在長期連載分享,內容上可能也會有所增刪改減;

因此如果轉載,請務必保留源地址,非常感謝!

知乎專欄:當我們在談論資料探勘

引言

GAN(Generative Adversarial Networks)於2014年由 Lan Goodfellow 提出,被 Yann LeCun 譽為“The coolest idea in deep learning in the last 20 years”。事實上,由於 GAN 獨特的思路與驚人的實驗效果,它自提出就受到廣泛關注,用了不到兩年的時間,卷席各種 AI 頂會,方興未艾;另一方面,經過這些年的發展,GAN 依然很不完善,大部分時候只是 TOY 一般的存在。因此,本文會介紹迄今(2017年)部分基礎或廣泛認可的 GAN 理論與結構,需要進一步瞭解的同學需得長期跟進相關論文。

GAN

GAN(Generative Adversarial Networks)最初在“Goodfellow I J, Pougetabadie J, Mirza M, et al。 Generative Adversarial Networks。2014”中被提出,是一種無監督的生成模型演算法。我們先從概念上進行簡單介紹。

在AutoEncoder 及其相關模型中,介紹過生成模型的本質就是對

p(x)

進行建模,此時一般方法會選定模型並用最大似然學習引數。GAN 與一般生成模型最主要的區別就在於此:

GAN 並不顯式地對

p(x)

建模,而試圖利用一個 Generator(G) 來學習出資料的分佈

在判斷學習出的模型的優劣時,它也並不直接給出誤差計算函式,而同樣試圖用 Discriminator(D) 來自動判斷模型的優秀程度

可以看出,GAN 其實跟 DL 領域的趨勢是一致的,即將 人工選擇複雜模型 的風險轉移到 簡單模型+人工最佳化引數 上;而且更進一步,具有一定博弈的意味。當然,這只是感性的說法,下面我們更深入地看看 GAN。

首先,GAN 要最佳化的目標如下

\begin{align} & \min_G \max_D V(D, G) \\ & V(D, G) = E_{x \sim P_{data}(x)}[log D(x)] + E_{x \sim P_{z}(z)}[log(1-D(G(z)))] \\ \end{align}

透過迭代訓練 Generator 和 Discriminator 來訓練 GAN,方法依然是 BP,具體流程如下

當我們在談論 Deep Learning:GAN 與 WGAN

當我們在談論 Deep Learning:GAN 與 WGAN

目標函式的初步理解

看過DNN 與它的引數們(貳)的同學對 Binary Cross Entropy Loss 應該不會陌生,它是 DNN 中最常用的 Loss Function 之一,其定義為

C(y, \hat y)=-\hat ylog(y)-(1-\hat y)log(1-y)

其中,

\hat y

代表資料真實 label,

\hat y\in\{0,1\}

y

為預測。

可以看出,對於 GAN 中的 Discriminator 和 Generator,本質上都是在最佳化平均 Binary Cross Entropy Loss(更準確的說是 Binary Cross Entropy Loss 取反)。證明過程較簡單,這裡不再贅述。

對於 Discriminator 的訓練大家都輕車熟路了,沒啥區別。但是對於 Generator,GAN 的最佳化目標問題在於,當

D(G(z))

接近1,即 Discriminator 基本能正確分辨真實與生成的資料時,Generator 就會出現 Gradient Vanish 問題,從而停止進化。這種情況發生的原因一般為:

訓練初期,Generator 較弱,Discriminator 很容易就能區分出真實資料與隨機資料,Generator 會 Gradient Vanish

訓練中期,若 Discriminator 能力遠超於同期 Generator,則 Generator 會 Gradient Vanish

訓練流程的理解

GAN 的訓練過程有兩點比較重要:

輸入隨機噪聲,期望透過訓練讓 Generator 產生以假亂真的資料,本質是希望 Generator 能將隨機噪聲的分佈

p(z)

對映到真實資料的分佈

p(x)

迭代訓練 Generator 和 Discriminator,期間需保持它們能力相近(否則會出現 Gradient Vanish,如上述),期望最後能達到“納什均衡”。此時雖然

p(x)

顯式表示式依然未知,但可以利用 Generator 對資料進行取樣,以產生訓練樣本集中沒有的資料

關於第1點,以下給出理論上 Generator 能將隨機噪聲的分佈

p(z)

對映到真實資料的分佈

p(x)

的簡單證明,基本是機率論基礎

\begin{align} p(x) &= \int_z p(x,z) dz \\ &= \int_z p(x|z)p(z)dz \\ &= \int_z I_{G(z)=x}p(z)dz \\ \end{align}

關於第2點,就不太樂觀了,可能會出現 Non-Convergence 的問題。如Lan Goodfellow 在 Quora 中的回答所說,“所有的理論都認為 GAN 應該在納什均衡上有卓越的表現,但梯度下降只有在凸函式的情況下才能保證納什均衡。當博弈雙方都由神經網路表示時,在沒有實際達到均衡的情況下,讓它們永遠保持對自己策略的調整是可能的。”

目標函式的進一步理解

限於篇幅,這部分的推導均會省略,有興趣的同學可以查閱原文或相關文獻。

前文介紹了 GAN 的訓練是迭代訓練 Discriminator 和 Generator,且最佳化的目標是 Binary Cross Entropy Loss。接下來我們來考慮某一輪的訓練,當前時刻的 Discriminator 和 Generator 分別是 D 和 G,我們需要先訓練出新的

D^*

,滿足

D^* = \max_D V(D, G)

對於給定樣本

x

,對它而言最好的

D^*(x)

會是

D^{*}(x) = argmax_D P_{data}(x)log(D(x))+P_G(x)log(1-D(x))

其結果為

D^{*}(x) = \frac {P_{data}(x)}{P_{data}(x)+P_G(x)}

將其帶入

V(D, G)

,可以化簡得到

V(D_*, G) = -2log2 + JSD(P_{data}(x)||P_G(x))

其中,

JSD

表示 JS Divergence,其範圍為

[0, 2log2]

JSD

公式如下,其中

KL

表示 KL Divergence

\begin{align} & JSD(P||Q) = \frac12KL(P||M) + \frac12KL(Q||M) \\ & M = \frac12(P+Q) \\ \end{align}

即,接下來我們要求解的

G^*

是滿足

\begin{align} G^* &= \min_G \max_D V(D, G) \\ &= \min_G -2log2 + JSD(P_{data}(x)||P_G(x)) \\ \end{align}

毫無疑問,其結果就是

G^* = arg_{G} (P_G(x) = P_{data}(x))

這裡,被用於衡量

P_G

P_{data}

的距離的指標最好能隨著兩者的相似性增加逐漸減小為0。可是 JS Divergence 並不太適用於這個場景,原因在於

P_{JSD(P_{data}, P_G)=2log2}=1

。也就是,絕大多數情況下而言

JSD=2log2

,而在

P_{data}=P_G

時,

JSD

會突變為0。因此,正常情況下根本不會產生 Gradient 來最佳化 Generator 。在“Arjovsky M, Bottou L。 Towards Principled Methods for Training Generative Adversarial Networks。 2017。”中作者給出了詳細證明。這裡我們只給出圖例說明,如下圖兩條曲線:它們雖然有重合,但是相比於兩條曲線佔有的空間(想象是兩條很長的曲線)幾乎是忽略不計的。

當我們在談論 Deep Learning:GAN 與 WGAN

當我們在談論 Deep Learning:GAN 與 WGAN

GAN 與 VAE 的區別

最後,作為兩大主流生成模型,我們來談談 GAN 與 VAE 的區別

VAE 在理論上需要利用 Variational Inference 進行近似,進而引入偏差;而 GAN 不需要這種近似,即理想情況下 GAN 能更好地擬合數據真實分佈。事實上,VAE 確實在生成影象時更加模糊,而 GAN 相對銳利

VAE 作為 AE 的一種,本質上是對資料的壓縮,同時可以用於生成新資料;而 GAN 則主要關注還原真實資料分佈,透過取樣生成新資料

WGAN

原始 GAN 其實存在各種問題,魯棒性極差,如:非常依賴 Discriminator 和 Generator 的結構設計、需要精心的調節超引數、沒有一種指標來量化訓練的進度、還可能出現 Mode Collapse,不一而足。自 GAN 提出後,大量的文章都嘗試解決 GAN 的某些問題,而 WGAN(Wasserstein GAN)則幾乎同時解決(緩解)了上述所有的不足,引發了大量的關注與討論。下面,我們簡單介紹下這個相對成熟版本的 GAN。

其實 WGAN 的提出經歷了三個階段:

在“Arjovsky M, Bottou L。 Towards Principled Methods for Training Generative Adversarial Networks。 2017。”,作者主要對 GAN 存在的問題進行了嚴謹的理論分析,非常精彩

在“Arjovsky M, Chintala S, Bottou L。 Wasserstein GAN。 2017。”,作者提出了 WGAN,最大的貢獻在於利用 Wasserstein Distance(Earth-Mover Distance)代替 GAN 中的 JS Divergence,極大緩解了 GAN 難以訓練的問題

在“Gulrajani I, Ahmed F, Arjovsky M, et al。 Improved Training of Wasserstein GANs。 2017。”,作者對 WGAN 的目標函式進行了最佳化,在改進了訓練過程的同時也能達到更好的效果

下面我們簡單介紹一下 WGAN 及 Improved WGAN。

上文提到,原始的 GAN 由於 JS Divergence 衡量分佈距離時突變的性質,訓練 Generator 會出現 Gradient Vanish 的問題;於是,WGAN 改用 Wasserstein Distance(Earth-Mover Distance)來衡量兩個分佈的距離。Wasserstein Distance 具體定義限於篇幅不展開了,其實跟後面關係也不大,有興趣的同學可以檢視原文獻。Wasserstein Distance 的一個重要性質就是變化是平滑的,也就是說能夠很好地描述兩個分佈逐漸變得相似的這個過程,根本上解決了 Gradient Vanish 的問題。

更讓人意想不到的是,作者在歷史文獻中找到了將 Wasserstein Distance 直接套用 GAN 框架中的理論依據,即可以推匯出分佈

P_r

P_{\theta}

的Wasserstein Distance可以寫作

W(P_r, P_{\theta}) = \sup_{||f||_L \le 1} E_{x \sim P_r}[f(x)] - E_{x \sim P_{\theta}}[f(x)]

其中,

\sup

表示上確界;

||f||_L

表示函式

f

的 Lipschitz 常數小於等於1,即對任意

x_1, x_2

需要

f

滿足

||f(x_1)-f(x_2)|| \le ||x_1-x_2||

上式的含義為,對所有滿足

||f||_L \le 1

f

,計算

E_{x \sim P_r}[f(x)] - E_{x \sim P_{\theta}}[f(x)]

,並取其最大值。如果代入 GAN 的場景,即

W(P_{data}, P_G) = \max_{D \in 1-Lipschitz} E_{x \sim P_{data}}[D(x)] - E_{x \sim P_G}[D(x)]

可以看出,使用 Wasserstein Distance 時目標函式與原始 GAN 不同,但同樣可以用神經網路來學習 Discriminator 和 Generator。區別僅在於

D \in 1-Lipschitz

這個約束。

原始 WGAN 利用 weight clipping 的方式來處理這個帶約束的問題,很快“Gulrajani I, Ahmed F, Arjovsky M, et al。 Improved Training of Wasserstein GANs。 2017。”的作者提出了更加優秀的解決方法,這裡我們只簡單介紹下後者。作者將上述約束轉化為目標函式中的 Penalty 項,這其實也是很多約束最佳化演算法的做法,具體最佳化目標轉變為

V(D, G) = E_{x \sim P_{data}}[D(x)] - E_{x \sim P_G}[D(x)] - \lambda E_{\hat x \sim P_{\hat x}}[(||\nabla_{\hat x}D(\hat x)||_2-1)^2]

關於 Penalty 項有兩點需要說明:

對於

P_{\hat x}

,這裡並不是對整個空間取樣,而只對

P_{data}, P_G

之間的空間取樣。這裡就不展開了,有需要了解細節的同學請參考原文

直接觀察 Penalty 項,其意義是期望

||\nabla_{\hat x}D(\hat x)||

逼近1,而非嚴格小於等於1。關於這點,其原因在於在

\hat x

的取樣區域中,

||\nabla_{\hat x}D(\hat x)||

實際上通常為1;且用範數而非

max

能加快收斂速度並提升效果。原文同樣有更詳細說明

最終,WGAN 的訓練步驟為

當我們在談論 Deep Learning:GAN 與 WGAN

當我們在談論 Deep Learning:GAN 與 WGAN

WGAN 在效果上雖然沒有飛躍的進步,但其巨大的意義在於使 GAN 的實用性大大提升,體現主要體現為以下方面:

不再需要精心平衡 Discriminator 和 Generator 的能力了,且效果更穩健,不依賴於過於精心設計(trick)的結構

緩解了 Mode Collapse 現象,確保生成的資料的多樣性

最重要的是,有一個數值可以定量描述並跟蹤訓練的效果了

可以預見,在緩解了這些問題後,GAN 研究的價值和熱度都會得到顯著的提升,不得不說是比較振奮人心的。

尾巴

這一篇拖更了很久了,近期更新節奏也會比較慢,工作和生活上都需要投入更多的心思。不過,最近還是去參加了

Chris Manning

Sebastian Thrun

兩位大牛的報告,感覺還是有一定收穫的,以後有機會聊一聊。

下一篇大概會開啟 Reinforcement Learning 部分,具體安排還得再考慮下,畢竟這領域是個巨坑,作為專欄也只能抽取些有意思的部分談一談。

本系列其他文章:

專欄總目錄 - 知乎專欄