生成對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Networks,GAN)——讓機(jī)器學(xué)習(xí)具有創(chuàng)造力

1 生成對(duì)抗網(wǎng)絡(luò)概述

有時(shí)候我們希望網(wǎng)絡(luò)具有一定的創(chuàng)造力,比如畫畫、編曲等等,能否實(shí)現(xiàn)呢?是可以實(shí)現(xiàn)的,大家可以鑒別一下下面這幾張照片,哪些是真實(shí)的人臉,哪些是機(jī)器生成的人臉。很難判斷吧?本節(jié)最后會(huì)給出答案。

到底哪些是機(jī)器產(chǎn)生的?

要實(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è)向量z,該向量一般是低維向量,它是通過一個(gè)特定的分布采樣出來的,例如正態(tài)分布。生成器的輸出是另一個(gè)向量y,該向量是一個(gè)高維向量,比如一個(gè)二次元的人臉。由于生成器的輸入向量是通過一個(gè)分布隨機(jī)采樣的,所以輸入向量每次都是不一樣的,因此生成器每次的輸出也是不一樣的,會(huì)形成一個(gè)復(fù)雜的分布。盡管輸出向量不一樣,但是我們要求這些輸出向量都是二次元的人臉,而不是其它。也就是說期望生成器輸出的復(fù)雜分布要和某個(gè)特定分布(例如所有二次元人臉的集合)盡可能相似,如何做到呢?這就要用到“對(duì)抗”。

生成(Generator)

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)一。

對(duì)抗的基本思路

2 生成對(duì)抗網(wǎng)絡(luò)的理論基礎(chǔ)

我們剛才提到生成器的輸入是由一個(gè)簡(jiǎn)單的分布(如正態(tài)分布)采樣得到的一堆向量,輸出是一堆向量構(gòu)成另一個(gè)一個(gè)復(fù)雜的分布,用P_G表示。我們期望P_G和某個(gè)特定的分布盡可能地相似,而這個(gè)分布來自于一堆真實(shí)的數(shù)據(jù),這個(gè)分布表示為P_{data}。如果我們用Div(P_G,P_{data})來表示這兩個(gè)分布的Divergence(這個(gè)英文不好翻譯,暫且理解為“差異程度”吧),那么我們的目標(biāo)就是尋找一個(gè)生成器G^*要使Div(P_G,P_{data})最小,即,G^*=arg\min_{G} Div(P_G,P_{data})我們知道在機(jī)器學(xué)習(xí)中,訓(xùn)練的目標(biāo)是要使損失函數(shù)最小,所以在該任務(wù)中損失函數(shù)就是Div(P_G,P_{data})。但是有一個(gè)很關(guān)鍵的問題,我們?nèi)绾斡?jì)算這兩個(gè)分布的Divergence呢?好像沒法用解析式去描述這兩個(gè)分布的Divergence,那怎么辦呢?我們可以通過采樣的方式來計(jì)算這兩個(gè)分布的Divergence。

生成網(wǎng)絡(luò)的目標(biāo)

采樣是很好辦的,以二次元人臉生成器為例。P_{data}的采樣很簡(jiǎn)單,我們從一堆二次元的圖庫中隨機(jī)采樣一些圖片就行了。P_{G}的采樣也很簡(jiǎn)單,我們從正態(tài)分布中采樣一些向量,生成器輸出一些圖片,就得到P_{G}的采樣圖片了。我們有了P_{data}P_{G}的采樣了,那么怎么計(jì)算Div(P_G,P_{data})呢?這就需要用到鑒別器了。
通過采樣來計(jì)算兩個(gè)分布的Divergence

假設(shè)從P_{data}采樣得到的數(shù)據(jù)用藍(lán)色五角星表示,從P_{G}采樣得到的數(shù)據(jù)用黃色五角星表示。鑒別器的目的就是遇到藍(lán)色五角星時(shí)輸出的分?jǐn)?shù)要盡量高,遇到黃色五角星時(shí)輸出的分?jǐn)?shù)要盡量低。如果用V(D,G)鑒別器訓(xùn)練的目標(biāo)函數(shù)(最大化一般稱為目標(biāo)函數(shù),最小化一般稱為損失函數(shù)),那么就有,V(G, D)=E_{y \sim P_{\text {data }}}[\log D(y)]+E_{y \sim P_{G}}[\log (1-D(y))]其中E_{y \sim P_{\text {data }}}[\log D(y)]表示當(dāng)yP_{data}中采樣,通過鑒別器后的輸出D(y)要盡可能大,E_{y \sim P_{G}}[\log (1-D(y))]表示當(dāng)yP_{data}中采樣,通過鑒別器后的輸出D(y)要盡可能小,因此加了個(gè)負(fù)號(hào)。可以看出該式中還專門取了個(gè)對(duì)數(shù),這是為了和分類問題中的交叉熵保持一致,因?yàn)樵撌郊觽€(gè)負(fù)號(hào)就是分類問題中的交叉熵了。在訓(xùn)練分類器的時(shí)候是要最小化交叉熵,這里要最大化V(D,G),所以兩者是等同的。因此,鑒別器也可以看成一個(gè)二分類器,一類數(shù)據(jù)從P_{data}采樣得到,一類數(shù)據(jù)P_{G}采樣得到。
最重要的一點(diǎn)是,\max_{D}V(D,G)和上面提到的Divergence是相關(guān)的,這一點(diǎn)在GAN最原始的文章中有嚴(yán)格的數(shù)學(xué)推理。
鑒別器

我們可以從直觀上來理解為什么\max_{D}V(D,G)Div(P_G,P_{data})是相關(guān)的。假設(shè)Div(P_G,P_{data})比較小,表示這兩者很相似,那么從P_{G}P_{data}采樣得到的數(shù)據(jù)混到一起就很難被鑒別,因此鑒別器的\max_{D}V(D,G)就不會(huì)太大;相反地,如果Div(P_G,P_{data})比較大,表示這兩者差異性很大,那么從P_{G}P_{data}采樣得到的數(shù)據(jù)混到一起就比較容易被鑒別,因此鑒別器的\max_{D}V(D,G)就會(huì)比較大。希望了解詳情的,請(qǐng)移步GAN的原文。
image.png

既然我們已經(jīng)知道\max_{D}V(D,G)Div(P_G,P_{data})是相關(guān)的,而且是正相關(guān)的。所以生成器的損失函數(shù)中的Div(P_G,P_{data})就可以用\max_{D}V(D,G)來進(jìn)行替換,可以得到,G^*=arg\min_{G} \max_{D}V(D,G)這個(gè)損失函數(shù)有點(diǎn)復(fù)雜,又是\min,又是\max。其實(shí)這個(gè)損失函數(shù)包含了兩個(gè)優(yōu)化問題:首先是在固定生成器G的情況下,找到一個(gè)鑒別器G使V(D,G)最大,然后是要找到鑒別器G,使\max_{D}V(D,G)最小。因此,前面提到的對(duì)抗過程就是求解G^*=arg\min_{G} \max_{D}V(D,G)的過程。所以生成對(duì)抗網(wǎng)絡(luò)的訓(xùn)練如下圖所示。
image.png

對(duì)了,本節(jié)最前面的人臉全部是由機(jī)器生成的,驚嘆吧???

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容