0
前言
上次帶大家寫了原始版的 GAN,只生成了高斯分布。但兔子哥哥發(fā)現(xiàn)在 GAN 論文的底下,有 GAN 生成圖片的 example。
因此,這足以說明 GAN 亦有能力生成圖片,并非只有 DCGAN 才能生成圖片,這一點與我學(xué) GAN 之前的認知大為不同。于是我就開始嘗試了使用原始的 GAN 來嘗試生成圖像,但接下來,我就開始懷疑人生了。
在開始的時候我采用了 MINST 的數(shù)據(jù)集,按照我上一篇文章兔子哥哥帶你從零寫一個 GAN中提及的訓(xùn)練 GAN 的方式中連續(xù)訓(xùn)練原始 GAN 多次,得到的仍然全是噪點,并沒有一點手寫數(shù)字的影子。
在嘗試多次后,未免讓我懷疑我是不是讀了假論文,自己是不是一只假兔子。
在查閱多番資料后,在知乎偶遇到,令人拍案叫絕的 Wasserstein GAN - 知乎專欄 (下文簡稱 WGAN) 一文,不讀不知道,讀了簡直驚為天人。讀完之后,我打消了原本打算去學(xué)習(xí) DCGAN 的念頭,改成繼續(xù)學(xué)習(xí) WGAN。因此,本文兔子哥哥將會帶讀者一起來領(lǐng)略一下 WGAN 的風(fēng)采。
文章目錄如下:
為什么原始 GAN 訓(xùn)練困難重重?
WGAN 是什么鬼?
WGAN 的個人一些使用經(jīng)驗總結(jié)
為什么原始的 GAN 這樣問題重重?
在令人拍案叫絕的 Wasserstein GAN - 知乎專欄一文中提及(亦是論文中提及),原始 GAN 的優(yōu)化目標經(jīng)過一定的數(shù)學(xué)推斷后,可以等價于最小化真實分布 P(r) 與生成分布 P(g) 的 JS 散度。那么什么叫 JS 散度呢,為此我們先引出 KL 散度。
KL 散度又稱 KL 距離,亦叫相對熵。這里先給出 KL 散度的公式:
其中 p,g 為 x 的概率分布。在一定程度上,熵這個概念可以度量兩個隨機變量的距離,因此 KL 散度可衡量兩概率分布的差異,特別注意一點是該距離并非對稱距離,即:
得知 KL 散度后,那么 JS 散度就很好理解了,JS 散度的表達式是
顯然,JS 散度可以解釋成用 p 和 q 分布離 pq 的平均分布的相對熵來作為衡量 p,q 間的距離,這個時候,該距離就是對稱的了。其中經(jīng)過數(shù)學(xué)式子的推斷,原始 GAN 的損失函數(shù)是可以改寫成以下式子:
在令人拍案叫絕的 Wasserstein GAN - 知乎專欄中分析了 p,q 各取 0 與非 0 時,對損失函數(shù)的影響,而得出的結(jié)論是,無論 p 和 q 的取值如何,其 JS 散度都是常數(shù)值 log2,既然是常數(shù),優(yōu)化就無從談起。
而從另一個更加通俗的角度來說,在優(yōu)化中,KL 散度和 JS 散度是突變的,這就導(dǎo)致了,如果 D 訓(xùn)練得太好了,那么 G 就會被按在地上摩擦,進而訓(xùn)練 G 的時候梯度將會梯度不穩(wěn)定,但如過 D 太差了,G 的梯度不正確,會使得 G 往錯誤的方向前進。這么說來,就好像老婆和老媽掉進河里,你救誰一樣,怎么回答的火候是難以把握的。
WGAN 是什么鬼
故名思意,WGAN 就是指用 Wasserstein distance 來替代掉 JS 散度和 KS 散度來作為優(yōu)化目標的 GAN 模型咯。
那么,什么叫 Wasserstein 距離呢?
下文引用于令人拍案叫絕的 Wasserstein GAN - 知乎專欄
Wasserstein 距離又叫 Earth-Mover(EM)距離,定義如下:
解釋如下:
是Pγ和Pg組合起來的所有可能的聯(lián)合分布的集合,反過來說,
中每一個分布的邊緣分布都是Pγ和Pg。對于每一個可能的聯(lián)合分布γ而言,可以從中采樣
得到一個真實樣本x和一個生成樣本y,并算出這對樣本的距離
,所以可以計算該聯(lián)合分布γ下樣本對距離的期望值
。在所有可能的聯(lián)合分布中能夠?qū)@個期望值取到的下界
,就定義為 Wasserstein 距離。
直觀上可以把
理解為在這個 “路徑規(guī)劃” 下把Pγ這堆 “沙土” 挪到Pg“位置” 所需的 “消耗”,而
就是 “最優(yōu)路徑規(guī)劃” 下的 “最小消耗”,所以才叫 Earth-Mover(推土機)距離。
而對于怎么把 Wasserstein 距離化作我們訓(xùn)練中的損失函數(shù),論文作者使用 Lipschitz 連續(xù)即一些已知的數(shù)學(xué)定理來使得目標函數(shù)轉(zhuǎn)化為
存在函數(shù)f(w)其滿足 Lipschiz 連續(xù),在取上界,此時就是 Wasserstein 距離。顯然這個函數(shù)可以用深度學(xué)習(xí)技術(shù)來擬合,而 Lipschitz 連續(xù)的限制,則可以通過限制每一層神經(jīng)網(wǎng)絡(luò)的權(quán)重的取值范圍來控制。
歸納起來,在 WGAN 中,D 的任務(wù)不再是盡力區(qū)分生成樣本與真實樣本,而是盡量擬合出樣本間的 Wasserstein 距離,從分類任務(wù)轉(zhuǎn)化成回歸任務(wù)。而 G 的任務(wù)則變成了盡力縮短樣本間的 Wasserstein 距離。
故 WGAN 對原始 GAN 做出了如下改變:
D 的最后一層取消 sigmoid
D 的 w 取值限制在 [-c,c] 區(qū)間內(nèi)。
使用 RMSProp 或 SGD 并以較低的學(xué)習(xí)率進行優(yōu)化 (論文作者在實驗中得出的 trick)
WGAN 的個人一些使用經(jīng)驗總結(jié)
這些經(jīng)驗是基于自身的實驗得出,僅供參考
WGAN 的論文指出使用 MLP,3 層 relu,最后一層使用 linear 也能達到可以接受的效果,但根據(jù)我實驗的經(jīng)驗上,可能對于彩色圖片,因為其數(shù)值分布式連續(xù),所以使用 linear 會比較好。但針對于 MINST 上,因為其實二值圖片,linear 的效果很差,可以使用 batch normalization + sigmoid 效果更好。
不要在 D 中使用 batch normalization,估計原因是因為 weight clip 對 batch normalization 的影響
使用逆卷積來生成圖片會比用全連接層效果好,全連接層會有較多的噪點,逆卷積層效果清晰。
關(guān)于衡量指標,Wasserstein distance 距離可以很好的衡量 WGAN 的訓(xùn)練進程,但這僅限于同一次,即你的代碼從運行到結(jié)束這個過程內(nèi)。
另外有一點,雖然在 WGAN 的論文里面把原始 GAN 說得那么不堪,但人家原始 GAN 在論文里面也是有成功生成圖片的例子,所以特別想問一句,如過有小伙伴用原始 GAN 生成過質(zhì)量可觀的圖片的話,歡迎冒泡,交流一下。
這個是我用 WGAN 用擬合出的 MINST 的效果,不算太理想,繼續(xù)訓(xùn)練應(yīng)該有較好效果,但 GAN 系列的收斂速度都好像有點感人。。。
后話
參考文獻:
令人拍案叫絕的 Wasserstein GAN - 知乎專欄
我的 Github,我的 WGAN 的代碼可在這里找到
個人的學(xué)習(xí)總結(jié),并非教程,僅供參考,如有錯誤,歡迎指出和交流。
雷鋒網(wǎng)按:本文原作者兔子老大,原文來自他的知乎專欄。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。