天天看點

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

論文閱讀之 Wasserstein GAN 和 Improved Training of Wasserstein GANs

本部落格大部分内容參考了這兩篇部落格: 再讀WGAN(連結已經失效)和令人拍案叫絕的Wasserstein GAN, 自己添加了或者删除了一些東西, 以及做了一些修改.

基礎知識:

f-Divergence

原始GAN采用的是JS divergence來衡量兩個分布之間的距離。事實上有一個統一的模式來衡量兩個分布間的距離,它就是f-divergence。

假設 P P P和 Q Q Q是兩個分布。 p ( x ) p(x) p(x)和 q ( x ) q(x) q(x)是對應樣本 x x x的機率,則:

D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x D_f(P||Q)=\int_xq(x)f(\frac{p(x)}{q(x)})dx Df​(P∣∣Q)=∫x​q(x)f(q(x)p(x)​)dx

就是f-Divergence, 其中 f f f需要滿足: 1. 是凸函數, 2. f ( 1 ) = 0 f(1)=0 f(1)=0.

可以看到對任意的 x x x都有 p ( x ) = q ( x ) p(x)=q(x) p(x)=q(x), 則 D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x = 0 D_f(P||Q)=\int_xq(x)f(\frac{p(x)}{q(x)})dx=0 Df​(P∣∣Q)=∫x​q(x)f(q(x)p(x)​)dx=0, 即兩個分布相同的時候f-Divergence等于0.

想要讓f-divergence能表示兩個分布的距離, 不但要求當兩個分布相同時距離是0, 還需要保證這個0是f-Divergence能取到的最小值, 證明如下:

由于 f ( x ) f(x) f(x)是凸函數,則有下面的不等式:

D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x ≥ f ( ∫ x q ( x ) p ( x ) q ( x ) d x ) = f ( 1 ) = 0 D_f(P||Q)=\int_xq(x)f(\frac{p(x)}{q(x)})dx \ge f(\int_xq(x)\frac{p(x)}{q(x)}dx)=f(1)=0 Df​(P∣∣Q)=∫x​q(x)f(q(x)p(x)​)dx≥f(∫x​q(x)q(x)p(x)​dx)=f(1)=0

Fenchel Conjugate

每個凸函數 f f f都具備一個共轭函數 f ∗ f^∗ f∗:

f ∗ ( t ) = max ⁡ x ∈ d o m ( f ) { x t − f ( x ) } f^∗(t)=\max_{x\in dom(f)}\{xt−f(x)\} f∗(t)=x∈dom(f)max​{xt−f(x)}

關于Fenchel Conjugate有兩個性質:

  1. 所有的凸函數f都有一個conjugate函數 f ∗ f^∗ f∗;
  2. ( ( f ∗ ) ∗ ) = f ((f^∗)^∗)=f ((f∗)∗)=f.

和GAN的聯系

假設 f ∗ f^* f∗是 f f f的Fenchel Conjugate函數, 則由上面的式子可以得到:

f ( x ) = max ⁡ t ∈ d o m ( f ∗ ) { t x − f ∗ ( t ) } f(x)=\max_{t\in dom(f^*)}\{tx-f^*(t)\} f(x)=t∈dom(f∗)max​{tx−f∗(t)}

将這個 f f f作為上面f-Divergence中的 f f f, 代入f-Divergence的式子得到:

D f ( P ∣ ∣ Q ) = ∫ x q ( x ) f ( p ( x ) q ( x ) ) d x = ∫ x q ( x ) ( max ⁡ t ∈ d o m ( f ∗ ) { p ( x ) q ( x ) t − f ∗ ( t ) } ) d x D_f(P||Q)=\int_xq(x)f(\frac{p(x)}{q(x)})dx=\int_xq(x)(\max_{t\in dom(f∗)}\{\frac{p(x)}{q(x)}t−f^∗(t)\})dx Df​(P∣∣Q)=∫x​q(x)f(q(x)p(x)​)dx=∫x​q(x)(t∈dom(f∗)max​{q(x)p(x)​t−f∗(t)})dx

