GAN(1) GAN介紹: 基本概念及邏輯

GAN介紹(李宏毅GAN課程學(xué)習(xí)筆記)

Generative Adversarial Network

GAN由Ian Goodfellow于2014年提出欣鳖,并迅速成為了非承劬恚火熱的研究話題外厂,GAN的變種更是有上千種泥畅,深度學(xué)習(xí)先驅(qū)之一的Yann LeCun就曾說, "GAN及其變種是數(shù)十年來機(jī)器學(xué)習(xí)領(lǐng)域最有趣的 idea"

聽起來很厲害的樣子凭豪,那么什么是GAN呢焙蹭?

生成式對(duì)抗網(wǎng)絡(luò)(GAN, Generative Adversarial Networks )是一種深度學(xué)習(xí)模型,是近年來復(fù)雜分布上無監(jiān)督學(xué)習(xí)最具前景的方法之一嫂伞。模型通過(至少)兩個(gè)模塊:生成模型(Generative Model)和判別模型(Discriminative Model)的零和博弈進(jìn)行學(xué)習(xí)孔厉,即通過兩個(gè)網(wǎng)絡(luò)的互相對(duì)抗來達(dá)到最好的生成效果。

這一段看完了末早,所以烟馅,什么是GAN说庭?看懂了嗎然磷?感覺充滿了問號(hào)。刊驴。姿搜。接下來跟著李宏毅老師的節(jié)奏好好梳理一下寡润。

1、生成模型舅柜、判別模型

概念里說梭纹,模型通過框架中(至少)兩個(gè)模塊:生成模型G(Generative Model)和判別模型D(Discriminative Model),那么什么是生成模型致份?什么是判別模型变抽?

生成模型G是指能夠隨機(jī)生成觀測(cè)數(shù)據(jù)的模型,尤其是在給定某些隱含參數(shù)的條件下氮块。在GAN中绍载,可以理解為輸入一個(gè)vector,生成一個(gè)圖片滔蝉、語音击儡、文本等有結(jié)構(gòu)的輸出。

生成模型 / 生成器

判別模型D是一種對(duì)未知數(shù)據(jù)與已知數(shù)據(jù)之間關(guān)系進(jìn)行建模的方法蝠引,在GAN中阳谍,可以理解為判別器建立了訓(xùn)練數(shù)據(jù)與生成器輸出的數(shù)據(jù)的關(guān)系,按訓(xùn)練數(shù)據(jù)的標(biāo)準(zhǔn)為生成的數(shù)據(jù)打分螃概。

判別模型 / 判別器

以圖像的生成為例:

  • G負(fù)責(zé)生成圖片矫夯。接收一個(gè)隨機(jī)的噪聲z,通過z生成圖片G(z)谅年;
  • D負(fù)責(zé)判別一張圖片是不是“真實(shí)的”茧痒。輸入是一張圖片x,輸出D(x)表示x為真實(shí)圖片的概率融蹂,如果為1旺订,代表是真實(shí)圖片的概率為100%,而輸出為0超燃,代表不可能是真實(shí)的圖片区拳。

知道了生成器和判別器是什么,那么他們是怎么配合工作來推動(dòng)GAN的學(xué)習(xí)的呢意乓?

以學(xué)習(xí)畫二次元人物頭像為例:

  1. 第一步:我們最開始畫人物頭像只知道有一個(gè)頭的大致形狀樱调,用筆也不行,畫出來的一片糊届良,老師搭眼一看笆凌,垃圾!噼里啪啦給我們10個(gè)大嘴巴子士葫,老師的快樂+10乞而,我們的快樂-10
  2. 第二步:我們痛定思痛慢显,努力學(xué)習(xí)爪模,畫出的頭像好多了欠啤,甚至還能看到水靈靈的大眼睛,老師參考一下二次元美圖:鼻子呢屋灌!噼里啪啦給我們9個(gè)大嘴巴子洁段,老師的快樂+9,我們的快樂-9共郭;
  3. 第三步:我們進(jìn)步了祠丝!老師又學(xué)習(xí)了一會(huì)二次元美圖說:“我覺得不行”,噼里啪啦給我們8個(gè)大嘴巴子除嘹,老師的快樂+8纽疟,我們的快樂-8

