GAN - 生成對抗網(wǎng)絡(luò)

簡介

GAN的基本原理其實(shí)非常簡單,這里以生成圖片為例進(jìn)行說明拧粪。假設(shè)我們有兩個(gè)網(wǎng)絡(luò)修陡,G(Generator)和D(Discriminator)。正如名字那樣可霎,生成網(wǎng)絡(luò)負(fù)責(zé)生成魄鸦,辨別網(wǎng)絡(luò)負(fù)責(zé)分辨生成的質(zhì)量,然后不斷的生成與辨別癣朗,最后達(dá)到效果号杏。GAN第一篇要看的paper當(dāng)然是Ian Goodfellow大牛的Generative Adversarial Networks(arxiv:https://arxiv.org/abs/1406.2661),這篇paper算是這個(gè)領(lǐng)域的開山之作斯棒。當(dāng)然GAN是誰最新發(fā)明的我們不做爭論盾致。

生成與對抗

GAN在訓(xùn)練過程中,生成網(wǎng)絡(luò)G的目標(biāo)就是盡量生成真實(shí)的圖片去欺騙判別網(wǎng)絡(luò)D荣暮。而D的目標(biāo)就是盡量把G生成的圖片和真實(shí)的圖片分別開來庭惜。這樣,G和D構(gòu)成了一個(gè)動(dòng)態(tài)的“博弈過程”穗酥。
最后博弈的結(jié)果是什么护赊?以圖片為例惠遏,在最理想的狀態(tài)下,G可以生成足以“以假亂真”的圖片G(z)骏啰。對于D來說节吮,它難以判定G生成的圖片究竟是不是真實(shí)的,因此D(G(z)) = 0.5判耕。但是實(shí)際訓(xùn)練的時(shí)候這個(gè)狀態(tài)一般是不可達(dá)的透绩。上面的過程使用數(shù)學(xué)公式來表達(dá):


分析這個(gè)公式:

  1. 整個(gè)式子由兩項(xiàng)構(gòu)成。x表示真實(shí)輸入壁熄,z表示輸入G網(wǎng)絡(luò)的噪聲帚豪,而G(z)表示G網(wǎng)絡(luò)生成
  2. D(x)表示D網(wǎng)絡(luò)判斷真實(shí)圖片是否真實(shí)的概率(因?yàn)閤就是真實(shí)的,所以對于D來說草丧,這個(gè)值越接近1越好)狸臣。而D(G(z))是D網(wǎng)絡(luò)判斷G生成的圖片的是否真實(shí)的概率
  3. G的目的:上面提到過,D(G(z))是D網(wǎng)絡(luò)判斷G生成的圖片是否真實(shí)的概率昌执,G應(yīng)該希望自己生成的圖片“越接近真實(shí)越好”烛亦。也就是說,G希望D(G(z))盡可能得大懂拾,這時(shí)V(D, G)會變小此洲。因此我們看到式子的最前面的記號是min_G(G在min的下面)
  4. D的目的:D的能力越強(qiáng),D(x)應(yīng)該越大委粉,D(G(x))應(yīng)該越小呜师。這時(shí)V(D,G)會變大。因此式子對于D來說是求最大max_D(D在max的下面)

上面的過程使用圖來描述:


如何訓(xùn)練GAN

首先看論文給出的方法:


尤其注意紅方框的標(biāo)注贾节,我們分為兩步:

  1. 首先訓(xùn)練D汁汗,D是希望V(G, D)越大越好,所以是加上梯度(ascending)
  2. 然后訓(xùn)練G時(shí)栗涂,V(G, D)越小越好知牌,所以是減去梯度(descending),整個(gè)訓(xùn)練過程交替進(jìn)行

損失函數(shù)

這點(diǎn)有些許不同斤程,以往的深度神經(jīng)網(wǎng)絡(luò)都是一個(gè)損失函數(shù)角寸。但是GAN是類似于encoder-decoder模型,生成網(wǎng)絡(luò)一個(gè)損失函數(shù)忿墅,對抗網(wǎng)絡(luò)一個(gè)損失函數(shù)扁藕。這兩個(gè)損失函數(shù)可以是一樣的,也可以分別定義成不同的函數(shù)疚脐。但是這兩個(gè)函數(shù)在訓(xùn)練的時(shí)候會有一些問題:

在訓(xùn)練的初期亿柑,G 想要騙過 D,變化十分的緩慢棍弄,而上面的函數(shù)望薄,趨勢和下面的是一樣的疟游,都是遞減的。但是它的優(yōu)勢是在 D(x) 接近 0 的時(shí)候痕支,梯度很大颁虐,有利于訓(xùn)練,在 D(x) 越來越大之后卧须,梯度減小另绩,這也很符合實(shí)際,在初期應(yīng)該訓(xùn)練速度更快故慈,到后期速度減慢。于是優(yōu)化修改的損失函數(shù):

可以提高訓(xùn)練速度框全。在實(shí)際中還可以開始的學(xué)習(xí)率較高察绷,訓(xùn)練進(jìn)行中,逐步減少學(xué)習(xí)率津辩。

CNN與GAN的結(jié)合

