1 生成對(duì)抗網(wǎng)絡(luò)概述
有時(shí)候我們希望網(wǎng)絡(luò)具有一定的創(chuàng)造力,比如畫畫、編曲等等,能否實(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
) 。首先,我們大概來了解一下什么是 “生成” ,什么是 “對(duì)抗”。
8.1.1 對(duì)“生成”的理解
假設(shè)我們?cè)O(shè)計(jì)一個(gè)網(wǎng)絡(luò),將其稱為 “生成器(Generator)”。生成器的輸入是一個(gè)向量,該向量一般是低維向量,它是通過一個(gè)特定的分布采樣出來的,例如正態(tài)分布。生成器的輸出是另一個(gè)向量
,該向量是一個(gè)高維向量,比如一個(gè)二次元的人臉。由于生成器的輸入向量是通過一個(gè)分布隨機(jī)采樣的,所以輸入向量每次都是不一樣的,因此生成器每次的輸出也是不一樣的,會(huì)形成一個(gè)復(fù)雜的分布。盡管輸出向量不一樣,但是我們要求這些輸出向量都是二次元的人臉,而不是其它。也就是說期望生成器輸出的復(fù)雜分布要和某個(gè)特定分布(例如所有二次元人臉的集合)盡可能相似,如何做到呢?這就要用到“對(duì)抗”。
1.2 對(duì)“對(duì)抗”的理解
我們常說要“感謝對(duì)手”,為什么呢?因?yàn)閷?duì)手逼得我們不斷想辦法進(jìn)步,最后讓我們進(jìn)化成長(zhǎng)為優(yōu)秀的人。為了使生成網(wǎng)絡(luò)不斷進(jìn)化以成為畫畫高手,我們還需要訓(xùn)練另外一個(gè)網(wǎng)絡(luò),叫做 “鑒別器(Discriminator)” 。鑒別器是專門用來和生成網(wǎng)絡(luò)進(jìn)行對(duì)抗的,就是用它來逼得生成網(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è)鑒別器拿過來和生成器進(jìn)行對(duì)抗:
- ①版本1的生成器的參數(shù)是隨機(jī)生成的,所以其生成的圖片啥都不是。這 時(shí)候,我們對(duì)鑒別器進(jìn)行訓(xùn)練,以使鑒別器能夠鑒別出哪些是生成器生成的圖片,哪些是真實(shí)的二次元人臉。經(jīng)過訓(xùn)練后,我們得到了版本1的鑒別器。
- ②在版本1的鑒別器的基礎(chǔ)上,我們?cè)賮碛?xùn)練生成器,訓(xùn)練的目的是讓鑒別器分辨不出哪些是生成器生成的圖片,哪些是真實(shí)的二次元人臉。通過訓(xùn)練之后,得到了版本2的生成器,此時(shí)生成的圖片有一點(diǎn)點(diǎn)像二次元了,足以騙過版本1的鑒別器。
- ③在版本2的生成器的基礎(chǔ)上,我們接著訓(xùn)練鑒別器,同樣是要使鑒別器能夠鑒別出哪些是版本2生成器生成的圖片,哪些是真實(shí)的二次元人臉。通過訓(xùn)練之后,得到了版本2的鑒別器。
- ④重復(fù)上述過程,不斷進(jìn)化生成器和鑒別器,最后生成器可以生成非常逼真的二次元人臉。
通過上述過程我們可以看出,生成器和鑒別器在不斷的對(duì)抗過程中,兩者都在不斷的進(jìn)步,可以說是對(duì)抗成就了對(duì)方。所以,它們亦敵亦友,相愛相殺,既對(duì)立又統(tǒng)一。
2 生成對(duì)抗網(wǎng)絡(luò)的理論基礎(chǔ)
我們剛才提到生成器的輸入是由一個(gè)簡(jiǎn)單的分布(如正態(tài)分布)采樣得到的一堆向量,輸出是一堆向量構(gòu)成另一個(gè)一個(gè)復(fù)雜的分布,用表示。我們期望
和某個(gè)特定的分布盡可能地相似,而這個(gè)分布來自于一堆真實(shí)的數(shù)據(jù),這個(gè)分布表示為
。如果我們用
來表示這兩個(gè)分布的Divergence(這個(gè)英文不好翻譯,暫且理解為“差異程度”吧),那么我們的目標(biāo)就是尋找一個(gè)生成器
要使
最小,即,
我們知道在機(jī)器學(xué)習(xí)中,訓(xùn)練的目標(biāo)是要使損失函數(shù)最小,所以在該任務(wù)中損失函數(shù)就是
。但是有一個(gè)很關(guān)鍵的問題,我們?nèi)绾斡?jì)算這兩個(gè)分布的Divergence呢?好像沒法用解析式去描述這兩個(gè)分布的Divergence,那怎么辦呢?我們可以通過采樣的方式來計(jì)算這兩個(gè)分布的Divergence。
采樣是很好辦的,以二次元人臉生成器為例。

假設(shè)從
最重要的一點(diǎn)是,
我們可以從直觀上來理解為什么
既然我們已經(jīng)知道
對(duì)了,本節(jié)最前面的人臉全部是由機(jī)器生成的,驚嘆吧???