就這樣一步一步憾赁,老師覺得我們畫的頭像和真正的二次元美圖一樣美的時(shí)候污朽,就不再抽我們大嘴巴子,我們終于出師了,是一個(gè)合格的生成器了!(這里的老師就是判別器唐础,判別器也是需要學(xué)習(xí)的,雖然老師水平高炎功,但他不學(xué)習(xí)也不一定知道什么是美麗的二次元頭像)

2、零和博弈

生成器和判別器通過零和博弈來學(xué)習(xí)缓溅,什么是零和博弈呢蛇损?

零和博弈(zero-sum game),又稱零和游戲坛怪,是博弈論的一個(gè)概念淤齐,屬非合作博弈。

它是指參與博弈的各方袜匿,在嚴(yán)格競爭下更啄,一方的收益必然意味著另一方的損失,博弈各方的收益和損失相加總和永遠(yuǎn)為“零”居灯,可以說自己的幸福是建立在他人的痛苦之上的祭务,二者的大小完全相等,因而雙方都想盡一切辦法以實(shí)現(xiàn)“損人利己”怪嫌。

在上面的例子中义锥,老師(判別器)抽我們(生成器)大嘴巴子,抽的越多他的快樂越多岩灭,我們的快樂越少拌倍,我們通過和老師博弈改變雙方的快樂,但快樂數(shù)值的總和一直都是零川背,這就是判別器和生成器的零和博弈贰拿,這種博弈的關(guān)系也是GAN中“Adversarial”的由來。

3熄云、GAN算法流程

了解了GAN中的幾個(gè)關(guān)鍵詞的含義后膨更,我們來看看GAN是怎樣運(yùn)行的:

  1. 初始化generator G 和discriminator D;
  2. 每一次迭代過程中:
  • 固定 G缴允, 只更新 D 的參數(shù)荚守。從你準(zhǔn)備的數(shù)據(jù)集中隨機(jī)選擇一些,再從 G 的output中選擇一些练般,現(xiàn)在等于 D 有兩種input矗漾。接下來,D 的學(xué)習(xí)目標(biāo)是, 如果輸入是來自于真實(shí)數(shù)據(jù)集薄料,則給高分敞贡;如果是 G 產(chǎn)生的數(shù)據(jù),則給低分摄职,可以把它當(dāng)做一個(gè)回歸問題或分類問題誊役。
  • 接下來,固定住 D 的參數(shù), 更新 G 谷市。將一個(gè)向量輸入 G蛔垢, 得到一個(gè)output, 將output扔進(jìn) D , 然后會(huì)得到一個(gè)分?jǐn)?shù)迫悠,這一階段 D 的參數(shù)已經(jīng)固定住了鹏漆,G 需要調(diào)整自己的參數(shù)使得這個(gè)output的分?jǐn)?shù)越大越好,希望能騙過判別器创泄。

過程聽起來不是很復(fù)雜艺玲,不過問題是生成器和判別器兩個(gè)NN網(wǎng)絡(luò)是用什么結(jié)構(gòu)組合在一起的呢?

其實(shí)鞠抑,generator和discriminator是同一個(gè)大的網(wǎng)絡(luò)板驳,像上圖,整個(gè)大的網(wǎng)絡(luò)的前半部分是generator碍拆,后半部分是discriminator若治,所以其輸入是vector,輸出就是得分感混,而圖片就在中間hidden層端幼,即兩個(gè)網(wǎng)絡(luò)的銜接處。所謂的生成是指:網(wǎng)絡(luò)中間的一層hidden-layer的輸出是一個(gè)圖片弧满,判別是指:對(duì)這個(gè)生成的圖片婆跑,網(wǎng)絡(luò)的后半部分會(huì)訓(xùn)練出一個(gè)得分(或者說概率)。

用稍微數(shù)學(xué)化一些的語言來表示上述過程:

