【GAN優化】小批量判別器如何解決模式崩潰問題
- 2020 年 2 月 19 日
- 筆記
GAN的第二季開始更新了,還是熟悉的配方,還是熟悉的味道。第一季更新了12篇小文,只解讀了GAN的冰山一角,第二季將作為第一季的「零零星星」的補充,講解包括其他的損失函數、訓練演算法等等方面,並且會擴展到隱空間、離散數據等方向。今天將先介紹一個處理模式崩潰問題的小方法—小批量判別器,作為對上一季模式崩潰問題的補充吧。
作者&編輯 | 小米粥
1. 模式崩潰的原因
當模式崩潰發生時,生成器 G(z)往往會把很多不同的z均映射成某個x,(更確切地說,指x以及其附近的點,用A表示),接下來更新判別器D(x)後,判別器會很快發現這個病態的mode A從而降低了對這個mode A的信任程度(信任程度即該樣本點來源於訓練數據集的概率),而信任mode B,那麼生成器就會把很多不同的z均映射成x',其中x'及其附近的點表示一個新的mode B,如下圖所示。接著,判別器發現這個新的的病態mode B…..


生成器和判別器陷入這樣沒有意義的循環。我們梳理一下上面的環節,首先生成器 G(z)把很多不同的z均映射成某個x,而不是將部分z映射到mode A,部分z映射到mode B,但這不應該引起擔憂,因為可以訓練判別器來識別這個不好的mode A再改進G(z)即可;接著,訓練判別器環節也沒有問題,實踐中甚至擔憂判別器訓練得過好了而產生梯度消失;那麼問題應該出在最後一步:生成器把生成樣本全部都轉移放置到新的mode B下!顯然,生成器的改進是「過分」的,理想上生成器應該將部分生成樣本都轉移放置到 mode B下,保留部分生成樣本在mode A下,如下圖所示。

其實這並不奇怪,因為在訓練生成器時,目標函數為:

其過程為:生成器G(z)生成m個樣本{x1,x2,…,xi,…,xm},然後將m個x分別獨立送給判別器D(x)判定獲得梯度資訊。在上面的例子中,由於判別器不信任mode A而非常信任mode B,故對於任意生成樣本x,判別器都將指引其接近mode B:G(z)→B,也就是說對於任意x,判別器傳遞給生成器G(z)得到的梯度的方向是相同的,生成器按著該梯度方向更新參數極易把所有的生成樣本轉移到mode B下。
2.mini-batch discriminator
根據第一節的討論,認為原因還是出現在判別器上,因為判別器每次只能獨立處理一個樣本,生成器在每個樣本上獲得的梯度資訊缺乏「統一協調」,都指向了同一個方向,而且也不存在任何機制要求生成器的輸出結果彼此有較大差異。
小批量判別器給出的解決方案是:讓判別器不再獨立考慮一個樣本,而是同時考慮一個小批量的所有樣本。具體辦法如下:對於一個小批量的每個樣本{x1,x2,…,xi,…,xm},將判別器的某個中間層f(xi)的結果引出,其為一n維向量,將該向量與一個可學習的n x p x q維張量T相乘,得到樣本xi的p x q維的特徵矩陣Mi,可視為得到了p個q維特徵。
接著,計算每一個樣本xi與小批量中其他樣本的第r個特徵的差異和:

其中,Mi,r表示矩陣Mi的第r行,並使用L1範數表示兩個向量的差異。

那麼每個樣本都將會計算得到一個對應的向量:

最後將o(xi)也接引出的中間層的下一層L+1即可,也就是說在原來判別器L層的基礎上加了一個mini-batch層,其輸入是f(xi),而輸出是o(xi),中間還包含一個可學習參數T。相比較,原始的判別器要求給出樣本來源於訓練數據集的概率,而小批量判別器的任務仍然是輸出樣本來源於訓練數據集的概率,只不過它能力更強,因為它能利用批量樣本中的其他樣本作為附加資訊。
還是在第一節的例子中,使用小批量判別器,當發生模式崩潰的生成器需要更新時,G(z)先生成一個批量的樣本{G(z1),G(z2),…G(zm)},由於這些樣本都在mode A下,則計算得到的mini-batch層結果必然與訓練數據集的計算得到的mini-batch層結果有很大差異,捕捉到的差異資訊會使小批量判別器D(G(zi))值不會太低,小批量判別器不會簡單地認為對所有樣本給出相同的梯度方向。
3. 一個簡化版本
在Progressive GAN中,給出了一個簡化版本的小批量判別器,其思想與上述相同,只是計算方式比較簡單,對於判別器的輸入樣本{x1,x2,…,xm},抽取某中間層作為n維特徵有{f(x1),f(x2),…,f(xm)},計算每個維度的標準差並求均值,即:

其中

最後將o作為特徵圖與中間層的輸出拼接到一起。Progressive GAN的小批量判別器中不含有需要學習的參數,而是直接計算批量樣本的統計特徵,更為簡潔。
[1]Tim Salimans , et al. Improved Techniques for Training GANs. 2016.
[2]Karras, Tero, Aila, Timo, Laine, Samuli,等. Progressive Growing of GANs for Improved Quality, Stability, and Variation[J].
總結
今天首先將說明模式崩潰問題的本質,分析了產生模式崩潰的原因,並針對該問題給出了小批量判別器技巧,並在最後給出了一個更簡單的版本。