? ? ? ? ?所謂的對(duì)抗網(wǎng)絡(luò)可以歸結(jié)為unsupervised learning 或者 generative model。從無監(jiān)督學(xué)習(xí)來進(jìn)行feature representation,有k-means聚類算法,auto-encoders[2],以及09年的Deep belief networks等等莺褒。從生成模型的角度來說,我們需要讓算法能學(xué)習(xí)到數(shù)據(jù)的分布情況,而這個(gè)分布從Bayes觀點(diǎn)來說,可以認(rèn)為是class-conditional probability末盔。然而對(duì)于復(fù)雜的數(shù)據(jù)筑舅,例如高分辨率的圖像座慰,學(xué)習(xí)到它的像素的分布情況是個(gè)極其困難的問題。所以翠拣,對(duì)于生成natural images版仔,之前的算法一直沒有取得好的效果。最近的一些算法就基本解決了這個(gè)問題误墓,比如variational autoencoder[3],簡(jiǎn)稱VAE.以及我們介紹過的adversarial networks[4]蛮粮。Good fellow 14年提出的對(duì)抗網(wǎng)絡(luò),應(yīng)該沒有想到它現(xiàn)在會(huì)這么火爆谜慌。
對(duì)抗網(wǎng)絡(luò)可以認(rèn)為是一個(gè)生成模型和一個(gè)判別模型組成的然想。一般情況下,生成模型和判別模型都是使用的神經(jīng)網(wǎng)絡(luò)的算法欣范,比如感知器变泄,或者卷積神經(jīng)網(wǎng)絡(luò)。對(duì)于對(duì)抗網(wǎng)絡(luò)恼琼,經(jīng)過所謂的對(duì)抗過程的訓(xùn)練之后妨蛹,Generative networks可以生成realistic image,接近于訓(xùn)練圖片晴竞,但又不完全一樣蛙卤。所以,生成網(wǎng)絡(luò)是學(xué)習(xí)了一個(gè)訓(xùn)練數(shù)據(jù)的近似分布噩死。對(duì)于判別網(wǎng)絡(luò)也能進(jìn)行訓(xùn)練數(shù)據(jù)的很好的區(qū)分颤难,比如Classify。DCGAN論文中有一個(gè)貢獻(xiàn)就是將disciminator用于feature extractor已维,然后加了個(gè)l2-svm乐严,進(jìn)行分類,取得了不錯(cuò)的效果衣摩,而且又通過“反卷積”可視化[5]昂验,通過觀察捂敌,的確學(xué)到了很明顯物體結(jié)構(gòu)特征。
DCGAN是將卷積神經(jīng)網(wǎng)絡(luò)和對(duì)抗網(wǎng)絡(luò)結(jié)合起來的一篇經(jīng)典論文[19]既琴。其中作者之一是Facebook AI Rearch 的 Soumith Chintala占婉。他和他團(tuán)隊(duì)發(fā)表了幾篇重要的相關(guān)論文。Soumith 的github地址為[6],在youtube的關(guān)于GANs的演講地址為[7].
(如果要從事這方面的研究甫恩,一定要關(guān)注該人的動(dòng)態(tài))逆济。
本博文主要內(nèi)容如下:
1)先介紹DCGAN
2)然后介紹下我的開源項(xiàng)目
3)在從理論上介紹生成模型
4)詳細(xì)介紹DCGAN的架構(gòu)和實(shí)驗(yàn)
5)介紹有條件的DCGAN網(wǎng)絡(luò)
6)分析GANs的未來。
從上一篇博文了解到磺箕,對(duì)抗網(wǎng)絡(luò)是由一個(gè)判別模型和生成模型組成奖慌。網(wǎng)絡(luò)結(jié)構(gòu)大致如下圖。
G代表生成模型松靡,D代表判別模型简僧。G和D的對(duì)抗過程可以認(rèn)為一個(gè)假幣制造者和銀行柜員的對(duì)抗:銀行柜員(D)不斷的學(xué)習(xí)假幣和真幣之間的區(qū)別來預(yù)防假幣制造者(G),而假幣制造者也不斷學(xué)習(xí)真幣的樣貌雕欺,制造假幣岛马,以欺騙銀行柜員。
那對(duì)于基于神經(jīng)網(wǎng)絡(luò)的gan屠列,其中的大致學(xué)習(xí)過程如下啦逆。
Z是噪聲,也就是G的輸入笛洛,可以是高斯噪聲夏志,一般為均勻噪聲;
經(jīng)過G之后生成 fake image ——G(z),然后將G(z)和X作為D的輸入苛让,最后的D的輸出表示該數(shù)據(jù)為real的可能性沟蔑,該值范圍0-1。至于更詳細(xì)的參看上一篇博文或者其他資料蝌诡。
Gans的大致情況如上文所說溉贿,其中DCGAN就是基于convnets的Gans,其他沒有什么差別浦旱。在DCGAN中宇色,G的網(wǎng)絡(luò)結(jié)構(gòu)是需要進(jìn)行up-sample , 所以使用的“de-convolution”層抢蚀,而對(duì)于D則是比較普遍的卷基層進(jìn)行下采樣。
本節(jié)介紹下我根據(jù)本文實(shí)現(xiàn)的開源項(xiàng)目Condition-Gans(Tensorflow)叠艳。
https://github.com/zhangqianhui/Conditional-Gans
關(guān)于DCGAN捕发,github很多版本的實(shí)現(xiàn),那博主實(shí)現(xiàn)的其實(shí)是condition-dcgan凡纳,也就是有條件的卷積對(duì)抗網(wǎng)絡(luò)答渔,不同于原paper。2014年的一篇論文《Conditional Generative Adversarial Nets》[8]邻薯,第一次提出了有條件的對(duì)抗網(wǎng)絡(luò)寿羞,通過label难菌,來指定生成圖片的輸出铝量。但是論文并沒有提供代碼倘屹,所以,博主就在DCGAN上進(jìn)行來小小的改進(jìn)慢叨,所以也就有了Condition-Gans纽匙。做這個(gè)項(xiàng)目,主要為了以后的對(duì)抗網(wǎng)絡(luò)的研究用拍谐,現(xiàn)在只是一個(gè)在mnist數(shù)據(jù)集上的初始版本烛缔。當(dāng)然,博主提供了測(cè)試代碼和可視化的代碼轩拨,其中可視化是基于對(duì)權(quán)重和激活值的輸出的践瓷,代碼借鑒于Caffe,關(guān)于可視化的原理亡蓉,附錄會(huì)進(jìn)行簡(jiǎn)單介紹晕翠。
本節(jié)主要介紹生成模型和判別模型的區(qū)分,以及生成模型的實(shí)質(zhì)和當(dāng)前生成模型算法砍濒。
我們根據(jù)對(duì)后驗(yàn)概率P(y|x)的建模方式將機(jī)器學(xué)習(xí)的學(xué)習(xí)方法分為兩類淋肾。一類是判別模型,一類是生成模型爸邢。判別模型的話是直接對(duì)P(y|x)進(jìn)行建模樊卓,所以學(xué)習(xí)的是條件概率。條件概率可以理解為給定x甲棍,y的概率简识,根據(jù)y的大小來判定類別赶掖,這也解釋了判別模型名字的含義感猛。
對(duì)于生成模型的話,我們說他學(xué)習(xí)的是聯(lián)合概率P(x,y)奢赂。通過Bayes理論陪白,聯(lián)合概率轉(zhuǎn)化為后驗(yàn)概率,進(jìn)行間接建模膳灶。
我們知道咱士。
然后Bayes公式為:
得到
該式子給我們的啟發(fā)就是所謂的聯(lián)合概率就是先驗(yàn)概率和類條件概率的乘積,而求聯(lián)合概率的目標(biāo)則轉(zhuǎn)化為求類條件概率(先驗(yàn)概率很容易獲取到)轧钓。類條件概率表達(dá)了在某一類的基礎(chǔ)上樣本的分布情況序厉,那式子也就體現(xiàn)了數(shù)據(jù)的真實(shí)分布。所以毕箍,我們可以通過類條件概率做數(shù)據(jù)生成的事情弛房,這也許就是學(xué)習(xí)聯(lián)合概率叫做生成模型的原因。
當(dāng)然而柑,關(guān)鍵就是求類條件概率文捶,實(shí)際上這個(gè)分布是很難學(xué)習(xí)到的荷逞。如果以圖像作為樣本的話,那學(xué)習(xí)到圖像的像素的分布是很困難的粹排,所以圖像生成是機(jī)器學(xué)習(xí)中的一個(gè)難題种远。
從貝葉斯的角度上做,生成模型可以認(rèn)為是都是屬于ML(最大化似然)的過程顽耳,因?yàn)樽狗螅琈L就是找到能使樣本數(shù)據(jù)的類條件概率最大化的分布參數(shù)。那如果經(jīng)過訓(xùn)練集訓(xùn)練射富,我們找到該參數(shù),此時(shí)我們的模型是有最大可能生成和樣本訓(xùn)練數(shù)據(jù)具有同樣分布的數(shù)據(jù)常拓,這個(gè)也是生成模型的一個(gè)目標(biāo)。當(dāng)然這個(gè)方法的前提就是對(duì)數(shù)據(jù)的分布進(jìn)行一個(gè)假設(shè)辉浦,然后才能求參數(shù)弄抬。比如假設(shè)數(shù)據(jù)分布是符合高斯分布的。
那么數(shù)據(jù)的分布宪郊,也就是類條件概率掂恕,對(duì)其獲取方式進(jìn)行分類,可以分為,Explict density 和 Implict density栗涂。當(dāng)然瞧掺,對(duì)抗網(wǎng)絡(luò)自然是implict。不需要顯示建立密度函數(shù)店枣,也是Gans的一大優(yōu)點(diǎn)。
生成模型的類別圖標(biāo)(來自Good fellow NIPS slides[9])叹誉。
從圖表中鸯两,可以看到我們上文介紹的Gan的分類。當(dāng)然长豁,最近比較火熱的生成模型钧唐,還有Variational autoencoder。關(guān)于其中的細(xì)節(jié)匠襟,博主也不是非常清楚钝侠。如果有人了解,請(qǐng)留言酸舍。
五.對(duì)抗網(wǎng)絡(luò)之優(yōu)劣
先說個(gè)人的想法帅韧。從上文圖表中,我們了解到啃勉,Gans是一個(gè)Implict的建立學(xué)習(xí)密度函數(shù)過程忽舟,減少了人為的建模,這是Gans的一個(gè)優(yōu)點(diǎn)。當(dāng)然萧诫,論文也提到的在訓(xùn)練過程中不需要建立Markov Chain以及復(fù)雜的Inference斥难。
那缺點(diǎn)的話,就是很難穩(wěn)定訓(xùn)練帘饶。DCGAN的一個(gè)contribution就是提高了原始論文Gans的穩(wěn)定性哑诊。
Gans的訓(xùn)練的目標(biāo)并不和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)算法目標(biāo)類似,去最小化loss及刻,
GoodFellow的論文證明了Gans 全局最小點(diǎn)的充分必要條件是:
pg表示generate 生成數(shù)據(jù)的分布函數(shù)
pdata表示真實(shí)data的分布函數(shù)
在訓(xùn)練過程中镀裤,pg不斷地接近pdata,是收斂的判斷標(biāo)準(zhǔn)。
我們知道缴饭,G和D是一個(gè)對(duì)抗的過程暑劝,而這個(gè)對(duì)抗是,G不斷的學(xué)習(xí)颗搂,D也不斷的學(xué)習(xí)担猛,而且需要保證兩者學(xué)習(xí)速率基本一致,也就是都能不斷的從對(duì)方那里學(xué)習(xí)到“知識(shí)”來提升自己丢氢。否則傅联,就是這兩者哪一個(gè)學(xué)習(xí)的過快,或過慢疚察,以至于雙方的實(shí)力不再均衡蒸走,就會(huì)導(dǎo)致實(shí)力差的那一方的“l(fā)oss”不再能“下降”,也就不在學(xué)到“知識(shí)”貌嫡。一般的對(duì)抗模型中的G和D的網(wǎng)絡(luò)框架大小基本上是相似(可能存在較小的差異)比驻,而且,訓(xùn)練的過程就是先訓(xùn)練G一次岛抄,再訓(xùn)練D一次别惦,這也是為了穩(wěn)定訓(xùn)練的一個(gè)保證。當(dāng)然這并不能完全穩(wěn)定訓(xùn)練弦撩,所以步咪,對(duì)抗網(wǎng)絡(luò)的穩(wěn)定訓(xùn)練,依然是一個(gè)研究的熱點(diǎn)和方向益楼。
還有就是對(duì)抗網(wǎng)絡(luò)當(dāng)然依然很難生成分辨率大的但又不blurry的圖片。從理論上來說也是很困難的事情点晴,所以這個(gè)也是一個(gè)研究的目標(biāo)感凤。
關(guān)于對(duì)抗網(wǎng)絡(luò)其他的優(yōu)劣,粒督,以后會(huì)接著研究和添加陪竿。
相對(duì)于最原始的Gans,DCGAN的一大特點(diǎn)就是使用了卷積層。細(xì)節(jié)點(diǎn)說族跛,我們分節(jié)討論闰挡。
6.1 Generative networks的架構(gòu)
這是DCGAN的生成網(wǎng)絡(luò)模型的架構(gòu),對(duì)于LSUN礁哄,Imagenet-1k大小的數(shù)據(jù)集长酗,我們可以使用這個(gè)架構(gòu),但并不是說對(duì)于任何數(shù)據(jù)集桐绒,都可以夺脾,比如,更大茉继,或者更小的咧叭,那對(duì)應(yīng)的卷積架構(gòu)就需要進(jìn)行改變。比如烁竭,對(duì)于mnist數(shù)據(jù)集菲茬,G和D的網(wǎng)絡(luò)架構(gòu)都相應(yīng)地減小了,否則不能擬合派撕,產(chǎn)生不了好的結(jié)果(親測(cè))生均。
那對(duì)于判別模型的話,就是5層卷積層網(wǎng)絡(luò)腥刹。對(duì)與生成模型的马胧,我們可以看到,從開始的Noise采樣100維度衔峰,到最后生成了64x64x3的圖片佩脊,經(jīng)過了“de-convolution”層,實(shí)質(zhì)是transport convolution 或者up-sampling convolution垫卤。下一節(jié)介紹下什么是反卷積層威彰。
6.2“反卷積”—上采樣卷積
關(guān)于卷積和反卷積的介紹,請(qǐng)查看我的博文[10]穴肘。本節(jié)詳細(xì)介紹下反卷積的由來歇盼。
反卷積,英文decovolution评抚。根據(jù)wiki的定義豹缀,其實(shí)是對(duì)卷積的逆向操作,也就是通過將卷積的輸出信號(hào)慨代,經(jīng)過反卷積可以還原卷積的輸入信號(hào)邢笙,還原的不僅僅是shape,還有value侍匙。
但是深度學(xué)習(xí)中的所講的反卷積實(shí)質(zhì)是transport convolution氮惯。只是從2010年一篇論文[11]將其叫做了deconvolution,然后才有了這個(gè)名字。
先看下卷積的可視化(圖片來源conv_arithmetic[12]):
4x4的輸入信號(hào)妇汗,經(jīng)過3x3 的filters帘不,產(chǎn)生了2x2的feature map。
那什么是transport-convolution?
可視化:
2x2的輸入信號(hào)杨箭,經(jīng)過3x3 的filters寞焙,產(chǎn)生了4x4的feature map。從小的維度產(chǎn)生大的維度告唆,所以transport-convolution又稱為上采樣卷積棺弊。
那為什么叫做transport(轉(zhuǎn)置)?
因?yàn)椤胺淳矸e”存在于卷積的反向傳播中擒悬。其中反向傳播的濾波器矩陣模她,是前向傳播(卷積)的轉(zhuǎn)置,所以懂牧,這就是它的名字的由來侈净。只不過我們把反向傳播的操作拿到了前向傳播來做,就產(chǎn)生了所謂的反卷積一說僧凤。但是transport-convolution只能還原信號(hào)的大小畜侦,不能還原其value,所以躯保,不能叫做反卷積旋膳,不是真正的逆操作。
6.3 用到的其他Trick
(1)比如D用的是lrelu激活函數(shù)途事,G用的是relu
(2)使用batch_normalization.
(3)去掉了pooling層验懊,使用stride-convolution(也就是stride=2)
(4)學(xué)習(xí)率必須很小,比如論文中尸变,rate=0.0002
7.1 DCGAN之論文中的實(shí)驗(yàn)
LSUN 數(shù)據(jù)集的訓(xùn)練:
還有就是將訓(xùn)練好的discrimination networks用于特征提取义图,然后分類,和其他一些無監(jiān)督的效果進(jìn)行了比對(duì)召烂,效果還不錯(cuò)碱工,這個(gè)可以從論文中可以查看到。
將判別網(wǎng)絡(luò)用于特征提取奏夫,然后進(jìn)行分類怕篷,也是一個(gè)研究方向。因?yàn)榧热慌袆e網(wǎng)絡(luò)可以學(xué)習(xí)到不同類之間的boundary桶蛔,那么將其用于分類匙头,與其他的無監(jiān)督,或者半監(jiān)督算法進(jìn)行比較仔雷,如果效果好的話,那也是一個(gè)改進(jìn)。
7.2 DCGAN中的VECTOR ARITHMETIC ON FACE SAMPLES(特征表示的向量運(yùn)算)
我們先看論文中的實(shí)驗(yàn)結(jié)果:
具體什么意思碟婆?
上圖等式左邊都是噪聲z(一般為均勻噪聲)經(jīng)過G(z)產(chǎn)生的人臉圖片电抚。
我們記
戴眼鏡的男性的原始輸入 z為
z1
同理,不帶眼鏡的男性:
z2
同理竖共,不戴眼鏡的女性:
z3
記:
z4=z1-z2+z3
那么的產(chǎn)生的圖片為:戴眼鏡的女性蝙叛。神奇!
所以公给,訓(xùn)練好的生成模型G借帘,在特征表示空間具有算式屬性。很神奇淌铐!
7.3 DCGAN之我的測(cè)試
我對(duì)自己編寫的代碼也進(jìn)行了一些測(cè)試肺然,修改了一些參數(shù)。得到的啟發(fā)如下腿准。
(1)如果模型太大际起,則會(huì)出現(xiàn)訓(xùn)練不穩(wěn)定。
什么是模型過大吐葱,模型過大是同樣大小的數(shù)據(jù)集的分類任務(wù)情況下街望,比監(jiān)督訓(xùn)練的模型較大,如果較大的話弟跑,會(huì)出現(xiàn)灾前,生成圖片的不穩(wěn)定。主要體現(xiàn)就是生成的圖片孟辑,在開始的時(shí)候又趨于變優(yōu)的過程哎甲,最后卻變得越來越blurry。
(2)采樣的噪聲如果為10時(shí)扑浸,和100有和區(qū)別烧给。
發(fā)現(xiàn),采樣噪聲維度的越小喝噪,產(chǎn)生的圖片的共性越大础嫡。
(3)將測(cè)試采樣進(jìn)行變動(dòng),發(fā)現(xiàn)高斯和均勻分布采樣基本兼容酝惧,其他是亂的榴鼎。
(4)訓(xùn)練G和D的順序似乎沒有什么關(guān)系。(值得思考)
8.1 conditional GANS介紹
論文[13]第一次提出了Conditional gans的想法晚唇,主要思想是通過label值來引導(dǎo)生成模型的輸出巫财,比如我們給label=0,那對(duì)于mnist,也同樣輸出表示0的圖片哩陕。
從模型架構(gòu)上可以看出平项,我們的G的輸入不再是具有一定維度的Noisy —— z,而是z 和y1赫舒。對(duì)于D的話,輸入也不再是real image——x闽瓢,而是 x和y2接癌。
其中y=y1=y2,表示,是同樣的標(biāo)簽扣讼,也意味這通過label——y將z和x聯(lián)系起來缺猛,y起到連接或者區(qū)分的作用。
那對(duì)抗的目標(biāo)函數(shù)為:
8.2 conditional DCGAN
了解了condtional gans椭符,自然荔燎,conditional dcgan就很清楚了,只不過是網(wǎng)絡(luò)模型使用了卷積等销钝。博主的開源項(xiàng)目做的就是conditonal dcgan有咨,不同于原文,不過從實(shí)驗(yàn)結(jié)果上看曙搬,結(jié)果更加真實(shí)摔吏。
8.3 實(shí)驗(yàn)結(jié)果
1)mnist的訓(xùn)練結(jié)果(無條件的)
2)mnist訓(xùn)練的結(jié)果(有條件的):
我們來看下可視化的效果
可視化權(quán)重:
可視化激活值:
無論是GANs還是DCGAN,這種對(duì)抗學(xué)習(xí)的方式纵装,是一種比較成功的生成模型征讲,可以從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)到近似的分布情況,那么有了這個(gè)分布橡娄,自然可以應(yīng)用到很多領(lǐng)域,比如,圖像的修復(fù)[14],圖像的超分辨率[15]诗箍,圖像翻譯[16]。
接下來挽唉,博主談下未來的發(fā)展趨勢(shì)滤祖。
(1) conditional GANs
上圖是最近幾篇關(guān)于conditional gans的不同的架構(gòu),那通過給輸入添加限制瓶籽,來引導(dǎo)學(xué)習(xí)過程匠童,最后產(chǎn)生更realistic 的結(jié)果。而且塑顺,有條件的應(yīng)用更廣泛汤求。
(2)Video predict
視頻預(yù)測(cè)大致是通過前幾幀來預(yù)測(cè)未來幀。關(guān)于視頻預(yù)測(cè),Lecun做了一篇[17],Goodfellow 做了一篇[18]挥吵,大牛都在做,看來還是很有前途的挤牛。
(3) Image to Image translation
輸入一張圖片,生成另一種風(fēng)格的圖片种蘸。有幾篇論文是做的關(guān)于Image translation[16]墓赴。博主認(rèn)為這個(gè)也是一個(gè)不錯(cuò)的方向竞膳。比如由上圖,通過縮略圖生成完整風(fēng)格的圖竣蹦,在現(xiàn)實(shí)生活中就存在著很大的應(yīng)用意義顶猜。
可視化的介紹
深度學(xué)習(xí)的參數(shù)可視化是了解深度學(xué)習(xí)的學(xué)習(xí)過程或者結(jié)果的方法或者工具沧奴。那一般分為三種方法痘括。
1.權(quán)重可視化
這個(gè)比較直觀,一般都是對(duì)卷積權(quán)重進(jìn)行可視化滔吠。
操作流程:直接取參數(shù)纲菌,然后進(jìn)行一定的歸一化,然后轉(zhuǎn)化為RGB圖片疮绷。
2.激活值可視化
這個(gè)是對(duì)激活函數(shù)的輸出進(jìn)行可視化翰舌,那么就需要進(jìn)行NN的前向傳播。
操作流程:先進(jìn)行前向傳播冬骚,去某一層的激活值椅贱,然后進(jìn)行歸一化,最后轉(zhuǎn)化為RGB圖片只冻。
3.反卷積的可視化
這篇論文介紹的可視化庇麦,是需要經(jīng)過訓(xùn)練,然后經(jīng)過反卷積(反卷積層+反pooling層)喜德,的輸出值的可視化山橄。詳細(xì)的請(qǐng)看論文。
[1]http://blog.csdn.net/u013139259/article/details/52729191
[2] Stacked denoising autoencoders: Learning useful representations in a deep network with a local denoising criterion
[3]https://arxiv.org/abs/1312.6114
[4]GoodFellow.Generative adversarial network
[5] Zeiler.Visualizing and understanding convolutional networks. In Computer Vision–ECCV 2014
[7]https://www.youtube.com/watch?v=QPkb5VcgXAM&t=22s
[8] Meghdi Mirza《Conditional Generative Adversarial Nets》.2014
[9]http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf
[10]http://blog.csdn.net/u013139259/article/details/52729191
[11]http://www.matthewzeiler.com/pubs/cvpr2010/cvpr2010.pdf
[12]https://github.com/vdumoulin/conv_arithmetic
[13]Medhi Mirza.Conditional Generative Adversarial Nets
[14]Semantic Image Inpainting with Perceptual and Contextual Losses
[15] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
[16] Image-to-image translation using conditional adversarial nets
[17] Lecun.Deep multi-scale video prediction beyond mean square error
[18]GoodFellow. Unsupervised Learning for Physical Interaction through Video Prediction
[19]Alec Radford.Unsupervised representation learning with deep convolutional generative adversarial networks.