GAN 算法流程

1庭呜、結(jié)構(gòu)化學(xué)習(xí)(Structured Learning)

什么是結(jié)構(gòu)化學(xué)習(xí)滑进?

在機(jī)器學(xué)習(xí)過程中犀忱,對(duì)數(shù)據(jù)的擬合其實(shí)就是在找一個(gè)擬合函數(shù):

對(duì)于回歸問題(Regression)來說,這個(gè)函數(shù)輸出一個(gè)標(biāo)量(scalar)

對(duì)于分類問題(Classification)來說扶关,這個(gè)函數(shù)輸出一個(gè)類別(one-hot 向量)

如果輸出的是一個(gè)序列阴汇,一個(gè)矩陣,一個(gè)圖节槐,一顆樹...

其輸出由具有依賴關(guān)系的組件組成的搀庶,這就叫做結(jié)構(gòu)化學(xué)習(xí)。

2铜异、結(jié)構(gòu)化學(xué)習(xí)的難點(diǎn)

首先哥倔,對(duì)于一般的分類問題,每個(gè)類別會(huì)對(duì)應(yīng)多個(gè)樣本揍庄,而結(jié)構(gòu)化學(xué)習(xí)如果把每一個(gè)output當(dāng)做一個(gè)類別來看的話咆蒿,輸出空間就非常大,因?yàn)槠漭敵鍪嵌喾N多樣的蚂子,很可能是One-shot learning甚至Zero-shot learning蜡秽。

One-shot learning:對(duì)某一/某些類別只提供一個(gè)或者少量的訓(xùn)練樣本;
Zero-shot learning:對(duì)某一/某些類別完全不提供訓(xùn)練樣本缆镣。

以文本為例芽突,輸入“吃了嗎?”董瞻,輸出“吃過了”寞蚌、“吃了”、“吃啦”等等都可以看做不同的類钠糊,所以用普通的分類是難以解決的挟秤。

再者,結(jié)構(gòu)化學(xué)習(xí)的輸出是由具有依賴關(guān)系的組件組成的抄伍,需要考慮整體艘刚。

GAN的生成器可以生成各種輸出,判別器可以判斷輸出的好壞截珍,似乎這兩個(gè)模塊都有很強(qiáng)的學(xué)習(xí)能力攀甚,那么他們能獨(dú)立工作嗎?為什么一定要進(jìn)行博弈呢岗喉?

首先來看看生成器能不能自己學(xué)習(xí)秋度。

生成器當(dāng)然可以自己學(xué)習(xí),在GAN之前就有自編碼器AE钱床、變分自編碼器VAE荚斯。

1、自編碼器AE

自編碼器是一個(gè)如下圖所示結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),其輸入和輸出的維度相同事期,中間的隱含層維度最小滥壕,作為編碼的結(jié)果,其前半部分encoder會(huì)盡可能的保留原始輸入的信息兽泣,以便在后半部分decoder還原輸入绎橘。

自編碼器網(wǎng)絡(luò)結(jié)構(gòu)

其實(shí)自編碼器AE得到的decoder就是一個(gè)生成器,不過AE的缺點(diǎn)是無法處理沒有訓(xùn)練過的數(shù)據(jù)撞叨,當(dāng)給code加上噪聲后,就不知道會(huì)輸出什么了浊洞,可能是一個(gè)完全的亂碼或者是噪聲牵敷,我們希望的是“生成模型”能夠?qū)θ我獾妮斎刖幋a產(chǎn)生有相關(guān)意義的數(shù)據(jù),這就是我們后面的“變分自編碼器VAE”所要做的事情法希。

2枷餐、變分自編碼器VAE

變分自編碼器直接編碼成高斯分布,可以對(duì)各種隨機(jī)輸入產(chǎn)生有意義的輸出苫亦。

3毛肋、這一類生成器到底存在什么缺點(diǎn)

編碼器的目標(biāo)是讓輸出與輸入盡可能的相似,怎么評(píng)價(jià)相似呢屋剑?實(shí)際上是計(jì)算輸入向量與輸出向量的距離润匙,拿圖片來說,向量距離表示兩個(gè)圖片有多少像素不同唉匾,但沒法表達(dá)更多的東西孕讳,比如位置等。

