生成模型 機器學(xué)習的模型大體分為兩類,判別模型(Discriminative Model)與生成模型(Generative Model)。判別模型是用來預(yù)測或判斷輸入的類別的。例如給我們一張動物的圖片,讓我們的分類器判斷這個圖片里的動物是不是牛,或者判斷圖片里的動物是什么,這都屬于判別模型;而生成模型則是用來隨機產(chǎn)生觀測數(shù)據(jù)(或者根據(jù)某些隨機生成的噪聲來生成觀測數(shù)據(jù))。例如當我們給定一系列牛的圖片,然后讓我們的生成器根據(jù)這類圖片再生成一張牛的圖片。如果從數(shù)學(xué)的角度看,判別模型相當于學(xué)習一個條件分布 在前面幾篇科普文中,我們介紹的模型大多是以判別模型舉例的。例如對于圖片判斷類別(Classification)、檢測物體的位置與分類(Object Detection)或是分割(Segmentation),都是針對輸入的圖片進行某些信息的判斷的。事實上,目前機器學(xué)習領(lǐng)域主要的工作也都集中在判別模型的領(lǐng)域。其中一個原因是因為判別模型目前應(yīng)用的領(lǐng)域比較廣泛,而另一個原因則是因為判別模型的訓(xùn)練要相對簡單。 我們之前說過,神經(jīng)網(wǎng)絡(luò)的本質(zhì)是一個萬能的函數(shù)擬合器,其訓(xùn)練的方式是優(yōu)化某一函數(shù)。當我們訓(xùn)練判別模型的時候,假設(shè)輸入為x,其對應(yīng)的label為y,而我們的模型為 而對于生成模型而言,其損失函數(shù)的定義則十分不清晰。如果我們采取歐式距離,例如將生成圖片與訓(xùn)練集的圖片的歐式距離作為loss,則這個loss含義并不清晰。更重要的是,這種歐式距離是不適應(yīng)疊加的。比方說,我有100張牛的圖片,你用一個強大優(yōu)化算法求出一張圖片,使得該圖片與那100張牛的圖片的距離總和嚴格最小,找不到其他圖片能夠使得這個總距離最小??墒钱斈阕屑毧催@張圖片的時候,你可能完全看不出牛的樣子(這張圖片或許會是一片混亂的涂鴉,讓人看不出任何有價值的信息)。正是由于生成模型的損失相對難以定義,所以其發(fā)展要比判別模型更加艱難。 如果換一個說法理解,我們可以認為判別模型能對一個高維輸入給出一個低維輸出(例如分類問題),或者對一個高維輸入給出高維輸出(例如分割問題)。而生成模型則是能對一個低維的輸入或是一個高維的隨機噪音輸入,去生成一個有意義的高維輸出。從這一點來看,也不難理解生成模型比起判別模型要更加復(fù)雜。 我們考慮一個基本的問題。當我們擁有一個包含10000張牛的圖片的數(shù)據(jù)集時,如何建立一個生成器,使得其能夠生成出一張全新的牛的圖片? 當然,圖片的生成不可能是憑空的。所以一般而言,我們建立的生成模型要接受一個隨機的噪聲為輸入,然后輸出一個牛的圖片。這個噪聲可以理解為牛的“隨機種子”。對于更高級一些的模型,我們可以輸入一些對于圖片的具體要求,例如牛的大小、牛的顏色等等。模型接受這些人為設(shè)定的參數(shù)與一定的隨機噪聲,然后輸出一個滿足我們要求的圖片。 目前,能夠利用深度學(xué)習相關(guān)技術(shù)實現(xiàn)較好的生成模型的主要方法有三種,第一種是自回歸類的方法,例如Pixel CNN等;第二類是自編碼類的方法,例如VAE等;第三種則是對抗生成模型(GAN)。我們首先來簡要介紹下前兩種方法的主要思路,然后再開始詳細介紹第三種,也即我們今天的主題GAN。 自回歸類的算法基于一個基本的假設(shè)——我們要生成的數(shù)據(jù)在因果關(guān)系上是順序的。在這個順序的結(jié)構(gòu)中,前面的元素決定了后面元素的概率分布。也就是說,對于所有的i,我們由模型得到 在目前的自然語言處理領(lǐng)域,例如“生成講話”、“生成同人文”等一類應(yīng)用中,最常見的生成模型都相當于在使用RNN(例如LSTM或GRU等)進行自回歸。其首先學(xué)習給定數(shù)據(jù)集,學(xué)習語言的條件概率分布。然后再在隨機初始化之后,根據(jù)學(xué)到的語言概率分布去生成序列。例如下面是一個生成講話的例子: 在圖片生成的領(lǐng)域,我們可以假定各個像素之間也是根據(jù)一定順序排列而成的,并且像素之間也有因果的決定關(guān)系。例如,我們可以將圖片中最左上角的像素命名為1號像素,將它緊鄰右邊的一個像素命名為2號像素,剩下的根據(jù)先從左到右,再從上到下的順序排列好。然后,我們可以先隨機初始化1號像素,接著根據(jù)1號像素生成2號像素,根據(jù)1、2號像素生成3號,根據(jù)1、2、3號像素生成4號。以此類推,生成整個圖片。 Pixel-CNN大體上就是根據(jù)這種原理設(shè)計而成的。Pixel-CNN包含兩個方向上的卷積網(wǎng)絡(luò),垂直的和水平的。垂直的網(wǎng)絡(luò)可以看到所有需要預(yù)測的像素上方的像素 (在下圖中微藍色區(qū)域),而水平的網(wǎng)絡(luò)可以看到所有該像素左邊的像素(圖中對應(yīng)左邊區(qū)域)。在訓(xùn)練過程中,為了避免看到“后面”的像素,它使用了帶有掩膜的卷積;在生成圖片時,需要從隨機化的初始點開始,從左到右從上到下地一個個像素地生成圖片。每一個像素由其左邊與上面的像素決定。其示意圖如下所示: 除了圖像與自然語言的領(lǐng)域外,還有類似的自回歸結(jié)構(gòu)運用在別的領(lǐng)域也取得了成功。例如WaveNet在音頻生成上取得了重大成功等。不過要注意的是,與語言、語音這種天然具有序列型的結(jié)構(gòu)相比,將圖像中的像素強行組織成這種順序結(jié)構(gòu),從邏輯上是有一定不足的。這也導(dǎo)致雖然Pixel-CNN與WaveNet結(jié)構(gòu)幾乎差不多,但是目前Pixel-CNN在圖片生成的領(lǐng)域遠遠不具有WaveNet在音頻生成領(lǐng)域那樣的地位。 第二種主要的生成模型是基于自編碼(Auto Encoder)的方法。在之前的文章中,我們介紹過自編碼是一種非線性降維的方法。它可以幫助我們找出將高維的信息編碼成低維表示,并且解碼恢復(fù)原有信息的方法。在自編碼中,我們力圖要優(yōu)化的目標是重建損失。即假設(shè)我們原有的圖片是X,編碼器將X編碼為z,解碼器將z解碼為X’,則我們要通過優(yōu)化使得X與X’之間的差異(重建損失)盡量小。我們可以想象,這里的z是一種對于高維數(shù)據(jù)的稀疏表示。從這個意義上而言,人腦對于圖片的記憶也是一個編碼的過程——當我們看了一張高維的圖片之后,我們不可能將其按照像素記憶,而是將其記憶為一些稀疏的信息。而解碼則是根據(jù)這些稀疏的信息重新想象出原來圖片的過程。 我們期望自編碼技術(shù)可以達到人類智能一般強大的能力——將高維X編碼為我們能夠理解且含義清晰的稀疏信息z,例如牛有多大之類的。但是事實上,目前的自編碼技術(shù)遠遠不具備這種能力。我們對X編碼出來的z往往十分復(fù)雜,它是服從某個分布的隱含變量,并且我們并不知道如何顯式地了解它與圖片的關(guān)系。當我們隨意生成一個z,將其交給解碼器解碼后,往往效果不好,甚至會得到混亂的涂鴉。這正是z是本身具有某種分布的隨機變量導(dǎo)致的。所以,我們有兩種方法利用自編碼技術(shù)來建造生成模型。 其一是使用普通的自編碼技術(shù),接著用其它的生成模型來學(xué)習編碼z的分布。然后,根據(jù)學(xué)習到的z的分布來生成一個全新的z’,再根據(jù)這個z’解碼得到生成的圖片。由于從X編碼為z的過程已經(jīng)進行了充分的降維,所以學(xué)習z的分布比學(xué)習X的分布要更加簡單。我們用一些傳統(tǒng)的生成模型即可做到這一點。但是現(xiàn)實中人們采取這種做法的并不多。 其二是一種被稱為變分自編碼(Variational AutoEncoder,簡稱VAE)的方法,這也是利用自編碼技術(shù)做生成模型的主流。它與一般的自編碼稍有不同。我們在使用VAE建立編碼器與解碼器的時候,不但像一般的自編碼器一樣考慮讓解碼后的重建損失盡量小,我們同時還要考慮讓編碼盡量接近正態(tài)分布。在VAE中,我們一般用交叉熵(KL散度)來衡量z的分布與正態(tài)分布的差異,KL散度越大則意味著z與正態(tài)分布的差異越大,反之則z越接近正態(tài)分布。故而在VAE中,我們要優(yōu)化的損失是一個重建損失與KL散度的和。當VAE優(yōu)化完成后,我們就得到了一個編碼器,可以將我們手頭的圖片都編碼成某個正態(tài)分布。而當我們根據(jù)該正態(tài)分布生成一個新的z時,將其放入我們的解碼器進行解碼,即可得到生成的圖片。如下圖所示: 我們已經(jīng)介紹了自回歸與VAE這兩種常見的生成模型的思想。我們想象圖片是一個高維數(shù)據(jù)( 而VAE的方法則相當于將這個聯(lián)合分布分解為隱變量的分布與關(guān)于隱變量的條件分布的乘積,即: 而GAN與上述二者不同。它相當于是“直接”解出聯(lián)合分布P( 生成對抗模型GAN 下面,我們來介紹GAN的基本結(jié)構(gòu)。 我們有許多牛的圖片,而我們希望利用深度學(xué)習技術(shù)來造這樣一個生成模型——當我們輸入一個隨機產(chǎn)生的噪聲圖片,它通過我們的網(wǎng)絡(luò)后,就能夠變成一個“像模像樣”的牛。 然而,深度學(xué)習技術(shù)本身是一種優(yōu)化的技術(shù)。如果我們有一個“標準圖片”,我們可以衡量輸出與標準圖片的距離,作為需要優(yōu)化的損失。這樣,經(jīng)過多次訓(xùn)練之后,我們網(wǎng)絡(luò)就可以把噪聲輸入給變得接近于標準圖片一樣輸出。但是,在前面我們也已經(jīng)說過了,上述的“標準圖片”是不存在的。我們不知道何種損失才能衡量“是否像一頭?!薄?GAN的想法是,既然我們不明白如何定義一個損失去衡量“是否像一頭牛”,我們不妨將其想象成一個極其復(fù)雜的函數(shù)。既然是一個復(fù)雜的函數(shù),則我們就可以用另外一個神經(jīng)網(wǎng)絡(luò)去擬合它。如果我們有一個完美的神經(jīng)網(wǎng)絡(luò),判斷一個圖片“是否像一頭?!保瑒t我們就可以根據(jù)這個網(wǎng)絡(luò)提供的損失優(yōu)化我們的生成網(wǎng)絡(luò)。這事實上就是GAN的主要思想。 GAN的設(shè)計如下:它同時訓(xùn)練一個生成網(wǎng)絡(luò)G與一個判別網(wǎng)絡(luò)D。G的作用是接受隨機的高維噪音作為輸入,輸出一個盡量像牛的圖片。而我們將G網(wǎng)絡(luò)輸出的、企圖偽裝為牛的圖片,增加一個“假”的標簽,而將訓(xùn)練集里的牛的圖片增加一個“真”的標簽。將這一組混合了“真牛”與“假?!钡膱D片交給D網(wǎng)絡(luò),令其學(xué)習如何分別一個圖片是否是真的牛。訓(xùn)練的過程就好像是一個對抗的過程,D是“火眼金睛”的警察,努力想辨別出G“造假”的圖片;而G則是“以假亂真”的騙子,努力打磨自己的技術(shù),企圖有一天能夠騙過D的眼睛,造出和訓(xùn)練集一模一樣的圖片。其示意圖如下: 對于D而言,其訓(xùn)練是相對簡單的。它的訓(xùn)練集是許多有標記的數(shù)據(jù)集,包括被標記為“真”的現(xiàn)實中牛的圖片與被標記為“假”的G造出來的圖片。我們可以建立一個CNN,其輸入為圖片,輸出為一個經(jīng)過壓縮函數(shù)(Sigmoid或tanh)壓縮到0與1之間的數(shù),表示其為真的概率;也可以讓其輸出兩個數(shù),經(jīng)過softmax之后,得到其為真的概率與為假的概率。總之,這可以做為一個二分類問題,或是一個回歸問題,比較簡單。 而對于G而言,其訓(xùn)練相對復(fù)雜。它的輸入是高維噪聲z,輸出是造假的圖片G(z)。在監(jiān)督學(xué)習問題中,我們有一個標簽L,我們的目的是讓損失 Goodfellow創(chuàng)立GAN的第一篇論文《Generative Adversarial Nets》中明確了其嚴格的數(shù)學(xué)定義: 理論上而言,GAN的訓(xùn)練是一個min-max的過程,即訓(xùn)練最終要優(yōu)化的目標是: 這意味著,我們要在D做到最好的情況下,來優(yōu)化G——這是合乎情理的——因為我們對G的訓(xùn)練是為了讓它能夠迎合D的判斷。如果D的判斷能力完全和人眼一模一樣,而你讓G去努力迎合D的判斷,就是讓G往正確的方向?qū)W習;而如果D完全是瞎判斷,則你讓G去迎合D的判斷,起不到任何效果。一般來說,D越好的時候你讓G去學(xué)習迎合它的判斷就越有意義。這就仿佛是面對強大的對手時候,才能有效地提升自己。而面對太弱小的對手時,即使熟練地學(xué)會了擊敗他的方法,也毫無意義。 但是另一方面,如果D太強大而G太弱,也是無法訓(xùn)練的。因為D會將G(z)及其鄰域都判斷為0,導(dǎo)致G找不到更新的方向。這就好像遇到了強大的對手,你如何微調(diào)自己的技巧,都沒有使得自己獲勝的希望增加一點。這也是對于提升自己不利的。 所以,在GAN的訓(xùn)練過程中,為了求出上述的min-max點,我們一般同時、交替地訓(xùn)練兩個網(wǎng)絡(luò)。對D網(wǎng)絡(luò)進行梯度上升,對G網(wǎng)絡(luò)進行梯度下降。這樣一來,兩個網(wǎng)絡(luò)就可以同時成長、同時提高。每個階段他們都可以從與自己同等水平的對手進行對抗。訓(xùn)練初期,不太強大的G在努力學(xué)習造假,以騙過不太強大的D的眼睛;而不太強大的D則在努力學(xué)習辨認,企圖找出不太強大的G造的贗品;等到了訓(xùn)練末期,強大的G已經(jīng)可以造出以假亂真的圖片,而強大的D也火眼金睛地能夠察覺贗品中不起眼的細節(jié)。由于訓(xùn)練的過程充滿了對抗性,所以被稱為Generative Adversarial Nets,這也是GAN名字的由來。 具體而言,其訓(xùn)練方法如下: 在上述的圖中,我們可以看到,我們要對D進行k步的梯度上升,然后才對G進行一次梯度下降,然后再對D進行k步梯度上升,再對G進行梯度下降……這是因為初代的GAN訓(xùn)練時候很不穩(wěn)定。我們希望讓D具有一定的判別能力后,再讓G去學(xué)習迎合他。所以,我們總是期待D要比G更強一些。實驗也證明了這樣的方法效果比較好。 此外,在實際訓(xùn)練中,一般采用 在上圖中,藍色的虛線代表D對于模型為真的概率的判斷——越高表示越有可能為真;黑色的虛線表示真實x的密度函數(shù);綠色的實線表示G生成的“偽造品”的密度。 在訓(xùn)練的初始階段,均勻的z全部被映射到了右邊,形成了綠色實線的分布。它與黑色虛線代表的真實數(shù)據(jù)分布有所出入。而藍色虛線此起彼伏,表示D的判斷很隨性,不能正確地分辨真假。 在訓(xùn)練的第二個階段,D被訓(xùn)練得性能提高了。它知道真品的均值比較靠左,而贗品的均值比較靠右,所以它判斷靠左的x都比較有可能為真,靠右的x都比較困難為假。 在訓(xùn)練的第三個階段,由于D性能的提升,G也要努力學(xué)習迎合D。它知道D更有可能將靠左的x判別為真,所以它也竭力將不同的z生成的x靠左。而D也在根據(jù)G的提升做出相應(yīng)的變化。 在訓(xùn)練的最終階段,G的性能提升到了極致——它能生成完全與真實x密度一樣的數(shù)據(jù)。而這時候D為了其性能最優(yōu),也只能將所有輸入的x視為0.5為真,0.5為假了。此時,我們的目的便達到了。由于D成為了常數(shù),所以D(G(z))也無法再進行更新,訓(xùn)練結(jié)束。 以下是GAN在MINIST(手寫數(shù)字)數(shù)據(jù)集上訓(xùn)練的結(jié)果。其一開始生成的是一片混亂的噪音。隨著訓(xùn)練,其逐漸能夠?qū)懗鲆恍┯心S袠拥臄?shù)字。到最后,GAN幾乎能夠生成與人類手寫數(shù)字一模一樣的數(shù)字。如下圖所示: GAN的變體 在GAN中,我們輸入的是隨機的噪音,我們也不能人為調(diào)整輸入獲得我們想要的輸出,我們也不知道輸入與輸出之間的關(guān)系。例如對于用MINIST數(shù)據(jù)集訓(xùn)練好的GAN來說,我們只是隨機地輸入一個高維正態(tài)噪音z,輸出一個手寫數(shù)字。我們無法人為控制輸出的手寫數(shù)字是6還是9。 因此,我們會很自然地想到能否用一個有意義的數(shù)據(jù)作為輸入,得到相應(yīng)的輸出。我們希望達到的理想的情況是我們能人為地調(diào)整輸出,使得輸出也相應(yīng)發(fā)生調(diào)整。針對這種思想,Mehdi Mirza與Simon Osindero發(fā)明了CGAN(Conditional Generative Adversarial Nets)。 同樣對于MINIST數(shù)據(jù)集的數(shù)字字體生成,CGAN嘗試比普通的GAN更進一步。它希望能夠接受一個人為指定的數(shù)字作為輸入,然后輸出對應(yīng)的字體。 CGAN比起GAN而言,訓(xùn)練方式基本沒有太大的變化,唯一的變化就是從GAN的無監(jiān)督學(xué)習變成了有監(jiān)督學(xué)習。(不過這和傳統(tǒng)的圖像分類這樣的任務(wù)正好相反——圖像分類是輸入圖片,然后對圖像進行分類,而這里是輸入分類,要反過來輸出圖像。這顯然要比傳統(tǒng)的圖像分類問題更難) 我們讓G網(wǎng)絡(luò)的輸入在z的基礎(chǔ)上再額外連接一個輸入y,然后在D網(wǎng)絡(luò)的輸入在x的基礎(chǔ)上也連接一個y。這里的y是一個10維的one-hot向量,表示各個手寫數(shù)字。例如(1,0,0,0,0,0,0,0,0,0)表示0而(0,0,0,0,0,1,0,0,0,0)表示5。然后,再將連接好的數(shù)據(jù)集放入網(wǎng)絡(luò)中進行訓(xùn)練。其示意圖如下: 相應(yīng)地,我們將優(yōu)化的目標改為: 可以看到,我們在CGAN中的優(yōu)化目標由GAN的概率變成了條件概率。這也是其得名Conditional GAN的原因。與GAN類似,我們?nèi)匀唤惶嬗?xùn)練兩個網(wǎng)絡(luò),對D網(wǎng)絡(luò)的參數(shù)進行梯度上升,對G網(wǎng)絡(luò)的參數(shù)進行梯度下降。 利用CGAN訓(xùn)練MINIST數(shù)據(jù)集,做出的效果如下所示(其中每一行代表一種輸入對應(yīng)的輸出): 在CGAN中,人們實現(xiàn)了人為調(diào)整輸入,以獲得所需輸出這樣的功能。但是,這畢竟還是一個有監(jiān)督學(xué)習的過程,我們需要人為地對訓(xùn)練數(shù)據(jù)加上標簽,才能實現(xiàn)這一點。因此,我們自然地想到,能否用一個無監(jiān)督學(xué)習過程,讓GAN自己學(xué)習特征?這就是Info-GAN的主要思路。 在Info-GAN中,我們將G網(wǎng)絡(luò)的輸入類似CGAN一樣,在z上拼接一個c變量。不過這個c變量不是有監(jiān)督的標簽,并且神經(jīng)網(wǎng)絡(luò)也不知道它是什么含義。但是,在訓(xùn)練過程中我們希望c與G網(wǎng)絡(luò)輸出的x之間的互信息(mutual information)最大化,也就是讓c不同的時候,整個輸出的圖片x盡可能強烈地發(fā)生變化。 同樣是利用MINIST數(shù)據(jù)集進行訓(xùn)練,作者定義了10個one-hot變量,與2個連續(xù)變量,并且在訓(xùn)練過程中增大其與圖片的互信息。很快,10個one-hot變量就學(xué)會了分別代表不同的手寫數(shù)字,因為只有這樣,其與圖片的互信息才會足夠大。 訓(xùn)練完畢后,我們嘗試調(diào)節(jié)固定one-hot變量的前提下調(diào)整另外兩個連續(xù)變量,得到如下的輸出: 可見,由于訓(xùn)練過程中我們不斷增大變量c與輸出圖片x的互信息,所以網(wǎng)絡(luò)分別學(xué)會了兩個最快地增大互信息的辦法,那就是讓兩個c分別代表字體的傾斜度與粗細程度。當網(wǎng)絡(luò)學(xué)習完畢之后,我們可以手動地設(shè)定數(shù)字、傾斜度與粗細程度的參數(shù),輸入網(wǎng)絡(luò),得到符合我們要求的輸出。不得不說這是十分強大的功能。 要注意的是,上述的訓(xùn)練是在無監(jiān)督學(xué)習下完成的,也就是說我們從來沒有人為指定兩個變量代表字體的傾斜程度與粗細程度,也沒有人為地為此添加標簽。我們完全只是利用互信息的概念,嘗試在訓(xùn)練過程中增大c與x的互信息,這就導(dǎo)致c自動地學(xué)會了傾斜度與粗細程度的這兩個屬性。不得不說,這是一件十分神奇的事情。 在Goodfellow發(fā)明了基礎(chǔ)版的GAN之后,許多人對其進行了改進。其中比較有代表性的改進除了CGAN、Info-GAN外,還有LAPGAN、DCGAN、GRAN、VAEGAN等等,有興趣的同學(xué)們可以自己去查閱有關(guān)的論文。 這里我們再展示幾個用GAN及其變體可以達到的神奇效果。例如生成的臥室圖片: 例如用包含戴眼鏡的男人、不帶眼鏡的男人,以及不戴眼鏡的女人,生成戴眼鏡的女人的圖片: 例如根據(jù)客戶給的涂鴉,生成一張風景圖: 可見,GAN能有許多十分神奇的用處。 小結(jié) 本文中,我們主要介紹了生成模型。生成模型是為了學(xué)習一個分布,而判別模型是為了學(xué)習一個條件分布;生成模型一般接受低維輸入,輸出高維的結(jié)果,而判別模型一般接受高維輸入,輸出低維的結(jié)果。從各個角度來看,生成模型都比判別模型要更難。這也是目前針對生成模型的研究少于判別模型的主要原因。但是隨著技術(shù)的發(fā)展,越來越多研究者開始將目光聚焦于生成模型的領(lǐng)域。 目前主要有三種利用深度學(xué)習的生成模型。第一種是自回歸的模型,例如生成文字的LSTM、生成圖片的Pixel-CNN,以及生成音頻的WaveNet等等。它試圖將一個聯(lián)合分布拆開成為一系列條件分布的乘積,加以學(xué)習;第二種是VAE,它企圖將聯(lián)合分布拆開為隱含變量的分布以及數(shù)據(jù)關(guān)于隱含變量的分布,利用自編碼的技術(shù)加以學(xué)習;第三種即是我們重點介紹的GAN,它企圖直接學(xué)習整個數(shù)據(jù)的聯(lián)合分布,是一種最接近于深度學(xué)習思維的算法。具體而言,它用一個D網(wǎng)絡(luò)來學(xué)習數(shù)據(jù)聯(lián)合分布的密度,用一個G網(wǎng)絡(luò)來學(xué)習將低維噪聲往數(shù)據(jù)聯(lián)合分布的映射方式。它讓二者同時訓(xùn)練、相互對抗、共同進步,使得最后G網(wǎng)絡(luò)能夠很好地生成以假亂真的數(shù)據(jù)。 GAN有許多變體,而我們主要介紹了CGAN與Info-GAN兩種。它們都試圖讓輸入的數(shù)據(jù)具有一定的意義,以實現(xiàn)通過人為調(diào)節(jié)輸入來控制輸出。具體而言,CGAN采取的是有監(jiān)督學(xué)習的策略,需要將數(shù)據(jù)人為標注上人們能夠理解的的數(shù)據(jù)特性;而Info-GAN則采取的是無監(jiān)督學(xué)習的策略,希望網(wǎng)絡(luò)可以自己學(xué)習到數(shù)據(jù)的一些特性。當Info-GAN學(xué)習完畢后,我們也常常能夠看得出來其自主學(xué)習到的數(shù)據(jù)特性是什么,這正是其神奇之處。如果同學(xué)們想了解更多有關(guān)GAN的內(nèi)容,可以自行查閱有關(guān)資料。 |
|