此時我們如果建構一個函數 D ( x ) ∈ d o m ( f ∗ ) D(x)\in dom(f^*) D(x)∈dom(f∗), 即輸入 x x x, 輸出在 f ∗ f^* f∗的定義域中, 這樣我們就能有 D ( x ) D(x) D(x)代替 t t t, 但是這種替換對原來的公式并不是等價的. 因為我們所能用 D ( x ) D(x) D(x)找到的 t t t并不是那個能夠讓 f f f最大的那個 t t t. 是以我們替換之後構造的函數永遠要小于等于f-Divergence:

D f ( P ∣ ∣ Q ) ≥ ∫ x q ( x ) ( p ( x ) q ( x ) D ( x ) − f ∗ ( D ( x ) ) ) d x = ∫ x p ( x ) D ( x ) d x − ∫ x q ( x ) f ∗ ( D ( x ) ) d x D_f(P||Q)\ge\int_xq(x)(\frac{p(x)}{q(x)}D(x)−f^∗(D(x)))dx\\=\int_xp(x)D(x)dx−\int_xq(x)f^∗(D(x))dx Df​(P∣∣Q)≥∫x​q(x)(q(x)p(x)​D(x)−f∗(D(x)))dx=∫x​p(x)D(x)dx−∫x​q(x)f∗(D(x))dx

這就相當于我們找到了一個 D f ( P ∣ ∣ Q ) D_f(P||Q) Df​(P∣∣Q)的下界。接下來,如果我們能找到一個讓上面公式不等号右邊最大的 D D D, 那麼如果我們在公式中采用了這個找到的 D D D, 那就可以去逼近 D f ( P ∣ ∣ Q ) D_f(P||Q) Df​(P∣∣Q), 即:

D f ( P ∣ ∣ Q ) ≈ max ⁡ D ∫ x p ( x ) D ( x ) d x − ∫ x q ( x ) f ∗ ( D ( x ) ) d x = max ⁡ D { E x ∼ P [ D ( x ) ] − E x ∼ Q [ f ∗ ( D ( x ) ) ] } D_f(P||Q)\approx \max_D\int_xp(x)D(x)dx-\int_xq(x)f^∗(D(x))dx\\=\max_D\{\mathbb{E}_{x\sim P}[D(x)]−\mathbb{E}_{x\sim Q}[f^∗(D(x))]\} Df​(P∣∣Q)≈Dmax​∫x​p(x)D(x)dx−∫x​q(x)f∗(D(x))dx=Dmax​{Ex∼P​[D(x)]−Ex∼Q​[f∗(D(x))]}

上面公式的第二行是将前面的機率積分變成了期望. 然而我們在工程上沒法真的去求期望, 是以一般的做法就是分别從 P P P和 Q Q Q中去抽樣資料.

假設現在我們的 P P P是 P d a t a P_data Pd​ata, Q Q Q是 P G P_G PG​,則公式變成:

D f ( P d a t a ∣ ∣ P G ) = max ⁡ D E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ f ∗ ( D ( x ) ) ] D_f(P_{data}||P_G)=\max_D{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[f^∗(D(x))]} Df​(Pdata​∣∣PG​)=Dmax​Ex∼Pdata​​[D(x)]−Ex∼PG​​[f∗(D(x))]

但實際上想要将f-Divergence用在GAN中是不可能的,因為我們并不知道 P d a t a P_{data} Pdata​和 P G P_G PG​的表達式. 是以我們這一路的公式推導, 最終得到的公式隻需要我們簡單地從 P d a t a P_{data} Pdata​和 P G P_G PG​中采樣就可以計算得到f-Divergence. 而不再需要知道這兩個分布的表達式即可計算.

接下來,假如我們想要去尋找一個能讓這個距離最小的 P G P_G PG​,則這個G應該是:

G ∗ = arg ⁡ min ⁡ G D f ( P d a t a ∣ ∣ P G ) = arg ⁡ min ⁡ G max ⁡ D E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ f ∗ ( D ( x ) ) ] = arg ⁡ min ⁡ G max ⁡ D V ( G , D ) G^∗=\arg \min_GD_f(P_{data}||P_G)\\=\arg \min_G\max_D{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[f^∗(D(x))]}\\=\arg\min_G\max_DV(G,D) G∗=argGmin​Df​(Pdata​∣∣PG​)=argGmin​Dmax​Ex∼Pdata​​[D(x)]−Ex∼PG​​[f∗(D(x))]=argGmin​Dmax​V(G,D)

