【GAN优化】小批量判别器如何解决模式崩溃问题
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].
總結
今天首先將說明模式崩潰問題的本質,分析了產生模式崩潰的原因,并針對該問題給出了小批量判別器技巧,并在最后給出了一個更簡單的版本。
知識星球推薦
_
_
有三AI知識星球由言有三維護,內設AI知識匯總,AI書籍,網絡結構,看圖猜技術,數據集,項目開發,Github推薦,AI1000問八大學習板塊。其中網絡結構1000變部分有大量GAN實戰相關的內容。
【年終總結】2019年有三AI知識星球做了什么,明年又會做什么
轉載文章請后臺聯系
侵權必究
往期精選
_
【雜談】有三AI知識星球最近都GAN了哪些內容?
【雜談】GAN對人臉圖像算法產生了哪些影響?
【完結】12篇GAN的優化文章大盤點,濃濃的數學味兒
總結
以上是生活随笔為你收集整理的【GAN优化】小批量判别器如何解决模式崩溃问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【杂谈】为了让大家学好深度学习模型设计和
- 下一篇: 【NLP机器学习基础】从线性回归和Log