1 生成對(duì)抗網(wǎng)絡(luò)概述
有時(shí)候我們希望網(wǎng)絡(luò)具有一定的創(chuàng)造力午绳,比如畫(huà)畫(huà)、編曲等等马篮,能否實(shí)現(xiàn)呢沾乘?是可以實(shí)現(xiàn)的,大家可以鑒別一下下面這幾張照片浑测,哪些是真實(shí)的人臉翅阵,哪些是機(jī)器生成的人臉。很難判斷吧?本節(jié)最后會(huì)給出答案掷匠。
要實(shí)現(xiàn)上述能力,就要用到一種新的網(wǎng)絡(luò)架構(gòu)— 生成對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Net槐雾,GAN
) 夭委。首先,我們大概來(lái)了解一下什么是 “生成” 募强,什么是 “對(duì)抗”株灸。
8.1.1 對(duì)“生成”的理解
假設(shè)我們?cè)O(shè)計(jì)一個(gè)網(wǎng)絡(luò),將其稱為 “生成器(Generator)”擎值。生成器的輸入是一個(gè)向量慌烧,該向量一般是低維向量,它是通過(guò)一個(gè)特定的分布采樣出來(lái)的鸠儿,例如正態(tài)分布屹蚊。生成器的輸出是另一個(gè)向量,該向量是一個(gè)高維向量进每,比如一個(gè)二次元的人臉汹粤。由于生成器的輸入向量是通過(guò)一個(gè)分布隨機(jī)采樣的,所以輸入向量每次都是不一樣的田晚,因此生成器每次的輸出也是不一樣的嘱兼,會(huì)形成一個(gè)復(fù)雜的分布。盡管輸出向量不一樣贤徒,但是我們要求這些輸出向量都是二次元的人臉芹壕,而不是其它。也就是說(shuō)期望生成器輸出的復(fù)雜分布要和某個(gè)特定分布(例如所有二次元人臉的集合)盡可能相似接奈,如何做到呢踢涌?這就要用到“對(duì)抗”。
1.2 對(duì)“對(duì)抗”的理解
我們常說(shuō)要“感謝對(duì)手”序宦,為什么呢睁壁?因?yàn)閷?duì)手逼得我們不斷想辦法進(jìn)步,最后讓我們進(jìn)化成長(zhǎng)為優(yōu)秀的人挨厚。為了使生成網(wǎng)絡(luò)不斷進(jìn)化以成為畫(huà)畫(huà)高手堡僻,我們還需要訓(xùn)練另外一個(gè)網(wǎng)絡(luò),叫做 “鑒別器(Discriminator)” 疫剃。鑒別器是專門(mén)用來(lái)和生成網(wǎng)絡(luò)進(jìn)行對(duì)抗的,就是用它來(lái)逼得生成網(wǎng)絡(luò)不斷進(jìn)化硼讽。鑒別器的輸入是一張圖片巢价,它的輸出則是一個(gè)0-1的數(shù)字,數(shù)字越大就越認(rèn)為這張圖片是一個(gè)二次元圖片,數(shù)字越小呢就越認(rèn)為這張圖片不是一個(gè)二次元圖片壤躲。比如下圖中上面兩張圖片很清楚是二次元城菊,所以鑒別器輸出1.0,而下面兩張圖片很模糊碉克,所以鑒別器輸出0.1凌唬。因此,簡(jiǎn)單點(diǎn)講漏麦,鑒別器的功能就是判斷某張圖片到底是不是二次元圖片客税。
現(xiàn)在我們把這個(gè)鑒別器拿過(guò)來(lái)和生成器進(jìn)行對(duì)抗:
- ①版本1的生成器的參數(shù)是隨機(jī)生成的,所以其生成的圖片啥都不是撕贞。這 時(shí)候更耻,我們對(duì)鑒別器進(jìn)行訓(xùn)練,以使鑒別器能夠鑒別出哪些是生成器生成的圖片捏膨,哪些是真實(shí)的二次元人臉秧均。經(jīng)過(guò)訓(xùn)練后,我們得到了版本1的鑒別器号涯。
- ②在版本1的鑒別器的基礎(chǔ)上目胡,我們?cè)賮?lái)訓(xùn)練生成器,訓(xùn)練的目的是讓鑒別器分辨不出哪些是生成器生成的圖片链快,哪些是真實(shí)的二次元人臉讶隐。通過(guò)訓(xùn)練之后,得到了版本2的生成器久又,此時(shí)生成的圖片有一點(diǎn)點(diǎn)像二次元了巫延,足以騙過(guò)版本1的鑒別器。
- ③在版本2的生成器的基礎(chǔ)上地消,我們接著訓(xùn)練鑒別器炉峰,同樣是要使鑒別器能夠鑒別出哪些是版本2生成器生成的圖片,哪些是真實(shí)的二次元人臉脉执。通過(guò)訓(xùn)練之后疼阔,得到了版本2的鑒別器。
- ④重復(fù)上述過(guò)程半夷,不斷進(jìn)化生成器和鑒別器婆廊,最后生成器可以生成非常逼真的二次元人臉。
通過(guò)上述過(guò)程我們可以看出巫橄,生成器和鑒別器在不斷的對(duì)抗過(guò)程中淘邻,兩者都在不斷的進(jìn)步,可以說(shuō)是對(duì)抗成就了對(duì)方湘换。所以宾舅,它們亦敵亦友统阿,相愛(ài)相殺,既對(duì)立又統(tǒng)一筹我。
2 生成對(duì)抗網(wǎng)絡(luò)的理論基礎(chǔ)
我們剛才提到生成器的輸入是由一個(gè)簡(jiǎn)單的分布(如正態(tài)分布)采樣得到的一堆向量扶平,輸出是一堆向量構(gòu)成另一個(gè)一個(gè)復(fù)雜的分布,用表示蔬蕊。我們期望和某個(gè)特定的分布盡可能地相似结澄,而這個(gè)分布來(lái)自于一堆真實(shí)的數(shù)據(jù),這個(gè)分布表示為岸夯。如果我們用來(lái)表示這兩個(gè)分布的Divergence(這個(gè)英文不好翻譯麻献,暫且理解為“差異程度”吧),那么我們的目標(biāo)就是尋找一個(gè)生成器要使最小囱修,即赎瑰,我們知道在機(jī)器學(xué)習(xí)中,訓(xùn)練的目標(biāo)是要使損失函數(shù)最小破镰,所以在該任務(wù)中損失函數(shù)就是餐曼。但是有一個(gè)很關(guān)鍵的問(wèn)題,我們?nèi)绾斡?jì)算這兩個(gè)分布的Divergence呢鲜漩?好像沒(méi)法用解析式去描述這兩個(gè)分布的Divergence源譬,那怎么辦呢?我們可以通過(guò)采樣的方式來(lái)計(jì)算這兩個(gè)分布的Divergence孕似。
采樣是很好辦的踩娘,以二次元人臉生成器為例。的采樣很簡(jiǎn)單喉祭,我們從一堆二次元的圖庫(kù)中隨機(jī)采樣一些圖片就行了养渴。的采樣也很簡(jiǎn)單,我們從正態(tài)分布中采樣一些向量泛烙,生成器輸出一些圖片理卑,就得到的采樣圖片了。我們有了和的采樣了蔽氨,那么怎么計(jì)算呢藐唠?這就需要用到鑒別器了。
假設(shè)從采樣得到的數(shù)據(jù)用藍(lán)色五角星表示鹉究,從采樣得到的數(shù)據(jù)用黃色五角星表示宇立。鑒別器的目的就是遇到藍(lán)色五角星時(shí)輸出的分?jǐn)?shù)要盡量高,遇到黃色五角星時(shí)輸出的分?jǐn)?shù)要盡量低自赔。如果用鑒別器訓(xùn)練的目標(biāo)函數(shù)(最大化一般稱為目標(biāo)函數(shù)妈嘹,最小化一般稱為損失函數(shù)),那么就有匿级,其中表示當(dāng)從中采樣蟋滴,通過(guò)鑒別器后的輸出要盡可能大染厅,表示當(dāng)從中采樣痘绎,通過(guò)鑒別器后的輸出要盡可能小津函,因此加了個(gè)負(fù)號(hào)」乱常可以看出該式中還專門(mén)取了個(gè)對(duì)數(shù)尔苦,這是為了和分類問(wèn)題中的交叉熵保持一致,因?yàn)樵撌郊觽€(gè)負(fù)號(hào)就是分類問(wèn)題中的交叉熵了行施。在訓(xùn)練分類器的時(shí)候是要最小化交叉熵允坚,這里要最大化,所以兩者是等同的蛾号。因此稠项,鑒別器也可以看成一個(gè)二分類器,一類數(shù)據(jù)從采樣得到鲜结,一類數(shù)據(jù)采樣得到展运。
最重要的一點(diǎn)是,和上面提到的Divergence是相關(guān)的精刷,這一點(diǎn)在GAN最原始的文章中有嚴(yán)格的數(shù)學(xué)推理拗胜。
我們可以從直觀上來(lái)理解為什么和是相關(guān)的。假設(shè)比較小怒允,表示這兩者很相似埂软,那么從和采樣得到的數(shù)據(jù)混到一起就很難被鑒別,因此鑒別器的就不會(huì)太大纫事;相反地勘畔,如果比較大,表示這兩者差異性很大丽惶,那么從和采樣得到的數(shù)據(jù)混到一起就比較容易被鑒別炫七,因此鑒別器的就會(huì)比較大。希望了解詳情的蚊夫,請(qǐng)移步GAN的原文诉字。
既然我們已經(jīng)知道和是相關(guān)的,而且是正相關(guān)的知纷。所以生成器的損失函數(shù)中的就可以用來(lái)進(jìn)行替換壤圃,可以得到,這個(gè)損失函數(shù)有點(diǎn)復(fù)雜琅轧,又是伍绳,又是。其實(shí)這個(gè)損失函數(shù)包含了兩個(gè)優(yōu)化問(wèn)題:首先是在固定生成器的情況下乍桂,找到一個(gè)鑒別器使最大冲杀,然后是要找到鑒別器效床,使最小。因此权谁,前面提到的對(duì)抗過(guò)程就是求解的過(guò)程剩檀。所以生成對(duì)抗網(wǎng)絡(luò)的訓(xùn)練如下圖所示。
對(duì)了旺芽,本節(jié)最前面的人臉全部是由機(jī)器生成的沪猴,驚嘆吧!采章?