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