如下圖所示巍膘,編碼器會(huì)認(rèn)為上面只差1個(gè)像素的圖更好厂财,但實(shí)際上上面兩個(gè)在奇怪的地方多/少一個(gè)像素點(diǎn),更容易看出不是人的手寫數(shù)字峡懈,而下面兩個(gè)雖然像素差的多璃饱,但其實(shí)只是筆畫長一點(diǎn)而已,更像是手寫的數(shù)字肪康。

編碼器的缺點(diǎn)1

組間之間的關(guān)系非常重要荚恶,在編碼器中,盡管兩個(gè)組間高度相關(guān)磷支,但卻無法相互影響裆甩,我們需要structure 來約束這個(gè)事情。就是在后面在加幾個(gè)隱藏層齐唆,就可以調(diào)整第L層的神經(jīng)元輸出嗤栓。也就是說理論上,VAE要想獲得GAN的效果,它的網(wǎng)絡(luò)要比GAN要深才行茉帅。

編碼器的缺點(diǎn)1

而且由于VAE算法采用的分布采樣叨叙,因此做一些離得比較散的目標(biāo)效果不好:

下圖中綠色是目標(biāo),藍(lán)色是VAE學(xué)習(xí)的結(jié)果

編碼器的缺點(diǎn)2

總結(jié)一下堪澎,不依靠判別器擂错,生成器獨(dú)立去學(xué)習(xí)是可以的,不過生成器是一個(gè)一個(gè)component來生成樱蛤,每個(gè)component之間的關(guān)系不好控制钮呀,存在一定的缺點(diǎn),不能從全局把握結(jié)果的好壞昨凡。

那么爽醋,判別器能不能獨(dú)立學(xué)習(xí)來生成好的結(jié)果呢?

判別器也是可以獨(dú)立學(xué)習(xí)的便脊。

判別器也就是Evaluation function, Potential Function, Energy Function …其特點(diǎn)是top-down evaluation蚂四,所以很容易控制component之間的關(guān)系,能更好的判斷一個(gè)結(jié)果的好壞哪痰,以手寫數(shù)字為例遂赠,判別器能輕松的捕捉到元素之間的相關(guān)性,這可是生成器很難解決的問題啊晌杰。

例如上面提到的問題跷睦,圖中所示的CNN Filter就可以輕松識(shí)別是不是有孤立的的像素點(diǎn)。


那么應(yīng)該怎么做才能讓判別器得到好的輸出呢肋演?

只需要窮舉所有可能的x送讲,再挑一個(gè)使得判別器得分最好的那個(gè)即可:

1、判別器獨(dú)立訓(xùn)練

判別器訓(xùn)練的一個(gè)難點(diǎn)是缺失負(fù)向樣本惋啃,比如我們想要生成手寫字體或者二次元頭像哼鬓,那么我們的訓(xùn)練數(shù)據(jù)其實(shí)只有正向樣本,或許我們可以通過給正向樣本增加噪聲來得到負(fù)向樣本边灭,但我們制作的負(fù)向樣本的質(zhì)量及分布是很難把握的异希,怎么解決這個(gè)問題呢?

可以采用讓判別器自己來生成負(fù)向樣本的方法绒瘦,算法流程如下:

判別器獨(dú)立訓(xùn)練流程
  • 首先拿出正樣本称簿,并根據(jù)正樣本隨機(jī)生成負(fù)樣本,正負(fù)樣本一起送入判別器進(jìn)行訓(xùn)練惰帽;
  • 在每次迭代中憨降,訓(xùn)練出一個(gè)能區(qū)分正負(fù)樣本的判別器;使用此判別器通過 argmax 生成最好的負(fù)樣本(假設(shè)我們能做到)该酗;
  • 再與真樣本一起送入鑒別器進(jìn)行訓(xùn)練授药,如此循環(huán)士嚎。

