本文是Deep Learning Course總結(jié)系列的第五篇,本文的主要內(nèi)容是對(duì)生成模型PixelCNN,PixelRNN,VAE,GANs進(jìn)行介紹。
本系列前四篇傳送門(mén):第一篇 [Deep Learning] 神經(jīng)網(wǎng)絡(luò)基礎(chǔ);第二篇 [Deep Learning] 卷積神經(jīng)網(wǎng)絡(luò) CNNs;第三篇 [Deep Learning] 集成學(xué)習(xí)Ensemble Learning&遷移學(xué)習(xí)Transfer Learning ;第四篇 [ [Deep Learning] 循環(huán)神經(jīng)網(wǎng)絡(luò)RNN ](http://www.lxweimin.com/p/5c22b41e9f07)。
生成模型分類
無(wú)監(jiān)督學(xué)習(xí)包括聚類K-means、降維PCA、特征學(xué)習(xí)Antoencoders、密度估計(jì)、生成模型(圖片生成、超分辨率、圖片著色、時(shí)間序列數(shù)據(jù)模擬和計(jì)劃[增強(qiáng)學(xué)習(xí)]、潛在特征推斷)等,其中生成模型的分類歷史如下圖所示:
Explicit生成模型假設(shè)參數(shù)空間已知或可以近似估計(jì),然而真實(shí)數(shù)據(jù)的分布往往是十分復(fù)雜的。
PixelRNN & PixelCNN
由 Google 提出的 PixelRNN和 PixelCNN從左到右,從上到下,逐步生成一個(gè)個(gè)像素,最終生成整張圖像。它的基本原理是訓(xùn)練數(shù)據(jù)的概率最大化最優(yōu)化,以之前生成的像素作為輸入,輸出對(duì)于下一個(gè)像素的值的統(tǒng)計(jì)分布的預(yù)測(cè),然后從分布采樣出下一個(gè)像素。
由于逐個(gè)生成像素,PixelRNN & PixelCNN的最大問(wèn)題是速度太慢,但Pixel 系列的思想尤其適合生成音頻和文字,例如 WaveNet,它用此前生成的音頻采樣作為輸入,生成下一個(gè)采樣,不斷重復(fù)此過(guò)程,最終可生成高質(zhì)量的語(yǔ)音和音樂(lè)。
AE & VAE
-
自動(dòng)編碼機(jī)(Auto Encoder):針對(duì)非標(biāo)簽化數(shù)據(jù)學(xué)習(xí)其低維特征表示
通過(guò)編碼器降維關(guān)注更為重要的特征(下采樣downsampling),使用解碼器恢復(fù)圖像(上采樣upsampling)并使用L2損失函數(shù)判斷重構(gòu)圖像和原圖像的相似度。由于AE 中沒(méi)有更先進(jìn)的判別網(wǎng)絡(luò),AE 的優(yōu)化目標(biāo)實(shí)際只是讓 x 和 G(E(x)) 盡量在像素上接近。這并不是個(gè)好目標(biāo),因此 AE 生成的圖像往往很模糊、質(zhì)量低。但AE生成的圖像更均勻,光滑,訓(xùn)練過(guò)程更穩(wěn)定,這也是它可以與GAN后續(xù)結(jié)合的優(yōu)點(diǎn)。
Antoencoders特征降維 - VAE:VAE(Variational Auto-Encoder)能解決 AE 的一個(gè)缺點(diǎn):AE 的 G 只能保證將由 x 生成的 z 還原為 x。如果我們隨機(jī)生成 1 個(gè) z,經(jīng)過(guò) AE 的 G 后往往不會(huì)得到有效的圖像。而 VAE 可讓 E 生成的 z 盡量符合某個(gè)指定分布,例如標(biāo)準(zhǔn)差為 1 的多維正態(tài)分布。那么此時(shí)只需從這個(gè)分布采樣出 z,就能通過(guò) G 得到有效的圖像。
VAE的優(yōu)缺點(diǎn)及改進(jìn)方向
作為生成模型的AE也可以用于分類問(wèn)題:編碼器和Softmax函數(shù)結(jié)合適用于樣本量不足的分類監(jiān)督學(xué)習(xí),能夠避免樣本量不足時(shí)的過(guò)擬合問(wèn)題。
對(duì)上述幾種方法的對(duì)比總結(jié):
GAN
GAN模型于2014年由Ian Goodfellow提出[1],GAN使用博弈的思想由一個(gè)生成器和一個(gè)判別器構(gòu)成,生成器G從給定噪聲z中(一般是指均勻分布或者正態(tài)分布)產(chǎn)生合成數(shù)據(jù),判別器D分辨生成器的的輸出和真實(shí)數(shù)據(jù),在訓(xùn)練過(guò)程中,雙方不斷優(yōu)化自己,直到D無(wú)法再區(qū)分真實(shí)數(shù)據(jù)和G產(chǎn)生的數(shù)據(jù),到達(dá)納什均衡。:
其中優(yōu)化D的部分:當(dāng)x來(lái)自真實(shí)數(shù)據(jù)集data時(shí),D(x)應(yīng)該越接近1越好,而當(dāng)處理G產(chǎn)生的數(shù)據(jù)G(z)時(shí),D(G(z))應(yīng)該越接近0越好,所以式子中,log(D(x)),log(1-D(G(z)))應(yīng)該越大越好;
而G作為生成器,它所要做的就是迷惑D,讓D將自己生成的數(shù)據(jù)誤認(rèn)為成來(lái)自真實(shí)數(shù)據(jù)集的數(shù)據(jù),所以D(G(z))應(yīng)該越接近1越好,即log(1-D(G(z)))應(yīng)該越小越好。然而當(dāng)優(yōu)化G時(shí),由于在學(xué)習(xí)初期,G的表現(xiàn)較差,D很容易區(qū)分出G產(chǎn)生的數(shù)據(jù),即D(G(z))=0, 導(dǎo)致log(1-D(G(z)))可能會(huì)出現(xiàn)飽和的問(wèn)題。在出現(xiàn)這種問(wèn)題時(shí),可以轉(zhuǎn)而用最大化log(D(G(z)))來(lái)優(yōu)化G。
GAN優(yōu)化
GAN自提出以來(lái),就存在著訓(xùn)練困難、不易收斂、生成器和判別器的loss無(wú)法指示訓(xùn)練進(jìn)程、生成樣本缺乏多樣性等問(wèn)題。從那時(shí)起,很多研究人員就在嘗試解決,并提出了改進(jìn)方案,切實(shí)解決了部分問(wèn)題,如生成器梯度消失導(dǎo)致的訓(xùn)練困難。當(dāng)然也還有很多問(wèn)題亟待解決,如生成樣本的評(píng)價(jià)指標(biāo)問(wèn)題。
DCGAN (Deep Convolutional GAN)
樸素GAN在生成器和判別器在結(jié)構(gòu)上是通過(guò)以多層全連接網(wǎng)絡(luò)為主體的多層感知機(jī)(Multi-layer Perceptron, MLP) 實(shí)現(xiàn)的,然而其調(diào)參難度較大,訓(xùn)練失敗相當(dāng)常見(jiàn),生成圖片質(zhì)量也相當(dāng)不佳,尤其是對(duì)較復(fù)雜的數(shù)據(jù)集而言。由于卷積神經(jīng)網(wǎng)絡(luò)比MLP有更強(qiáng)的擬合與表達(dá)能力,2015年Alex Radford提出使用卷積架構(gòu)取代GAN中的全連接層[2]。DCGAN去掉了池化層,采用批標(biāo)準(zhǔn)化(Batch Normalization, BN)等技術(shù),并強(qiáng)調(diào)了隱藏層分析和可視化技術(shù)對(duì)GAN訓(xùn)練的重要性和指導(dǎo)作用。
WGAN (Wasserstein GAN)
對(duì)于GAN的全局最優(yōu)解,固定G優(yōu)化D,D的最佳情況為:
根據(jù)D(x)的全局最優(yōu)解可以得出:當(dāng)判別器過(guò)優(yōu)時(shí),生成器的loss可以近似等價(jià)于優(yōu)化真實(shí)分布與生成器產(chǎn)生數(shù)據(jù)分布的JS散度。然而JS對(duì)于兩個(gè)完全沒(méi)有overlap的情況無(wú)法收斂。具體推導(dǎo)可參考:https://zhuanlan.zhihu.com/p/39398823。WGAN闡述了樸素GAN因生成器梯度消失而訓(xùn)練失敗的原因,并用Wasserstein距離替代了Jensen-Shannon散度,在理論上解決了梯度消失問(wèn)題。
此外,WGAN還從理論上給出了樸素GAN發(fā)生模式坍塌(mode collapse)的原因,本質(zhì)上是過(guò)擬合到某一點(diǎn)
模式坍塌的幾種解決方案包括正則化、增加label(半監(jiān)督GAN)、fe
ature matching
WGAN從實(shí)驗(yàn)角度說(shuō)明了WGAN在這一點(diǎn)上的優(yōu)越性。
雖然WGAN基本解決了訓(xùn)練失敗的問(wèn)題,但是無(wú)論是訓(xùn)練過(guò)程還是是收斂速度都要比常規(guī) GAN 更慢。
WGAN-GP增加梯度懲罰項(xiàng)
Progressive GAN
BIgGAN
GraphSGAN
CVAE-GAN
CVAE-GAN包括4 個(gè)神經(jīng)網(wǎng)絡(luò):
E:編碼器(Encoder),輸入圖像 x,輸出編碼 z。
如果還給定了類別 c,那么生成的 z 就會(huì)質(zhì)量更高,即更隨機(jī),因?yàn)榭梢瞥齝中已包含的信息。
G:生成器(Generator)。輸入編碼 z,輸出圖像 x。
如果還給定了類別 c,那么就會(huì)生成屬于類別 c 的圖像。
C:分類器(Classifier)。輸入圖像 x,輸出所屬類別 c。
D:辨別器(Discriminator)。輸入圖像 x,判斷它的真實(shí)度。
CVAE 生成的圖像中規(guī)中矩,但是模糊,CGAN 生成的圖像清晰,但有時(shí)會(huì)有明顯錯(cuò)誤,所以 兩者互補(bǔ)相結(jié)合后網(wǎng)絡(luò)共有三個(gè)目標(biāo): 對(duì)于從 x 生成的 z,G 應(yīng)能還原出接近 x 的 x'(像素上的接近)。這來(lái)自 AE 的思想。G 生成的圖像應(yīng)可由 D 鑒別為屬于真實(shí)圖像。這來(lái)自 GAN 的思想。G 生成的圖像應(yīng)可由 C 鑒別為屬于 c 類別。這與 InfoGAN 的思想有些相似。
最終的z在不同 c 下的效果:
不同 c,代表不同的明星。相同 z,代表其他的一切語(yǔ)義特征(如表情,角度,光照等等)都一模一樣。通過(guò)保持 z,改變 c,可輕松實(shí)現(xiàn)換臉效果。由于 CVAE-GAN 生成的樣本質(zhì)量很高,還可用于增強(qiáng)訓(xùn)練樣本集,進(jìn)行語(yǔ)義插值等。
cGAN (conditional GAN)
為了生成指定標(biāo)簽的數(shù)據(jù),在CGAN中,生成器不僅要輸入隨機(jī)數(shù),還需要將之與標(biāo)簽類別做拼接(concat,一般要將標(biāo)簽轉(zhuǎn)換成如one-hot或其它的tensor),再將其輸入生成器生成所需要的數(shù)據(jù)。此外,對(duì)判別器,也需要將真實(shí)數(shù)據(jù)或生成數(shù)據(jù)與對(duì)應(yīng)的標(biāo)簽類別做拼接,再輸入判別器的神經(jīng)網(wǎng)絡(luò)進(jìn)行識(shí)別和判斷。
InfoGAN(MutualInformation)本質(zhì)上也可以看作是一種cGAN。它將原先生成器上輸入的z進(jìn)行分解,除了原先的噪聲z以外,還分解出一個(gè)隱含編碼c。其中c除了可以表示類別以外,還可以包含多種變量。以MNIST數(shù)據(jù)集為例,還可以表示諸如光照方向,字體的傾斜角度,筆畫(huà)粗細(xì)等,這使得生成過(guò)程具有一定程度的可控性,生成結(jié)果也具備了一定的可解釋性。
pix2pix
生成器輸入除隨機(jī)數(shù)z以外,將圖片x(如灰度圖,素描圖等)作為條件進(jìn)行拼接,輸出的是轉(zhuǎn)換后的圖片(如照片)。而判別器輸入的是轉(zhuǎn)換后的圖片或真實(shí)照片,特別之處在于,文章發(fā)現(xiàn),判別器也將生成器輸入的圖片x作為條件進(jìn)行拼接,會(huì)極大提高實(shí)驗(yàn)的結(jié)果,其結(jié)構(gòu)圖如下所示(此處結(jié)構(gòu)圖隱去了生成器的隨機(jī)數(shù)z):
cycleGAN、DiscoGAN & DualGAN
Pix2Pix訓(xùn)練需要相互配對(duì)的圖片x與y,然而,這類數(shù)據(jù)是極度缺乏的,對(duì)此CycleGAN提出了無(wú)需配對(duì)數(shù)據(jù)的圖像翻譯方法。CycleGAN基于循環(huán)一致性(Cycle-Consistent),兩類圖像經(jīng)過(guò)兩次相應(yīng)的映射后,又會(huì)變?yōu)樵瓉?lái)的圖像,簡(jiǎn)單有效地解決了這一問(wèn)題。
而與CycleGAN十分類似的DiscoGAN、DualGAN與其最大區(qū)別在于DiscoGAN使用最簡(jiǎn)單直白的CNN編碼器和解碼器,使用全連接網(wǎng)絡(luò)當(dāng)轉(zhuǎn)換器;CycleGAN使用了ResNet充當(dāng)轉(zhuǎn)換器;DualGAN則是使用類似WGAN的形式來(lái)表示。
StarGAN
StarGAN作為CycleGAN的推廣,將兩兩映射變成了多領(lǐng)域之間的映射,能夠通過(guò)一個(gè)生成器解決所有跨域類別問(wèn)題。