WGAN

前面我們介紹了使用f-Divergence來将“距離”定義到一個統一架構之中的方法. 而Fenchel Conjugate則将這個f-Divergence與GAN聯系在一起。這麼做的目的在于, 我們隻要能找到一個符合f-Divergence要求的函數,就能産生一個距離的度量, 進而定義一種不同的GAN。

原生GAN的問題

對于原生的GAN來說, 選擇特定的度量函數之後, 會導緻目标函數變成生成分布與真是分布的JS divergence. 但是這個divergence有很多問題. 比如說一個最嚴重的問題就是當兩個分布之間完全沒有重疊時, 分布間距離的大小并不會直接反映在divergence上. 這對基于疊代的優化算法是個緻命問題.

根據原始GAN定義的判别器loss, 我們可以得到最優判别器的形式; 而在最優判别器的下, 我們可以把原始GAN定義的生成器loss等價變換為最小化真實分布 P r P_r Pr​與生成分布 P g P_g Pg​之間的JS散度. 我們越訓練判别器, 它就越接近最優, 最小化生成器的loss也就會越近似于最小化 P r P_r Pr​和 P g P_g Pg​之間的JS散度.

問題就出在這個JS散度上. 我們會希望如果兩個分布之間越接近它們的JS散度越小, 我們通過優化JS散度就能将 P g P_g Pg​“拉向” P r P_r Pr​, 最終以假亂真. 這個希望在兩個分布有所重疊的時候是成立的, 但是如果兩個分布完全沒有重疊的部分, 或者它們重疊的部分可忽略(下面解釋什麼叫可忽略), 它們的JS散度是多少呢?

答案是 l o g 2 log2 log2, 因為對于任意一個x隻有四種可能:

P 1 ( x ) = 0 且 P 2 ( x ) = 0 P_1(x) = 0且P_2(x) = 0 P1​(x)=0且P2​(x)=0

P 1 ( x ) ≠ 0 且 P 2 ( x ) ≠ 0 P_1(x) \neq 0且P_2(x) \neq 0 P1​(x)​=0且P2​(x)​=0

P 1 ( x ) = 0 且 P 2 ( x ) ≠ 0 P_1(x) = 0且P_2(x) \neq 0 P1​(x)=0且P2​(x)​=0

P 1 ( x ) ≠ 0 且 P 2 ( x ) = 0 P_1(x) \neq 0且P_2(x) = 0 P1​(x)​=0且P2​(x)=0

第一種對計算JS散度無貢獻, 第二種情況由于重疊部分可忽略是以貢獻也為0, 第三種情況對公式7右邊第一個項的貢獻是 log ⁡ P 2 1 2 ( P 2 + 0 ) = log ⁡ 2 \log \frac{P_2}{\frac{1}{2}(P_2 + 0)} = \log 2 log21​(P2​+0)P2​​=log2, 第四種情況與之類似, 是以最終 J S ( P 1 ∣ ∣ P 2 ) = log ⁡ 2 JS(P_1||P_2) = \log 2 JS(P1​∣∣P2​)=log2.

換句話說, 無論 P r P_r Pr​跟 P g P_g Pg​是遠在天邊, 還是近在眼前, 隻要它們倆沒有一點重疊或者重疊部分可忽略, JS散度就固定是常數 log ⁡ 2 \log 2 log2, 而這對于梯度下降方法意味着——梯度為0! 此時對于最優判别器來說, 生成器肯定是得不到一丁點梯度資訊的; 即使對于接近最優的判别器來說, 生成器也有很大機會面臨梯度消失的問題.

但是 P r P_r Pr​與 P g P_g Pg​不重疊或重疊部分可忽略的可能性有多大? 不嚴謹的答案是: 非常大. 比較嚴謹的答案是:當 P r P_r Pr​與 P g P_g Pg​的支撐集(support)是高維空間中的低維流形(manifold)時, P r P_r Pr​與 P g P_g Pg​重疊部分測度(measure) 為0的機率為1.

