編者按:《GANs in Action》作者Jakub Langr簡(jiǎn)述了對(duì)抗生成網(wǎng)絡(luò)原理及其在半監(jiān)督學(xué)習(xí)中的意義。
在許多研究人員和我的朋友看來(lái),對(duì)抗生成學(xué)習(xí)/網(wǎng)絡(luò)(Generative Adverserial Learning/Networks,GANs)很可能是AI的未來(lái)發(fā)展方向之一。GAN在商業(yè)上有很清晰的吸引力:可以基于較少的數(shù)據(jù)訓(xùn)練,可以創(chuàng)建迷人的應(yīng)用(例如3D模型生成),有大量研究潛力。
本文包括一定的技術(shù)內(nèi)容,也有一些高層的偽代碼,但我將盡力讓這篇文章容易理解,也希望這篇文章不會(huì)太枯燥。
你想擠上AI這趟車嗎?
GAN這一切都是最前沿的內(nèi)容,本文提到的一些內(nèi)容甚至是一兩年前剛在學(xué)術(shù)期刊上發(fā)布的內(nèi)容。所以,除非你是這方面的博后,初次接觸GAN可能會(huì)讓你覺得不同尋常(至少對(duì)我來(lái)說(shuō)是這樣的)。同時(shí)這也意味著其中有一些研究沒有對(duì)應(yīng)的理論,你需要應(yīng)對(duì)一些超奇怪的bug. 不過(guò)因?yàn)槲易罱瓿闪耍ê冒桑艺娴暮芟矚g上MOOC)Parag Mital開設(shè)的非常棒的Creative Applications of Deep Learning with TensorFlow(基于TensorFlow的深度學(xué)習(xí)創(chuàng)意應(yīng)用)課程,我決定分享一些我學(xué)到的東西。
半監(jiān)督學(xué)習(xí)大致上指在訓(xùn)練中同時(shí)使用標(biāo)注過(guò)的(監(jiān)督)和未標(biāo)注過(guò)的(無(wú)監(jiān)督)樣本,這是一個(gè)比較老的概念了。它的核心思想意義很大:在典型的監(jiān)督設(shè)定下,我們有大量沒有使用的數(shù)據(jù)。例如,在房?jī)r(jià)(標(biāo)注)數(shù)據(jù)上的線性回歸。我們都明白線性回歸可以生成房?jī)r(jià),但大多數(shù)房子沒有出售,然而我們也許仍然能取得相關(guān)數(shù)據(jù),比如從城市規(guī)劃數(shù)據(jù)中獲取。這些數(shù)據(jù)可以給我們提供更多的信息,例如對(duì)比不同區(qū)域,哪里的房子相對(duì)而言供不應(yīng)求,哪里大面積的房子更多。不以某種形式利用這些數(shù)據(jù)很蠢,但傳統(tǒng)的算法沒法使用它們。
因此,半監(jiān)督學(xué)習(xí)(SSL)意味著使用不同技術(shù)以某種方式在機(jī)器學(xué)習(xí)(ML)模型的訓(xùn)練中添加這些數(shù)據(jù)。這并非微不足道:如果把訓(xùn)練ML想象出創(chuàng)建一棵決策樹,接著通過(guò)檢查是否得出正確答案評(píng)估決策樹的表現(xiàn)。那么,很不幸,在未標(biāo)注數(shù)據(jù)上,沒有正確答案(因?yàn)樵跀?shù)據(jù)收集期間房子未曾出售),所以沒法進(jìn)行學(xué)習(xí),因?yàn)镸L算法無(wú)法連接正確答案(因此無(wú)法計(jì)算損失)。在這篇文章中,我希望集中討論其中一種稱為對(duì)抗生成網(wǎng)絡(luò)的SSL技術(shù)。
GAN有兩個(gè)網(wǎng)絡(luò)組成。第一個(gè)網(wǎng)絡(luò)創(chuàng)建世界的內(nèi)在版本(即通常房子是什么樣的):這稱為生成模型(G),基本上它基于一切數(shù)據(jù)學(xué)習(xí),因?yàn)樗恍枰?a target="_blank">標(biāo)簽,只需要數(shù)據(jù)集中典型房屋的所有特征。第二個(gè)網(wǎng)絡(luò),稱為判別器(D),和G對(duì)抗,同時(shí)從真實(shí)數(shù)據(jù)集和生成器生成的房屋樣本中取樣,決定數(shù)據(jù)看起來(lái)是不是真的。
換句話說(shuō),想象我們正在嘗試標(biāo)注貓或狗,在這一情形下,G將學(xué)習(xí)如何生成圖像,并逐漸使生成的圖像越來(lái)越像貓或狗。
接著,我們大致上讓G和D互相競(jìng)爭(zhēng),以產(chǎn)生最好的結(jié)果:我們希望每次G變得更好時(shí),D也能變得更好,相互匹配(我們需要確保G或D沒有勝出對(duì)方太多)。這也正是驅(qū)動(dòng)AlphaGo的核心原則之一?;旧希覀冏孏生成圖像,讓D對(duì)此加以評(píng)判。所以G會(huì)傳遞一組圖像給D,而D會(huì)輸出0或1(代表真假)并傳回G。接著G會(huì)根據(jù)哪些圖像騙過(guò)了D、哪些沒騙過(guò)而努力生成更好的樣本。
來(lái)源:KDNuggets.com
所以我希望你明白了上面的過(guò)程,我們可以基于大量未標(biāo)注數(shù)據(jù)構(gòu)建一個(gè)生成器,并讓它學(xué)習(xí)數(shù)據(jù)的某些結(jié)構(gòu)(即,典型樣本看起來(lái)是什么樣的),接著讓它在競(jìng)爭(zhēng)中使生成數(shù)據(jù)盡可能接近真實(shí)數(shù)據(jù)。經(jīng)過(guò)這一過(guò)程,我們可能得到一些看起來(lái)相當(dāng)不錯(cuò)的合成數(shù)據(jù),這些合成數(shù)據(jù)的數(shù)量幾乎是無(wú)限的。另外,我想指出(省略大量說(shuō)明):生成器只能生成和之前見過(guò)的數(shù)據(jù)相似的數(shù)據(jù)。人們很容易忘記這點(diǎn),沒有魔法。
請(qǐng)會(huì)拉丁語(yǔ)的同學(xué)諒解 ;-)
從最高層的抽象看,這一切大概是這樣的:
# 獲取數(shù)據(jù)
real_data = pd.read('real_data.csv') # 形狀 (n樣本, n特征加標(biāo)簽)
unlabelled_data = pd.read('unlabelled_data.csv') # 形狀 (n樣本, n特征)
# 創(chuàng)建兩個(gè)對(duì)象
generator = GeneratorClass()
discriminator = DiscriminatorClass()
# 預(yù)訓(xùn)練生成器
generator.train(unlabelled_data)
# 獲取合成數(shù)據(jù)
synthetic_data = make_compete(generator, discriminator, real_data)
# 形狀 (任意數(shù)量, n特征)
好吧,細(xì)心的讀者可能會(huì)注意到我們沒有描述如何標(biāo)記生成樣本。理想情況下,我們想要生成標(biāo)注數(shù)據(jù)(例如,附帶價(jià)格的房屋,或者附帶物體描述的圖像)。感謝大量的訓(xùn)練實(shí)例,我們有辦法做到這點(diǎn)。如果你回頭看看之前的示意圖,你會(huì)看到其中提到了稱為“潛空間”的東西。潛空間是一種控制生成什么樣的圖像的方法。如果我們訓(xùn)練貓狗生成器,其中一個(gè)維度將控制圖像有多像貓/狗。它也允許我們獲取兩者之間的中間值,所以我們可以得到狗貓或者七分貓三分狗。換句話說(shuō),潛空間可以看成某種種子因素——為G提供一些初始輸入免得它總是生成一樣的東西,但是事實(shí)上這一種子因素具備一致的潛(“隱藏”)性質(zhì),特定的維度對(duì)應(yīng)某種意義的。
簡(jiǎn)單修改上面的偽代碼,以清楚地表明這一點(diǎn):
# 形狀 (任意數(shù)量, n特征)
synthetic_cats = make_compete(generator, discriminator,
real_data, input_noise=latent_feature_space.cat)
# 形狀 (任意數(shù)量, n特征)
synthetic_dogs = make_compete(generator, discriminator,
real_data, input_noise=latent_feature_space.dog)
最棒的地方在于,理論上,我們甚至不需要有為當(dāng)前任務(wù)標(biāo)注的數(shù)據(jù)就可以生成相應(yīng)樣本(不過(guò)有標(biāo)注數(shù)據(jù)會(huì)有很大幫助)。例如,我們可能有打上了好孩子和壞孩子的數(shù)據(jù),然后我們可以訓(xùn)練G生成貓或狗的新樣本(根據(jù)潛空間的一個(gè)參數(shù)決定是貓是狗),其中既有好孩子,也有壞孩子(基于潛空間的另一個(gè)參數(shù)決定)。比方說(shuō),我們可以基于圖像判斷狗的好壞(例如,如果我們看到狗破壞財(cái)物就標(biāo)記為壞孩子,否則就標(biāo)記為好孩子)。那么我們就可以在潛空間中發(fā)現(xiàn)對(duì)應(yīng)這些特征的參數(shù),然后通過(guò)插值生成貓狗或者狗貓。
再舉一個(gè)例子,我們可以下載大量未標(biāo)注的名人面部圖像,然后讓G生成面部,并通過(guò)操作潛空間得到明確的雄性樣本或雌性樣本,接著據(jù)此訓(xùn)練另一個(gè)識(shí)別雄性或雌性圖像的分類器(無(wú)需標(biāo)注過(guò)的數(shù)據(jù)!)這正是我曾經(jīng)做過(guò)的項(xiàng)目。你可能想要知道“我們?nèi)绾蔚玫讲煌瑢傩缘臐摽臻g表示?”很不幸,這個(gè)問題的答案超出了本文的范圍。
唷,時(shí)候不早了:我希望給出一些可以實(shí)際運(yùn)行的代碼,這樣讀者可以自行試驗(yàn)。不過(guò),我覺得這篇博客文章已經(jīng)夠長(zhǎng)了,所以,對(duì)實(shí)際代碼感興趣的讀者,請(qǐng)?jiān)L問我的另一篇博客文章:http://jakublangr.com/gans-code.html
想要加入對(duì)話?歡迎在jakublangr.com上評(píng)論,或者發(fā)推給我(langrjakub)。我正在撰寫一本關(guān)于對(duì)抗生成網(wǎng)絡(luò)的書,這里有一些樣章:www.manning.com/books/gans-in-action
-
圖像
+關(guān)注
關(guān)注
2文章
1083瀏覽量
40417 -
GaN
+關(guān)注
關(guān)注
19文章
1919瀏覽量
72986 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5492瀏覽量
120975
原文標(biāo)題:半監(jiān)督學(xué)習(xí)背景下的對(duì)抗生成網(wǎng)絡(luò)
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論