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孕似。
采樣是很好辦的踩娘,以二次元人臉生成器為例。
假設(shè)從
最重要的一點(diǎn)是,
我們可以從直觀上來(lái)理解為什么
既然我們已經(jīng)知道
對(duì)了旺芽,本節(jié)最前面的人臉全部是由機(jī)器生成的沪猴,驚嘆吧!采章?