論文裡面針對這個也做了相應的實驗:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

這個圖的大緻意思是作者用不同的網絡結構做了實驗, 發現随着疊代次數的增加, 生成圖像的品質在提高, 但是真實資料和生成資料之間的JS散度卻增加了或者是為一個常數, 這就從實驗上驗證了原來的GAN利用JS散度來學習的問題.

Earth Mover’s Distance

假設我們有下面的兩個分布:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

如何将P上的内容“勻一勻”得到Q呢? 比如說把最高的哪一條分開一部分分到其他地方? 這或許是一種解決方案:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

但是顯然除此之外還有很多種方法, 例如:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

既然移動的方法有很多種, 如果每一種都表示了一種代價, 那麼顯然有“好”方法, 就會有“壞”方法. 假設我們衡量移動方法好壞的總代價是“移動的數量”X“移動的距離”. 那這兩個移動的方案肯定是能分出優劣的.當我們用分布Q上不同顔色的色塊對應分布P的相應位置, 就可以将最好的移動方案畫成下面這個樣子:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

我們可以将這個變化畫成一個矩陣:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

對于每一個移動方案 γ \gamma γ, 都能有這樣一個矩陣. 矩陣的每一行表示分布 P P P的一個特定位置. 該行中的每一清單示需要将該行的内容移動到分布 Q Q Q對應位置的數量. 即矩陣中的一個元素 ( x p , x q ) (x_p,x_q) (xp​,xq​)表示從 P ( x p ) P(x_p) P(xp​)移動到 Q ( x q ) Q(x_q) Q(xq​)的數量。

而對于方案 γ \gamma γ我們可以定義一個平均移動距離(Average distance of a plan γ \gamma γ):

B ( γ ) = ∑ x p , x q γ ( x p , x q ) ∣ ∣ x p − x q ∣ ∣ B(\gamma)=\sum_{x_p, x_q}\gamma(x_p, x_q)||x_p−x_q|| B(γ)=xp​,xq​∑​γ(xp​,xq​)∣∣xp​−xq​∣∣

而Earth Mover’s Distance就是指所有方案中平均移動距離最小的那個方案:

W ( P , Q ) = min ⁡ γ ∈ Π B ( γ ) W(P,Q)=\min_{\gamma\in\Pi}B(\gamma) W(P,Q)=γ∈Πmin​B(γ)

其中 Π \Pi Π是所有可能的方案.

作者在論文中也通過實驗說明了EM距離比JS散度更能反應連個分布間的距離:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

上面兩幅圖說明在訓練過程中, 随着EM距離的減小, 生成圖檔的品質越來越高; 而下面這幅圖b表示EM距離為一個常數, 生成的圖檔也就很差.

EM距離與GAN結合

回憶一下f-Divergence:

D f ( P d a t a ∣ ∣ P G ) = max ⁡ D E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ f ∗ ( D ( x ) ) ] D_f(P_{data}||P_G)=\max_D{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[f^∗(D(x))]} Df​(Pdata​∣∣PG​)=Dmax​Ex∼Pdata​​[D(x)]−Ex∼PG​​[f∗(D(x))]

而WGAN的文章中寫到,EM距離也可以類似f-Divergence,用一個式子表示出來:

W ( P d a t a , P G ) = max ⁡ D ∈ 1 − L i p s c h i t z E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] W(P_{data},P_G)=\max_{D\in1-Lipschitz}{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[D(x)]} W(Pdata​,PG​)=D∈1−Lipschitzmax​Ex∼Pdata​​[D(x)]−Ex∼PG​​[D(x)]

公式中1-Lipschitz表示了一個函數集. 當 f f f是一個Lipschitz函數時,它應該受到以下限制:

∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ ≤ K ∣ ∣ x 1 − x 2 ∣ ∣ ||f(x_1)−f(x_2)||\le K||x_1−x_2|| ∣∣f(x1​)−f(x2​)∣∣≤K∣∣x1​−x2​∣∣