看起來似乎和GAN訓(xùn)練差不多,但其實(shí)還存在著問題悔叽。如下圖可以幫助我們理解判別器訓(xùn)練的過程莱衩,可以理解為判別器在為真實(shí)樣本打高分,同時(shí)壓制其他樣本的得分娇澎,并在每次迭代中修復(fù)自己的漏洞笨蚁,最終希望訓(xùn)練到除了真實(shí)樣本其他全是低分:

其缺點(diǎn)是什么呢?

在高維空間中趟庄,負(fù)樣本采樣過程其實(shí)是很難進(jìn)行的括细,再者判別器生成樣本的過程,即argmax過程戚啥,要枚舉大量樣本奋单,效率很低。

判別器的生成既然這么麻煩的話虑鼎,真的有用判別器來做生成任務(wù)的嗎辱匿?實(shí)際上键痛,概率圖模型就是一類典型的判別器做生成的例子炫彩。

思考一下,概率圖模型我們會(huì)有一個(gè)圖絮短,根據(jù)圖還會(huì)有一個(gè)Potential Function(勢(shì)函數(shù)江兢,詳細(xì)馬爾科夫隨機(jī)場、CRF)丁频,這不就形成了一個(gè)可以打分的判別器嗎杉允!計(jì)算出來的概率不就是打的分嗎?想一下CRF的訓(xùn)練席里,就是通過給正向樣本和負(fù)樣本打分叔磷,不過迭代過程是不是有我不確定,HMM應(yīng)該就沒有吧奖磁?總之這個(gè)角度的思路是非常棒的改基!

2、判別器 VS 生成器

總結(jié)一下咖为,判別器和生成器的區(qū)別:生成器 VS 判別器

生成器 VS 判別器

3秕狰、生成器 + 判別器

綜合以上所述的生成器和判別器的優(yōu)缺點(diǎn),我們發(fā)現(xiàn)兩者是互補(bǔ)的躁染,因此將其組合起來使用鸣哀,充分利用兩者的優(yōu)勢(shì):

生成器+判別器的訓(xùn)練流程

Benefit of GAN
(1) From Discriminator’s point of view
? Using generator to generate negative samples

(2)From Generator’s point of view
? Still generate the object component-bycomponent
? But it is learned from the discriminator with global view. (跟discriminator 學(xué)習(xí)大局觀)

GAN 的數(shù)學(xué)理論及推導(dǎo)在下一篇詳述,李宏毅老師在第一節(jié)介紹課程中也沒有講這部分吞彤。



主要參考
對(duì)抗生成網(wǎng)絡(luò)(GAN)教程(2018) 李宏毅

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末我衬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌低飒,老刑警劉巖许昨,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異褥赊,居然都是意外死亡糕档,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門拌喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速那,“玉大人,你說我怎么就攤上這事尿背《搜觯” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵田藐,是天一觀的道長荔烧。 經(jīng)常有香客問我,道長汽久,這世上最難降的妖魔是什么鹤竭? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮景醇,結(jié)果婚禮上臀稚,老公的妹妹穿的比我還像新娘。我一直安慰自己三痰,他們只是感情好吧寺,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著散劫,像睡著了一般稚机。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上获搏,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天赖条,我揣著相機(jī)與錄音,去河邊找鬼颜凯。 笑死谋币,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的症概。 我是一名探鬼主播蕾额,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼彼城!你這毒婦竟也來了诅蝶?” 一聲冷哼從身側(cè)響起退个,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎调炬,沒想到半個(gè)月后语盈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缰泡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年刀荒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘钞。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缠借,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宜猜,到底是詐尸還是另有隱情泼返,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布姨拥,位于F島的核電站绅喉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叫乌。R本人自食惡果不足惜柴罐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望综芥。 院中可真熱鬧丽蝎,春花似錦猎拨、人聲如沸膀藐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽额各。三九已至,卻和暖如春吧恃,著一層夾襖步出監(jiān)牢的瞬間虾啦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工痕寓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傲醉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓呻率,卻偏偏與公主長得像硬毕,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子礼仗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348