在圖像領(lǐng)域我們知道CNN是最好的深度模型拆撼,所以早早的就有人做了嘗試,如:DCGAN是這方面最好的嘗試之一(論文地址:[1511.06434] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

DCGAN的基本原理和GAN是一樣的喘沿,它只是把上述的G和D換成了兩個(gè)卷積神經(jīng)網(wǎng)絡(luò)(CNN)闸度。但不是直接換就可以了,DCGAN對卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)做了一些改變蚜印,以提高樣本的質(zhì)量和收斂的速度莺禁,這些改變有:

  1. 取消所有pooling層。G網(wǎng)絡(luò)中使用轉(zhuǎn)置卷積(transposed convolutional layer)進(jìn)行上采樣窄赋,D網(wǎng)絡(luò)中用加入stride的卷積代替pooling
  2. 在D和G中均使用batch normalization
  3. 去掉FC層哟冬,使網(wǎng)絡(luò)變?yōu)槿矸e網(wǎng)絡(luò)
  4. G網(wǎng)絡(luò)中使用ReLU作為激活函數(shù),最后一層使用tanh
  5. D網(wǎng)絡(luò)中使用LeakyReLU作為激活函數(shù)

至于為什么是這些改變忆绰,可以自己動(dòng)手做一下實(shí)驗(yàn)浩峡,看看效果,或許自己做的實(shí)驗(yàn)改變的地方比論文還要好错敢。而且現(xiàn)在的GAN網(wǎng)絡(luò)在隨機(jī)噪聲輸入方面翰灾,使用先驗(yàn)的圖片,當(dāng)然這也是跟GAN的任務(wù)有關(guān)稚茅。如果任務(wù)是一種風(fēng)格的圖片到另外一種圖片的生成纸淮,那么預(yù)先的輸入就不是隨機(jī)噪聲,而是預(yù)先的風(fēng)格圖片亚享。

優(yōu)秀的GAN網(wǎng)絡(luò)

目前在圖像領(lǐng)域有幾個(gè)我關(guān)注比較優(yōu)秀的GAN項(xiàng)目如下:

  • CycleGAN
    CycleGAN可謂是大名鼎鼎萎馅,風(fēng)靡一時(shí)。項(xiàng)目:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
    CycleGAN是非結(jié)對的訓(xùn)練虹蒋,訓(xùn)練集分為兩個(gè)集合糜芳,A和B訓(xùn)練過程可以是A->B飒货,也可以是B->A。不論哪一種峭竣,結(jié)果都是可以互轉(zhuǎn)的塘辅。例如A集合可以是線條的貓圖畫,B集合是實(shí)物貓的圖片皆撩,那么訓(xùn)練完成之后扣墩,就可以將手繪的貓圖片轉(zhuǎn)成真實(shí)的貓圖片。

  • StyleGAN
    項(xiàng)目:https://github.com/NVlabs/stylegan
    StyleGAN是一種圖像生成器扛吞,取決于你的輸入呻惕。然后可以在生成的lacent space上修改向量方向,最后達(dá)到編輯圖片的效果滥比⊙谴啵可以編輯圖片的嘴部笑、年齡盲泛、性別等等濒持。

  • pix2pixHD
    項(xiàng)目:https://github.com/NVIDIA/pix2pixHD
    pix2pixHD是pix2pix改進(jìn)超級加強(qiáng)版,有些效果與CycleGAN相似寺滚。但是pix2pixHD是結(jié)對訓(xùn)練的柑营,必須要一一對應(yīng)的數(shù)據(jù)。pix2pixHD的代碼結(jié)構(gòu)與CycleGAN的代碼都是相似的村视。其實(shí)在CycleGAN中就有pix2pix模型的訓(xùn)練代碼官套,可以說他們是出自一波人之手。CycleGAN的作者Jun-Yan Zhu也是pix2pixpix2pixHD的核心參與者蚁孔。

GAN論文與代碼實(shí)現(xiàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市勒虾,隨后出現(xiàn)的幾起案子纺阔,更是在濱河造成了極大的恐慌,老刑警劉巖修然,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笛钝,死亡現(xiàn)場離奇詭異,居然都是意外死亡愕宋,警方通過查閱死者的電腦和手機(jī)玻靡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來中贝,“玉大人囤捻,你說我怎么就攤上這事×谑伲” “怎么了蝎土?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵视哑,是天一觀的道長。 經(jīng)常有香客問我誊涯,道長挡毅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任暴构,我火速辦了婚禮跪呈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘取逾。我一直安慰自己耗绿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布砾隅。 她就那樣靜靜地躺著误阻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琉用。 梳的紋絲不亂的頭發(fā)上堕绩,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天策幼,我揣著相機(jī)與錄音邑时,去河邊找鬼。 笑死特姐,一個(gè)胖子當(dāng)著我的面吹牛晶丘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唐含,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浅浮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捷枯?” 一聲冷哼從身側(cè)響起滚秩,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淮捆,沒想到半個(gè)月后郁油,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攀痊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年桐腌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苟径。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡案站,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棘街,到底是詐尸還是另有隱情蟆盐,我是刑警寧澤承边,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站舱禽,受9級特大地震影響炒刁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜誊稚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一翔始、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧里伯,春花似錦城瞎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狼电,卻和暖如春蜒灰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肩碟。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工强窖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人削祈。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓翅溺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親髓抑。 傳聞我的和親對象是個(gè)殘疾皇子咙崎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容