當K=1時,這個函數就是1-Lipschitz函數。

為什麼要限制生成器D時1-Lipschitz函數呢

假設我們現在有兩個一維的分布, x 1 x_1 x1​和 x 2 x_2 x2​的距離是 d d d, 顯然他們之間的EM距離也是 d d d:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

此時如果我們想要去優化

W ( P d a t a , P G ) = max ⁡ D ∈ 1 − L i p s c h i t z { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] W(P_{data},P_G)=\max_{D\in1-Lipschitz}\{{\mathbb{E}_{x∼P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[D(x)]} W(Pdata​,PG​)=D∈1−Lipschitzmax​{Ex∼Pdata​​[D(x)]−Ex∼PG​​[D(x)]

隻需要讓 D ( x 1 ) = + ∞ D(x_1)=+\infty D(x1​)=+∞,而讓 D ( x 2 ) = − ∞ D(x_2)=−\infty D(x2​)=−∞就可以了. 也就是說,如果不加上1-Lipschitz的限制的話, 隻需要讓判别器判斷 P d a t a P_{data} Pdata​時大小是正無窮, 判斷PG時是負無窮就足夠了. 這樣的判别器可能會導緻訓練起來非常困難: 判别器區分能力太強, 很難驅使生成器讓生成分布适應資料分布.

這個時候我們加上了這個限制, 也就是說 ∣ ∣ D ( x 1 ) − D ( x 2 ) ∣ ∣ ≤ ∣ ∣ x 1 − x 2 ∣ ∣ = d ||D(x_1)−D(x_2)||\le||x_1−x_2||=d ∣∣D(x1​)−D(x2​)∣∣≤∣∣x1​−x2​∣∣=d. 此時如果我們想要滿足上面的優化目标的話, 就可以讓 D ( x 1 ) = k + d D(x_1)=k+d D(x1​)=k+d, 讓 D ( x 2 ) = k D(x_2)=k D(x2​)=k. 其中 k k k具體是什麼無所謂, 關鍵是我們通過 d d d将判别器在不同分布上的結果限制在了一個較小的範圍中. 傳統的GAN所使用的判别器是一個最終經過sigmoid輸出的神經網絡, 它的輸出曲線肯定是一個S型. 在真實分布附近是1, 在生成分布附近是0. 而現在我們對判别器施加了這個限制, 同時不再在最後一層使用sigmoid, 它有可能是任何形狀的線段, 隻要能讓 D ( x 1 ) − D ( x 2 ) ≤ d D(x_1)−D(x_2)\le d D(x1​)−D(x2​)≤d即可. 如下圖所示:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

這樣做的好處顯而易見. 傳統GAN的判别器是有飽和區的, 而現在的GAN如果是一條直線, 那就能在訓練過程中無差别地提供一個有意義的梯度.說了這麼多, WGAN主要的變化在這兩點:

  1. 不要用sigmoid輸出;
  2. 換成受限的1-Lipschitz來實作一個類似sigmoid的“範圍限制”功能.

1-Lipschitz限制應該如何施加?

文章中所用的方法是截斷權重.

WGAN的僞代碼如下:

  • 初始化D的 θ d θ_d θd​和G的 θ g θ_g θg​
  • 在每一個訓練循環進行:
    • 從資料分布 P d a t a ( x ) P_{data(x)} Pdata(x)​中采樣m個樣本 { x 1 , x 2 , … , x m } \{x_1,x_2,…,x_m\} {x1​,x2​,…,xm​}
    • 從先驗噪聲分布 P p r i o r ( z ) P_{prior(z)} Pprior(z)​中采樣m個樣本 { z 1 , z 2 , … , z m } \{z_1,z_2,…,z_m\} {z1​,z2​,…,zm​}
    • 将這些噪聲樣本輸入生成器G,得到生成樣本 { x ~ 1 , x ~ 2 , … , x ~ m } , x ~ i = G ( z i ) \{\tilde{x}_1,\tilde{x}_2,…,\tilde{x}_m\},\tilde{x}_i=G(z_i) {x~1​,x~2​,…,x~m​},x~i​=G(zi​)
    • 更新判别器的參數θd,即最大化:
      • V ~ = 1 m ∑ i = 1 m D ( x i ) − 1 m ∑ i = 1 m D ( x ~ i ) \tilde{V} =\frac{1}{m}∑^m_{i=1}D(x_i)−\frac{1}{m}∑^m_{i=1}D(\tilde{x}_i) V~=m1​∑i=1m​D(xi​)−m1​∑i=1m​D(x~i​)
      • θ d ← θ d + η ∇ V ~ ( θ d ) θ_d\leftarrowθ_d+\eta \nabla \tilde{V} (θ_d) θd​←θd​+η∇V~(θd​)
      • 更新參數後,截斷參數
  • 從先驗噪聲分布 P p r i o r ( z ) P_{prior(z)} Pprior(z)​中再采樣m個樣本 { z 1 , z 2 , … , z m } \{z_1,z_2,…,z_m\} {z1​,z2​,…,zm​}
  • 更新生成器的參數θg,即最小化:
    • V ~ = 1 m ∑ i = 1 m l o g D ( x i ) − 1 m ∑ i = 1 m D ( G ( z i ) ) \tilde{V} =\sout{\frac{1}{m}\sum^{m}_{i=1}logD(x_i)}−\frac{1}{m}∑^m_{i=1}D(G(z_i)) V~=m1​∑i=1m​logD(xi​)​−m1​∑i=1m​D(G(zi​))
    • θ g ← θ g − η ∇ V ~ ( θ g ) θ_g\leftarrowθ_g−\eta \nabla \tilde{V}(θ_g) θg​←θg​−η∇V~(θg​)

尤其需要注意的是, 判别器的輸出不再需用sigmoid函數了! 并且需要訓練k次判别器, 然後隻訓練一次生成器.

Gradient Penalty

WGA中試通過權重裁剪來施加1-Lipschitz限制的, 但是做樣做會有一些問題, 比如通過權重裁剪并不能保證判别器滿足1-Lipschitz限制, 而是K-Lipschitz限制, 而且權重裁剪很可能講那些滿足1-Lipschitz限制的函數給剪掉. 而WGAN GP提出了通過施加梯度懲罰來施加1-Lipschitz限制的條件.

Improved WGAN 的文章中提到, 1-Lipschitz函數有一個特性: 一個可微函數是1-Lipschitz函數時, 當且僅當它的梯度的norm将永遠小于等于1, 即:

D ∈ 1 − L i p s c h i t z ⇔ ∣ ∣ ∇ x D ( x ) ∣ ∣ ≤ 1 f o r   a l l   x D\in1-Lipschitz\Leftrightarrow||∇xD(x)||\le1 for\ all\ x D∈1−Lipschitz⇔∣∣∇xD(x)∣∣≤1for all x

有了這個理論, 我們就可以改變我們的目标函數了.

原來我們優化目标是:

W ( P d a t a , P G ) = max ⁡ D ∈ 1 − L i p s c h i t z { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] } W(P_{data},P_G)=\max_{D\in1-Lipschitz}\{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x∼P_G}[D(x)]\} W(Pdata​,PG​)=D∈1−Lipschitzmax​{Ex∼Pdata​​[D(x)]−Ex∼PG​​[D(x)]}

此時WGAN的優化目标是在1-Lipschitz中挑一個函數作為判别器D.

而Improved WGAN則是這樣:

W ( P d a t a , P G ) = max ⁡ D { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] − λ ∫ x m a x ( 0 , ∣ ∣ ∇ x D ( x ) ∣ ∣ − 1 ) d x } W(P_{data},P_G)=\max_D\{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[D(x)]−\lambda\int_xmax(0,||\nabla xD(x)||−1)dx\} W(Pdata​,PG​)=Dmax​{Ex∼Pdata​​[D(x)]−Ex∼PG​​[D(x)]−λ∫x​max(0,∣∣∇xD(x)∣∣−1)dx}

