WGAN-div:一個默默無聞的WGAN填坑者
今天我們來談一下 Wasserstein散度 ,簡稱“W散度”。注意,這跟 Wasserstein距離 (Wasserstein distance,簡稱“W距離”,又叫Wasserstein度量、Wasserstein metric)是不同的兩個東西。
本文源於論文 ofollow,noindex">《Wasserstein Divergence for GANs》 ,論文中提出了稱為WGAN-div的GAN訓練方案。這是一篇我很是欣賞卻默默無聞的paper,我只是找文獻時偶然碰到了它。不管英文還是中文界,它似乎都沒有流行起來,但是我感覺它是一個相當漂亮的結果。
WGAN-div的部分樣本(2w iter)
如果讀者需要入門一下WGAN的相關知識,不妨請閱讀拙作 《互懟的藝術:從零直達WGAN-GP》 。
我們知道原始的GAN(SGAN)會有可能存在梯度消失的問題,因此WGAN橫空出世了。
WGAN引入了最優傳輸裡邊的W距離來度量兩個分佈的距離:
\begin{equation}W_c(\tilde{p}(x), q(x)) = \inf_{\gamma\in \Pi(\tilde{p}(x), q(x))} \mathbb{E}_{(x,y)\sim \gamma}c(x,y) \end{equation}
這裡的$\tilde{p}(x)$是真實樣本的分佈,$q(x)$是偽造分佈,$c(x,y)$是傳輸成本,論文中用的是$c(x,y)=\Vert x-y\Vert$;而$\gamma\in \Pi(\tilde{p}(x), q(x))$的意思是說:$\gamma$是任意關於$x, y$的二元分佈,其邊緣分佈則為$\tilde{p}(x)$和$q(y)$。直觀來看,$\gamma$描述了一個運輸方案,而$c(x,y)$則是運輸成本,$W_c(\tilde{p}(x), q(x))$就是說要找到成本最低的那個運輸方案所對應的成本作為分佈度量。
W距離確實是一個很好的度量,但顯然不好算。當$c(x,y)=\Vert x-y\Vert$時,我們可以將其轉化為對偶問題:
\begin{equation}W(\tilde{p}(x), q(x)) = \sup_{\Vert T\Vert_L\leq 1} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)]\label{eq:wgan-d}\end{equation}
其中$T(x)$是一個標量函式,$\Vert T\Vert_L$則是Lipschitz範數:
\begin{equation}\Vert T\Vert_L = \max_{x\neq y} \frac{|T(x)-T(y)|}{\Vert x - y\Vert}\end{equation}
說白了,$T(x)$要滿足:
\begin{equation}|T(x)-T(y)| \leq \Vert x - y\Vert\end{equation}
這樣一來,生成模型的訓練,可以作為W距離下的一個最小-最大問題:
\begin{equation}\mathop{\arg\min}_{G}\mathop{\arg\max}_{T,\Vert T\Vert_L\leq 1} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(z)}[T(G(z))]\end{equation}
第一個$\arg\max$試圖獲得W距離的近似表示式,而第二個$\arg\min$則試圖最小化W距離。
然而,$T$不是任意的,需要滿足$\Vert T\Vert_L\leq 1$稱為Lipschitz約束(L約束),該怎麼施加這個約束呢?因此,一方面,WGAN開創了GAN的一個新流派,使得GAN的理論上了一個新高度,另一方面,WGAN也挖了一個關於L約束的大坑,這個坑也引得不少研究者前仆後繼地...(跳坑?)
目前,往模型中加入L約束,有三種主要的方案。
這是WGAN最原始的論文所提出的一種方案:在每一步的判別器的梯度下降後,將判別器的引數的絕對值裁剪到不超過某個固定常數。
這是一種非常樸素的做法,現在基本上已經不用了。其思想就是:L約束本質上就是要網路的波動程度不能超過一個線性函式,而啟用函式通常都滿足這個條件,所以只需要考慮網路權重,最簡單的一種方案就是直接限制權重範圍,這樣就不會抖動太劇烈了。
這種思路非常直接,即$\Vert T\Vert_L\leq 1$可以由$\Vert \nabla T\Vert \leq 1$來保證,所以乾脆把判別器的梯度作為一個懲罰項加入到判別器的loss中:
\begin{equation}D=\mathop{\arg\min}_{T} -\mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] + \mathbb{E}_{x\sim q(x)}[T(x)] + \lambda \mathbb{E}_{x\sim r(x)}\Big[\big(\Vert \nabla T\Vert - 1\big)^2\Big]\end{equation}
但問題是我們要求$\Vert T\Vert_L\leq 1$是在每一處都成立,所以$r(x)$應該是全空間的均勻分佈才行,顯然這很難做到。所以作者採用了一個非常機智(也有點流氓)的做法:在真假樣本之間隨機插值來懲罰,這樣保證真假樣本之間的過渡區域滿足L約束。這種方案就是WGAN-GP。顯然,它比權重裁剪要高明一些,而且通常都work得很好。但是這種方案是一種經驗方案,沒有更完備的理論支撐。
另一種實現L約束的方案就是譜歸一化(SN),可以參考我之前寫考 《深度學習中的Lipschitz約束:泛化與生成模型》 。
本質上來說,譜歸一化和權重裁剪都是同一類方案,只是譜歸一化的理論更完備,結果更加鬆弛。而且還有一點不同的是:權重裁剪是一種“事後”的處理方案,也就是每次梯度下降後才直接裁剪引數,這種處理方案本身就可能導致優化上的不穩定;譜歸一化是一種“事前”的處理方案,它直接將每一層的權重都譜歸一化後才進行運算,譜歸一化作為了模型的一部分,更加合理一些。
儘管譜歸一化更加高明,但是它跟權重裁剪一樣存在一個問題:把判別器限制在了一小簇函式之間。也就是說,加了譜歸一化的$T$,只是所有滿足L約束的函式的一小部分。因為譜歸一化事實上要求網路的每一層都滿足L約束,但這個條件太死了,也許這一層可以不滿足L約束,下一層則滿足更強的L約束,兩者抵消,整體就滿足L約束,但譜歸一化不能適應這種情況。
在這種情況下, 《Wasserstein Divergence for GANs》 引入了W散度,它聲稱:現在我們可以去掉L約束了,並且還保留了W距離的好性質。
有這樣的好事?我們來看看W散度是什麼。一上來,作者先回顧了一些經典的GAN的訓練方案,然後隨手扔出一篇文獻,叫做 《Partial differential equations and monge-kantorovich mass transfer》 ,裡邊提供了一個方案(下面的出場順序跟論文有所不同),能直接將$T$訓練出來,目標是(跟原文的寫法有些不一樣)
\begin{equation}T^* = \mathop{\arg\max}_{T} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)] - \frac{1}{2}\mathbb{E}_{x\sim r(x)}[\Vert \nabla T\Vert^2]\label{eq:wgan-div-d1}\end{equation}
這裡的$r(x)$是一個非常寬鬆的分佈,我們後面再細談。整個loss的意思是:你只要按照這個公式將$T$訓練出來,它就是$\eqref{eq:wgan-d}$式中的$T$的最優解,也就是說,接下來只要把它代進$\eqref{eq:wgan-d}$式,就得到了W距離,最小化它就可以得到生成器了。
\begin{equation}\mathop{\arg\min}_{G}\mathbb{E}_{x\sim \tilde{p}(x)}[T^*(x)] - \mathbb{E}_{x\sim q(z)}[T^*(G(z))]\label{eq:wgan-div-g1}\end{equation}
首先,我為什麼說作者“隨手”跑出一篇論文呢?因為作者確實是隨手啊...
作者直接說“According to [19]”,然後就給出了後面的結果,[19]就是這篇論文,是一篇最優傳輸和偏微分方程的論文,59頁...我翻來翻去,才發現作者引用的應該是36頁和40頁的結果(不過翻到了也沒能進一步看懂,放棄了),也不提供多一點參考資料,尷尬~~還有後面的一些引理,作者也說“直接去看[19]的discussion吧”.....
然後,讀者更多的疑問是:這玩意跟梯度懲罰方案有什麼差別,加個負號變成最小化不都是差不多嗎?做實驗時也許沒有多大差別,但是理論上的差別是很大的,因為WGAN-GP的梯度懲罰只能算是一種經驗方案,而$\eqref{eq:wgan-div-d1}$式是有理論保證的。後面我們會繼續講完它。
式$\eqref{eq:wgan-div-d1}$是一個理論結果,而不管怎樣深度學習還是一門理論和工程結合的學科,所以作者一般化地考慮了下面的目標
\begin{equation}W_{k,p}[\tilde{p}(x), q(x)] = \max_{T} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)] - k\mathbb{E}_{x\sim r(x)}[\Vert \nabla T\Vert^p]\label{eq:wdiv}\end{equation}
其中$k > 0, p > 1$。基於此,作者證明了$W_{k,p}$有非常好的性質:
1、$W_{k,p}$是個對稱的散度。散度的意思是:$\mathcal{D}[P,Q]\geq 0$且$\mathcal{D}[P,Q]=0\Leftrightarrow P=Q$,它跟“距離”的差別是它不滿足三角不等式,也有叫做“半度量”、“半距離”的。$W_{k,p}$是一個散度,這已經非常棒了,因為我們大多數GAN都只是在優化某個散度而已。散度意味著當我們最小化它時,我們真正是在縮小兩個分佈的距離。 2、$W_{k,p}$的最優解跟W距離有一定的聯絡。$\eqref{eq:wgan-div-d1}$式就是一個特殊的$W_{1/2,2}$。這說明當我們最大化$W_{k,p}$得到$T$之後,可以去掉梯度項,通過最小化$\eqref{eq:wgan-div-g1}$來訓練生成器。這也表明以$W_{k,p}$為目標,性質跟W距離類似,不會有梯度消失的問題。 3、這是我覺得最有趣的一點,作者證明了\begin{equation}\max_{T} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)] - k\mathbb{E}_{x\sim r(x)}[(\Vert \nabla T\Vert - n)^p]\end{equation}不總是一個散度。當$n=1,p=2$時這就是WGAN-GP的梯度懲罰,作者說它不是一個散度,明擺著要跟WGAN-GP對著幹,哈哈哈~這也側面說明了WGAN-GP在訓練生成器的時候,並非總是會在拉大兩個分佈的距離,從而使得訓練生成器時回傳的梯度不準。
好了,說了這麼久,終於可以引入WGAN-div了,其實就是基於$\eqref{eq:wdiv}$的WGAN的訓練模式了:
\begin{equation}\begin{aligned}T =& \mathop{\arg\max}_{T} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(x)}[T(x)] - k\mathbb{E}_{x\sim r(x)}[\Vert \nabla T\Vert^p]\\
G =& \mathop{\arg\min}_{G} \mathbb{E}_{x\sim \tilde{p}(x)}[T(x)] - \mathbb{E}_{x\sim q(z)}[T(G(z))]\end{aligned}\end{equation}
前者是為了通過W散度$W_{k,p}$找出W距離中最優的$T$,後者就是為了最小化W距離。所以,W散度的角色,就是一個為W距離的默默無聞的填坑者呀,再結合這篇論文字身的鮮有反響,我覺得這種感覺更加強烈了。
作者通過做了一批搜尋實驗,發現$k=2,p=6$時效果最好(用FID為指標)。這進一步與WGAN-GP的做法有出入:範數的二次冪並非是最好的選擇。
前面我們就說過,W散度中對$r(x)$的要求非常寬鬆,論文也做了一組對比實驗,對比了常見的做法:
1、真假樣本隨機插值; 2、真樣本之間隨機插值、假樣本之間隨機插值; 3、真假樣本混合後,隨機選兩個樣本插值; 4、直接選原始的真假樣本混合; 5、直接只選原始的假樣本; 6、直接只選原始的真樣本。
結果發現,在WGAN-div之下這幾種做法表現都差不多(用FID為指標),但是對於WGAN-GP,這幾種做法差別比較大,而且WGAN-GP中最好的結果比WGAN-div中最差的結果還要差。這時候WGAN-GP就被徹底虐倒了...
這裡邊的差別不難解釋,WGAN-GP是憑經驗加上梯度懲罰,並且“真假樣本隨機插值”只是它無法做到全空間取樣的一個折衷做法,但是W散度和WGAN-div,從理論的開始,就沒對$r(x)$有什麼嚴格的限制。其實,原始W散度的構造(這個需要看參考論文)基本上只要求$r(x)$是一個樣本空間跟$\tilde{p}(x)、q(x)$一樣的分佈,非常弱的要求,而我們一般選擇為$\tilde{p}(x)、q(x)$兩者共同衍生出來的分佈,相對來說收斂快一點。
自然是用Keras寫的~人生苦短,我用Keras
https://github.com/bojone/gan/blob/master/keras/wgan_div_celeba.py隨機樣本:
WGAN-div的部分樣本(2w iter)
不知道業界是怎麼看這篇WGAN-div的,也許是覺得跟WGAN-GP沒什麼不同,就覺得沒有什麼意思了。不過我是很佩服這些從理論上推導並且改進原始結果的大牛及其成果。雖然看起來像是隨手甩了一篇論文然後說“你看著辦吧”的感覺,但這種將理論和實踐結合起來的結果仍然是很有美感的。
本來我對WGAN-GP是多少有些芥蒂的,總覺得它太醜,不想用。但是WGAN-div出現了,在我心中已經替代了WGAN-GP,並且它不再醜了~
轉載到請包括本文地址: https://kexue.fm/archives/6139
如果您還有什麼疑惑或建議,歡迎在下方評論區繼續討論。
如果您覺得本文還不錯,歡迎/本文。打賞並非要從中獲得收益,而是希望知道科學空間獲得了多少讀者的真心關注。當然,如果你無視它,也不會影響你的閱讀。再次表示歡迎和感謝!
如果您需要引用本文,請參考:
蘇劍林. (2018, Nov 07). 《WGAN-div:一個默默無聞的WGAN填坑者 》[Blog post]. Retrieved from https://kexue.fm/archives/6139