【GAN优化】小批量判别器如何解决模式崩溃问题
GAN的第二季開(kāi)始更新了,還是熟悉的配方,還是熟悉的味道。第一季更新了12篇小文,只解讀了GAN的冰山一角,第二季將作為第一季的“零零星星”的補(bǔ)充,講解包括其他的損失函數(shù)、訓(xùn)練算法等等方面,并且會(huì)擴(kuò)展到隱空間、離散數(shù)據(jù)等方向。今天將先介紹一個(gè)處理模式崩潰問(wèn)題的小方法—小批量判別器,作為對(duì)上一季模式崩潰問(wèn)題的補(bǔ)充吧。
作者&編輯 | 小米粥
1.?模式崩潰的原因
當(dāng)模式崩潰發(fā)生時(shí),生成器 G(z)往往會(huì)把很多不同的z均映射成某個(gè)x,(更確切地說(shuō),指x以及其附近的點(diǎn),用A表示),接下來(lái)更新判別器D(x)后,判別器會(huì)很快發(fā)現(xiàn)這個(gè)病態(tài)的mode A從而降低了對(duì)這個(gè)mode A的信任程度(信任程度即該樣本點(diǎn)來(lái)源于訓(xùn)練數(shù)據(jù)集的概率),而信任mode B,那么生成器就會(huì)把很多不同的z均映射成x',其中x'及其附近的點(diǎn)表示一個(gè)新的mode B,如下圖所示。接著,判別器發(fā)現(xiàn)這個(gè)新的的病態(tài)mode B.....
生成器和判別器陷入這樣沒(méi)有意義的循環(huán)。我們梳理一下上面的環(huán)節(jié),首先生成器 G(z)把很多不同的z均映射成某個(gè)x,而不是將部分z映射到mode A,部分z映射到mode B,但這不應(yīng)該引起擔(dān)憂,因?yàn)榭梢杂?xùn)練判別器來(lái)識(shí)別這個(gè)不好的mode A再改進(jìn)G(z)即可;接著,訓(xùn)練判別器環(huán)節(jié)也沒(méi)有問(wèn)題,實(shí)踐中甚至擔(dān)憂判別器訓(xùn)練得過(guò)好了而產(chǎn)生梯度消失;那么問(wèn)題應(yīng)該出在最后一步:生成器把生成樣本全部都轉(zhuǎn)移放置到新的mode B下!顯然,生成器的改進(jìn)是“過(guò)分”的,理想上生成器應(yīng)該將部分生成樣本都轉(zhuǎn)移放置到 mode B下,保留部分生成樣本在mode A下,如下圖所示。
其實(shí)這并不奇怪,因?yàn)樵谟?xùn)練生成器時(shí),目標(biāo)函數(shù)為:
其過(guò)程為:生成器G(z)生成m個(gè)樣本{x1,x2,...,xi,...,xm},然后將m個(gè)x分別獨(dú)立送給判別器D(x)判定獲得梯度信息。在上面的例子中,由于判別器不信任mode A而非常信任mode B,故對(duì)于任意生成樣本x,判別器都將指引其接近mode B:G(z)→B,也就是說(shuō)對(duì)于任意x,判別器傳遞給生成器G(z)得到的梯度的方向是相同的,生成器按著該梯度方向更新參數(shù)極易把所有的生成樣本轉(zhuǎn)移到mode B下。
2.mini-batch discriminator
根據(jù)第一節(jié)的討論,認(rèn)為原因還是出現(xiàn)在判別器上,因?yàn)榕袆e器每次只能獨(dú)立處理一個(gè)樣本,生成器在每個(gè)樣本上獲得的梯度信息缺乏“統(tǒng)一協(xié)調(diào)”,都指向了同一個(gè)方向,而且也不存在任何機(jī)制要求生成器的輸出結(jié)果彼此有較大差異。
小批量判別器給出的解決方案是:讓判別器不再獨(dú)立考慮一個(gè)樣本,而是同時(shí)考慮一個(gè)小批量的所有樣本。具體辦法如下:對(duì)于一個(gè)小批量的每個(gè)樣本{x1,x2,...,xi,...,xm},將判別器的某個(gè)中間層f(xi)的結(jié)果引出,其為一n維向量,將該向量與一個(gè)可學(xué)習(xí)的n x p x q維張量T相乘,得到樣本xi的p x q維的特征矩陣Mi,可視為得到了p個(gè)q維特征。
接著,計(jì)算每一個(gè)樣本xi與小批量中其他樣本的第r個(gè)特征的差異和:
其中,Mi,r表示矩陣Mi的第r行,并使用L1范數(shù)表示兩個(gè)向量的差異。
那么每個(gè)樣本都將會(huì)計(jì)算得到一個(gè)對(duì)應(yīng)的向量:
最后將o(xi)也接引出的中間層的下一層L+1即可,也就是說(shuō)在原來(lái)判別器L層的基礎(chǔ)上加了一個(gè)mini-batch層,其輸入是f(xi),而輸出是o(xi),中間還包含一個(gè)可學(xué)習(xí)參數(shù)T。相比較,原始的判別器要求給出樣本來(lái)源于訓(xùn)練數(shù)據(jù)集的概率,而小批量判別器的任務(wù)仍然是輸出樣本來(lái)源于訓(xùn)練數(shù)據(jù)集的概率,只不過(guò)它能力更強(qiáng),因?yàn)樗芾门繕颖局械钠渌麡颖咀鳛楦郊有畔ⅰ?br />
還是在第一節(jié)的例子中,使用小批量判別器,當(dāng)發(fā)生模式崩潰的生成器需要更新時(shí),G(z)先生成一個(gè)批量的樣本{G(z1),G(z2),...G(zm)},由于這些樣本都在mode A下,則計(jì)算得到的mini-batch層結(jié)果必然與訓(xùn)練數(shù)據(jù)集的計(jì)算得到的mini-batch層結(jié)果有很大差異,捕捉到的差異信息會(huì)使小批量判別器D(G(zi))值不會(huì)太低,小批量判別器不會(huì)簡(jiǎn)單地認(rèn)為對(duì)所有樣本給出相同的梯度方向。
3.?一個(gè)簡(jiǎn)化版本
在Progressive GAN中,給出了一個(gè)簡(jiǎn)化版本的小批量判別器,其思想與上述相同,只是計(jì)算方式比較簡(jiǎn)單,對(duì)于判別器的輸入樣本{x1,x2,...,xm},抽取某中間層作為n維特征有{f(x1),f(x2),...,f(xm)},計(jì)算每個(gè)維度的標(biāo)準(zhǔn)差并求均值,即:
其中
最后將o作為特征圖與中間層的輸出拼接到一起。Progressive GAN的小批量判別器中不含有需要學(xué)習(xí)的參數(shù),而是直接計(jì)算批量樣本的統(tǒng)計(jì)特征,更為簡(jiǎn)潔。
[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].
總結(jié)
今天首先將說(shuō)明模式崩潰問(wèn)題的本質(zhì),分析了產(chǎn)生模式崩潰的原因,并針對(duì)該問(wèn)題給出了小批量判別器技巧,并在最后給出了一個(gè)更簡(jiǎn)單的版本。
知識(shí)星球推薦
_
_
有三AI知識(shí)星球由言有三維護(hù),內(nèi)設(shè)AI知識(shí)匯總,AI書籍,網(wǎng)絡(luò)結(jié)構(gòu),看圖猜技術(shù),數(shù)據(jù)集,項(xiàng)目開(kāi)發(fā),Github推薦,AI1000問(wèn)八大學(xué)習(xí)板塊。其中網(wǎng)絡(luò)結(jié)構(gòu)1000變部分有大量GAN實(shí)戰(zhàn)相關(guān)的內(nèi)容。
【年終總結(jié)】2019年有三AI知識(shí)星球做了什么,明年又會(huì)做什么
轉(zhuǎn)載文章請(qǐng)后臺(tái)聯(lián)系
侵權(quán)必究
往期精選
_
【雜談】有三AI知識(shí)星球最近都GAN了哪些內(nèi)容?
【雜談】GAN對(duì)人臉圖像算法產(chǎn)生了哪些影響?
【完結(jié)】12篇GAN的優(yōu)化文章大盤點(diǎn),濃濃的數(shù)學(xué)味兒
總結(jié)
以上是生活随笔為你收集整理的【GAN优化】小批量判别器如何解决模式崩溃问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【杂谈】为了让大家学好深度学习模型设计和
- 下一篇: 【NLP机器学习基础】从线性回归和Log