也就是說, 現在我們尋找判别器的函數集不再是1-Lipschitz中的函數了, 而是任意函數. 但是後面增加了一項懲罰項. 這個懲罰項就能夠讓選中的判别器函數傾向于是一個“對輸入梯度為1的函數”. 這樣也能實作類似weight clipping的效果. 但與之前遇到的問題一樣, 積分在實作的時候無法計算, 是以我們用采樣的方法去計算這個懲罰項, 即:

W ( P d a t a , P G ) = max ⁡ D { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] − λ E x ∼ P p e n a l t y [ m a x ( 0 , ∣ ∣ ∇ x D ( x ) ∣ ∣ − 1 ) ] } W(P_{data},P_G)=\max_D\{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[D(x)]−\lambda\mathbb{E}_{x\sim P_{penalty}}[max(0,||\nabla xD(x)||−1)]\} W(Pdata​,PG​)=Dmax​{Ex∼Pdata​​[D(x)]−Ex∼PG​​[D(x)]−λEx∼Ppenalty​​[max(0,∣∣∇xD(x)∣∣−1)]}

也就是說, 在訓練過程中, 我們更傾向于得到一個判别器D, 它能對從 P p e n a l t y P_penalty Pp​enalty中采樣得到的每一個 x x x都能 ∣ ∣ ∇ x D ( x ) ∣ ∣ ≤ 1 ||\nabla xD(x)||\le1 ∣∣∇xD(x)∣∣≤1,. 涉及到采樣, 那就要關系到如何采樣. 而首先是從哪裡采? 即 P p e n a l t y P_penalty Pp​enalty是什麼?

