(2)GAN的loss導致問題


GAN存在着兩種問題,原始GAN中判別器要最小化如下損失函數,盡可能把真實樣本分為正例,生成樣本分為負例:

 

 

 對於生成器,Goodfellow一開始提出來一個損失函數,后來又提出了一個改進的損失函數,分別是:

公式2和公式3分別存在着兩種不同的問題。

公式2存在的問題:

  判別器越好,生成器梯度消失越嚴重。

首先,我們給公式2加上一個不依賴於生成器的項,使之變成:

這是上一篇GAN理論中我們上面證明過程所使用的判別器的損失函數的相反數,我們最終得到的是:

根據原始GAN定義的判別器loss,我們可以得到最優判別器的形式;而在最優判別器的下,我們可以把原始GAN定義的生成器loss等價變換為最小化真實分布$p_{data}(x)$與生成分布$p_g(x)$之間的JS散度。我們越訓練判別器,它就越接近最優,最小化生成器的loss也就會越近似於最小化$p_{data}(x)$和$p_g(x)$之間的JS散度。

問題就出在這個JS散度上。我們會希望如果兩個分布之間越接近它們的JS散度越小,我們通過優化JS散度就能將$p_g(x)$“拉向”$p_{data}(x)$,最終以假亂真。這個希望在兩個分布有所重疊的時候是成立的,但是如果兩個分布完全沒有重疊的部分,或者它們重疊的部分可忽略(下面解釋什么叫可忽略),它們的JS散度是多少呢?

答案是log2,因為對於任意一個x只有四種可能:

 

 

 第一種對計算JS散度無貢獻,第二種情況由於重疊部分可忽略所以貢獻也為0,第三種情況和第四種情況計算都為log2.

換句話說,無論$p_{data}(x)$跟$p_g(x)$是遠在天邊,還是近在眼前,只要它們倆沒有一點重疊或者重疊部分可忽略,JS散度就固定是常數log2,而這對於梯度下降方法意味着——梯度為0!此時對於最優判別器來說,生成器肯定是得不到一丁點梯度信息的;即使對於接近最優的判別器來說,生成器也有很大機會面臨梯度消失的問題。

但是$p_{data}(x)$與$p_g(x)$不重疊或重疊部分可忽略的可能性有多大?比較嚴謹的答案是:當$p_g(x)$與$p_{data}(x)$的支撐集(support)是高維空間中的低維流形(manifold)時,$p_g(x)$與$p_{data}(x)$重疊部分測度(measure)為0的概率為1。

GAN中的生成器一般是從某個低維(比如100維)的隨機分布中采樣出一個編碼向量,再經過一個神經網絡生成出一個高維樣本(比如64x64的圖片就有4096維)。當生成器的參數固定時,生成樣本的概率分布雖然是定義在4096維的空間上,但它本身所有可能產生的變化已經被那個100維的隨機分布限定了,其本質維度就是100,再考慮到神經網絡帶來的映射降維,最終可能比100還小,所以生成樣本分布的支撐集就在4096維空間中構成一個最多100維的低維流形,“撐不滿”整個高維空間。所以我們可以說,$p_{data}(x)$與$p_g(x)$的支撐集是高維空間中的低維流形。

“撐不滿”就會導致真實分布與生成分布難以“碰到面”,這很容易在二維空間中理解:一方面,二維平面中隨機取兩條曲線,它們之間剛好存在重疊線段的概率為0;另一方面,雖然它們很大可能會存在交叉點,但是相比於兩條曲線而言,交叉點比曲線低一個維度,長度(測度)為0,可忽略。三維空間中也是類似的,隨機取兩個曲面,它們之間最多就是比較有可能存在交叉線,但是交叉線比曲面低一個維度,面積(測度)是0,可忽略。從低維空間拓展到高維空間,就有了如下邏輯:因為一開始生成器隨機初始化,所以$p_g(x)$幾乎不可能與$p_{data}(x)$有什么關聯,所以它們的支撐集之間的重疊部分要么不存在,要么就比$p_{data}(x)$與$p_g(x)$的最小維度還要低至少一個維度,故而測度為0。

故,我們有此結論:

   在(近似)最優判別器下,最小化生成器的loss等價於最小化$p_{data}(x)$與$p_g(x)$之間的JS散度,而由於$p_{data}(x)$與$p_g(x)$幾乎不可能有不可忽略的重疊,所以無論它們相距多遠JS散度都是常數log2,最終導致生成器的梯度(近似)為0,梯度消失。

因而我們這樣認為,判別器訓練得太好,生成器梯度消失,生成器loss降不下去;判別器訓練得不好,生成器梯度不准,四處亂跑。只有判別器訓練得不好不壞才行,但是這個火候又很難把握,甚至在同一輪訓練的前后不同階段這個火候都可能不一樣,所以GAN才那么難訓練。

實驗輔證見論文。

 

公式3存在的問題:

最小化第二種生成器loss函數,會等價於最小化一個不合理的距離衡量,導致兩個問題,一是梯度不穩定,二是collapse mode即多樣性不足。

如前文所說,Ian Goodfellow提出的“- log D trick”是把生成器loss改成:

由上文我們可以得到:

我們把KL散度寫開來:

結合JS散度,我們有:

最后一項顯然不依賴於生成器G,所以我們最小化公式3等價於最小化以下式子:

這個等價最小化目標存在兩個嚴重的問題。第一是它同時要最小化生成分布與真實分布的KL散度,卻又要最大化兩者的JS散度,一個要拉近,一個卻要推遠!這在直觀上非常荒謬,在數值上則會導致梯度不穩定,這是后面那個JS散度項的毛病。

第二,即便是前面那個正常的KL散度項也有毛病。因為KL散度不是一個對稱的衡量,$KL(p_g(x)||p_{data}(x))$與$KL(p_{data}(x)||p_g(x))$是有差別的。以前者為例:

  • 當$p_g(x)\to0$而$p_{data}(x)>0$時,$p_g(x)log\frac{p_g(x)}{p_{data}(x)}\to0$,對$KL(p_g(x)||p_{data}(x))$的貢獻趨近於0;
  • 當$p_{data}(x)\to0$而$p_g(x)>0$時,$p_g(x)log\frac{p_g(x)}{p_{data}(x)}\to \infty$,對$KL(p_g(x)||p_{data}(x))$的貢獻趨近於無窮。

換言之,$KL(p_g(x)||p_{data}(x))對於上面兩種錯誤的懲罰是不一樣的,第一種錯誤對應的是“生成器沒能生成真實的樣本”,懲罰微小;第二種錯誤對應的是“生成器生成了不真實的樣本” ,懲罰巨大。第一種錯誤對應的是缺乏多樣性,第二種錯誤對應的是缺乏准確性。這一放一打之下,生成器寧可多生成一些重復但是很“安全”的樣本,也不願意去生成多樣性的樣本,因為那樣一不小心就會產生第二種錯誤,得不償失。這種現象就是collapse mode。

所以,在原始GAN的(近似)最優判別器下,第一種生成器loss面臨梯度消失問題,第二種生成器loss面臨優化目標荒謬、梯度不穩定、對多樣性與准確性懲罰不平衡導致mode collapse這幾個問題。

 

 

西工大陳飛宇還在成長,如有錯誤還請批評指教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM