GAN:前景廣闊荔睹,理論與應(yīng)用極速發(fā)展中
GAN忙灼,全稱為Generative Adversarial Nets味咳,直譯為“生成式對抗網(wǎng)絡(luò)”肮柜。GAN作為生成模型的代表棍弄,自2014年被Ian Goodfellow提出后引起了業(yè)界的廣泛關(guān)注并不斷涌現(xiàn)出新的改進(jìn)模型望薄,深度學(xué)習(xí)泰斗之一的Yann LeCun高度評價(jià)GAN是機(jī)器學(xué)習(xí)界近十年來最有意思的想法。
GAN始終存在訓(xùn)練難照卦、穩(wěn)定性差以及模型崩塌(Model Collapse)等問題式矫。產(chǎn)生這種不匹配的根本原因其實(shí)還是對GAN背后產(chǎn)生作用的理論機(jī)制沒有探索清楚。
在推動(dòng)GAN應(yīng)用方面役耕,2017年有兩項(xiàng)技術(shù)是非常值得關(guān)注的采转。其中一個(gè)是CycleGAN,其本質(zhì)是利用對偶學(xué)習(xí)并結(jié)合GAN機(jī)制來優(yōu)化生成圖片的效果的,采取類似思想的包括DualGAN以及DiscoGAN等故慈,包括后續(xù)的很多改進(jìn)模型例如StarGAN等板熊。CycleGAN的重要性主要在于使得GAN系列的模型不再局限于監(jiān)督學(xué)習(xí),它引入了無監(jiān)督學(xué)習(xí)的方式察绷,只要準(zhǔn)備兩個(gè)不同領(lǐng)域的圖片集合即可干签,不需要訓(xùn)練模型所需的兩個(gè)領(lǐng)域的圖片一一對應(yīng),這樣極大擴(kuò)展了它的使用范圍并降低了應(yīng)用的普及難度拆撼。
另外一項(xiàng)值得關(guān)注的技術(shù)是英偉達(dá)采取“漸進(jìn)式生成”技術(shù)路線的GAN方案容劳,這項(xiàng)方案的引人之處在于使得計(jì)算機(jī)可以生成1024*1024大小的高清圖片,它是目前無論圖像清晰度還是圖片生成質(zhì)量都達(dá)到最好效果的技術(shù)闸度,其生成的明星圖片幾乎可以達(dá)到以假亂真的效果(參考圖3)竭贩。英偉達(dá)這項(xiàng)由粗到細(xì),首先生成圖像的模糊輪廓莺禁,再逐步添加細(xì)節(jié)的思想其實(shí)并非特別新穎的思路留量,在之前的StackGAN等很多方案都采用了類似思想,它的獨(dú)特之處在于這種由粗到細(xì)的網(wǎng)絡(luò)結(jié)構(gòu)是動(dòng)態(tài)生成的而非事先固定的靜態(tài)網(wǎng)絡(luò)哟冬,更關(guān)鍵的是產(chǎn)生的圖片效果特別好
首先楼熄,有一個(gè)一代的 generator,它能生成一些很差的圖片浩峡,然后有一個(gè)一代的 discriminator可岂,它能準(zhǔn)確的把生成的圖片,和真實(shí)的圖片分類翰灾,簡而言之青柄,這個(gè) discriminator 就是一個(gè)二分類器,對生成的圖片輸出 0预侯,對真實(shí)的圖片輸出 1致开。
接著,開始訓(xùn)練出二代的 generator萎馅,它能生成稍好一點(diǎn)的圖片双戳,能夠讓一代的 discriminator 認(rèn)為這些生成的圖片是真實(shí)的圖片。然后會訓(xùn)練出一個(gè)二代的 discriminator糜芳,它能準(zhǔn)確的識別出真實(shí)的圖片飒货,和二代 generator 生成的圖片。以此類推峭竣,會有三代塘辅,四代。皆撩。扣墩。n 代的 generator 和 discriminator哲银,最后 discriminator 無法分辨生成的圖片和真實(shí)圖片,這個(gè)網(wǎng)絡(luò)就擬合了呻惕。
對抗樣本
對抗樣本(adversarial examples)是機(jī)器學(xué)習(xí)模型的輸入荆责,攻擊者故意設(shè)計(jì)它們以引起模型出錯(cuò);它們就像是機(jī)器的視覺錯(cuò)覺。
對抗樣本指的是一個(gè)經(jīng)過微小調(diào)整就可以讓機(jī)器學(xué)習(xí)算法輸出錯(cuò)誤結(jié)果的輸入樣本亚脆。在圖像識別中做院,可以理解為原來被一個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)分類為一個(gè)類(比如“熊貓”)的圖片,經(jīng)過非常細(xì)微甚至人眼無法察覺的改動(dòng)后濒持,突然被誤分成另一個(gè)類(比如“長臂猿”)键耕。
對抗訓(xùn)練
對抗訓(xùn)練是防御對抗樣本攻擊的一種方法。將對抗樣本和正常樣本一起訓(xùn)練是一種有效的正則化柑营,可以提高模型的準(zhǔn)確度郁竟,同時(shí)也能有效降低對抗樣本的攻擊成功率。不過這種防御也只是針對同樣用來產(chǎn)生訓(xùn)練集中的對抗樣本的方法由境。
確實(shí)在下圖中可以看到,訓(xùn)練集是正常樣本和對抗樣本蓖议,測試集是正常樣本的紅線比訓(xùn)練集和測試集都是正常樣本的錯(cuò)誤率要降低虏杰,說明對抗訓(xùn)練是有正則化的功能。
Figure 9
在訓(xùn)練的時(shí)候直接生成對抗樣本是比較低效的勒虾,之前提到的FGSM是一個(gè)高效的對抗訓(xùn)練方法纺阔。只需要改變目標(biāo)函數(shù)就能在訓(xùn)練每個(gè)正常樣本的同時(shí)也考慮了對抗樣本。模型訓(xùn)練去給對抗樣本賦予和正常樣本原分類同樣的類別修然。
用經(jīng)過FGSM訓(xùn)練的網(wǎng)絡(luò)笛钝,可以有效的防御用FGSM產(chǎn)生的對抗樣本攻擊,但是如果換其他對抗攻擊方法愕宋,也會被攻破玻靡。
對抗樣本的工作思路,可以有以下兩個(gè)方面的意義:
1)對抗樣本主要訴求是尋找模型的薄弱點(diǎn)中贝,并對此展開攻擊囤捻。這種思路反過來就可以應(yīng)用于設(shè)計(jì)泛化性和魯棒性更好的模型。
2)對抗場景下的一些現(xiàn)實(shí)應(yīng)用邻寿,如反作弊和風(fēng)控系統(tǒng)蝎土,可以模擬產(chǎn)生badcase,提早對可能出現(xiàn)的效果反彈做預(yù)判和準(zhǔn)備绣否,甚至可以提前反spam誊涯。但是這一應(yīng)用的難點(diǎn)是:模擬產(chǎn)生的badcase是否是物理世界中真實(shí)可能出現(xiàn)的badcase。
結(jié)論
要為集成模型創(chuàng)建對抗樣本蒜撮,因?yàn)樘荻确椒ǖ膯栴}暴构,難度會加大。但是生成的算法更為可行有效。
單個(gè)模型出現(xiàn)盲點(diǎn)可以由其他模型彌補(bǔ)丹壕,采用的會是輸出結(jié)果最好的模型數(shù)據(jù)庆械。
我們發(fā)現(xiàn)當(dāng)我們用動(dòng)態(tài)創(chuàng)建的對抗模型來訓(xùn)練算法時(shí),能夠解決這些對抗樣本的問題菌赖。這是因?yàn)楫?dāng)模型面對這些可能出現(xiàn)問題的對抗低概率區(qū)域時(shí)缭乘,可以產(chǎn)生更高的“免疫力”。這同時(shí)也支持了低概率區(qū)域的論點(diǎn)琉用,在這些區(qū)域的對抗樣本更難處理堕绩。
訓(xùn)練GAN的一些技巧
輸入規(guī)范化到(-1,1)之間邑时,最后一層的激活函數(shù)使用tanh(BEGAN除外)
使用wassertein GAN的損失函數(shù)奴紧,
如果有標(biāo)簽數(shù)據(jù)的話,盡量使用標(biāo)簽晶丘,也有人提出使用反轉(zhuǎn)標(biāo)簽效果很好黍氮,另外使用標(biāo)簽平滑,單邊標(biāo)簽平滑或者雙邊標(biāo)簽平滑
使用mini-batch norm浅浮, 如果不用batch norm 可以使用instance norm 或者weight norm
避免使用RELU和pooling層沫浆,減少稀疏梯度的可能性,可以使用leakrelu激活函數(shù)
優(yōu)化器盡量選擇ADAM滚秩,學(xué)習(xí)率不要設(shè)置太大专执,初始1e-4可以參考,另外可以隨著訓(xùn)練進(jìn)行不斷縮小學(xué)習(xí)率郁油,
給D的網(wǎng)絡(luò)層增加高斯噪聲本股,相當(dāng)于是一種正則
DCGAN原理介紹
DCGAN是繼GAN之后比較好的改進(jìn),其主要的改進(jìn)主要是在網(wǎng)絡(luò)結(jié)構(gòu)上桐腌,到目前為止拄显,DCGAN的網(wǎng)絡(luò)結(jié)構(gòu)還是被廣泛的使用,DCGAN極大的提升了GAN訓(xùn)練的穩(wěn)定性以及生成結(jié)果質(zhì)量案站。
論文的主要貢獻(xiàn)是:
◆ 為GAN的訓(xùn)練提供了一個(gè)很好的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)凿叠。
◆ 表明生成的特征具有向量的計(jì)算特性。
D(x)表示D網(wǎng)絡(luò)判斷真實(shí)圖片是否真實(shí)的概率(因?yàn)閤是真實(shí)的嚼吞,所以對于D來說盒件,這個(gè)值越接近1越好)。而D(G(z))D(G(z))是為了D判斷G生成的圖片是否真實(shí)的概率舱禽。
G的目的:G應(yīng)該希望自己生成的圖片“越接近真實(shí)越好”炒刁。也就是說,G希望D(G(z))D(G(z))盡可能得大誊稚,這是V(D,G)V(D,G)會變小翔始。
D的目的:D的能力越強(qiáng)罗心,D(x)D(x)應(yīng)該越大,D(G(x))D(G(x))應(yīng)該越小城瞎。因此D的目的和G不同渤闷,D希望V(D,G)V(D,G)越大越好。
DCGAN對卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)做了一些改變脖镀,以提高樣本的質(zhì)量和收斂的速度飒箭,這些改變有:
取消所有pooling層。G網(wǎng)絡(luò)中使用轉(zhuǎn)置卷積(transposed convolutional layer)進(jìn)行上采樣蜒灰,D網(wǎng)絡(luò)中用加入stride的卷積代替pooling弦蹂。
在D和G中均使用batch normalization
去掉FC層,使網(wǎng)絡(luò)變?yōu)槿矸e網(wǎng)絡(luò)
G網(wǎng)絡(luò)中使用ReLU作為激活函數(shù)强窖,最后一層使用tanh
D網(wǎng)絡(luò)中使用LeakyReLU作為激活函數(shù)
DCGAN中的G網(wǎng)絡(luò)示意:
DCGAN的生成器網(wǎng)絡(luò)結(jié)構(gòu)如上圖所示凸椿,相較原始的GAN,DCGAN幾乎完全使用了卷積層代替全鏈接層翅溺,判別器幾乎是和生成器對稱的脑漫,從上圖中我們可以看到,整個(gè)網(wǎng)絡(luò)沒有pooling層和上采樣層的存在咙崎,實(shí)際上是使用了帶步長(fractional-strided)的卷積代替了上采樣优幸,以增加訓(xùn)練的穩(wěn)定性。
DCGAN能改進(jìn)GAN訓(xùn)練穩(wěn)定的原因主要有:
◆ 使用步長卷積代替上采樣層叙凡,卷積在提取圖像特征上具有很好的作用,并且使用卷積代替全連接層密末。
◆ 生成器G和判別器D中幾乎每一層都使用batchnorm層握爷,將特征層的輸出歸一化到一起,加速了訓(xùn)練严里,提升了訓(xùn)練的穩(wěn)定性新啼。(生成器的最后一層和判別器的第一層不加batchnorm)
◆ 在判別器中使用leakrelu激活函數(shù),而不是RELU刹碾,防止梯度稀疏燥撞,生成器中仍然采用relu,但是輸出層采用tanh
◆ 使用adam優(yōu)化器訓(xùn)練迷帜,并且學(xué)習(xí)率最好是0.0002物舒,(我也試過其他學(xué)習(xí)率,不得不說0.0002是表現(xiàn)最好的了)
史上最強(qiáng)GAN圖像生成器—BigGAN
BigGAN在訓(xùn)練中 Batch 采用了很大的 Batch戏锹,已經(jīng)達(dá)到了 2048(我們平常訓(xùn)練 Batch 正常都是 64 居多)冠胯,在卷積的通道上也是變大了,還有就是網(wǎng)絡(luò)的參數(shù)變多了锦针,在 2048 的 Batch 下整個(gè)網(wǎng)絡(luò)的參數(shù)達(dá)到了接近 16 億