Improved WGAN設計了一個特别的 P p e n a l t y P_penalty Pp​enalty. 它的産生過程如下:

  1. 從Pdata中采樣一個點
  2. 從PG中采樣一個點
  3. 将這兩個點連線
  4. 在連線之上在采樣得到一個點,就是一個從 P p e n a l t y P_penalty Pp​enalty采樣的一個點.

重複上面的過程就能不斷采樣得到 x ∼ P p e n a l t y x\sim P_{penalty} x∼Ppenalty​。最終得到下圖中的藍色區域就可以看作是 P p e n a l t y P_{penalty} Ppenalty​:

論文閱讀——《Wasserstein GAN》《Improved Training of Wasserstein GANs》

也就是說, 我們采樣的範圍不是整個 x x x, 隻是P_G和P_{data}中間的空間中的一部分.

再更進一步, Improved WGAN真正做的事是這樣:

W ( P d a t a , P G ) = max ⁡ D { E x ∼ P d a t a [ D ( x ) ] − E x ∼ P G [ D ( x ) ] − λ E x ∼ P p e n a l t y [ ( ∣ ∣ ∇ x D ( x ) ∣ ∣ − 1 ) 2 ] } W(P_{data},P_G)=\max_D\{\mathbb{E}_{x\sim P_{data}}[D(x)]−\mathbb{E}_{x\sim P_G}[D(x)]−\lambda\mathbb{E}_{x\sim P_{penalty}}[(||\nabla xD(x)||−1)^2]\} W(Pdata​,PG​)=Dmax​{Ex∼Pdata​​[D(x)]−Ex∼PG​​[D(x)]−λEx∼Ppenalty​​[(∣∣∇xD(x)∣∣−1)2]}

這個懲罰項的目的是讓梯度盡可能趨向于等于1. 即當梯度大于1或小于1時都會受到懲罰. 而原來的懲罰項僅僅在梯度大于1時受到懲罰而已. 這樣做是有好處的, 就像我們在SVM中強調最大類間距離一樣, 雖然有多個可以将資料區分開的分類面, 但我們希望找到不但能區分資料, 還能讓區分距離最大的那個分類面. 這裡這樣做的目的是由于可能存在多個判别器, 我們想要找到的那個判别器應該有一個“最好的形狀”. 一個“好”的判别器應該在 P d a t a P_{data} Pdata​附近是盡可能大, 要在 P G P_G PG​附近盡可能小. 也就是說處于 P d a t a P_{data} Pdata​和 P G P_G PG​之間的 P p e n a l t y P_{penalty} Ppenalty​區域應該有一個比較“陡峭”的梯度. 但是這個陡峭程度是有限制的, 這個限制就是1.

繼續閱讀