從自編碼器到生成對抗網(wǎng)絡(luò):一文縱覽無監(jiān)督學(xué)習(xí)研究現(xiàn)狀
無監(jiān)督學(xué)習(xí)是深度學(xué)習(xí)的圣杯。它的目的是希望能夠用極少量且不需要標(biāo)注的數(shù)據(jù)訓(xùn)練通用系統(tǒng)。本文將從無監(jiān)督學(xué)習(xí)的基本概念開始再進(jìn)一步簡述無監(jiān)督學(xué)習(xí)的各個基礎(chǔ)算法及其優(yōu)缺點。
如今深度學(xué)習(xí)模型都需要在大規(guī)模的監(jiān)督數(shù)據(jù)集上訓(xùn)練。這意味著對于每一個數(shù)據(jù),都會有一個與之對應(yīng)的標(biāo)簽。在很流行的 ImageNet 數(shù)據(jù)集中,其共有一百萬張帶人工標(biāo)注的圖片,即 1000 類中的每一類都有 1000 張。創(chuàng)建這么一個數(shù)據(jù)集是需要一番功夫的,可能需要很多人花數(shù)月的功夫完成。假定現(xiàn)在要創(chuàng)建一個有一百萬類的數(shù)據(jù)集,那么就必須給總共 1 億幀視頻數(shù)據(jù)集中的每一幀做標(biāo)注,這基本是無法實現(xiàn)的。
現(xiàn)在,回想一下在你很小的時候,自己是如何得到教導(dǎo)的。沒錯,我們的確受到了一些監(jiān)督,但是當(dāng)你的父母告訴你這是一只「貓」之后,他們不會在日后的生活中每一次觀察到貓時都告訴你這是「貓」!而如今的監(jiān)督式學(xué)習(xí)是這樣的:我一次又一次地告訴你「貓」是什么樣的,也許會重復(fù)一百萬次。然后你的深度學(xué)習(xí)模型就領(lǐng)會了關(guān)于貓的知識。
理想情況下,我們希望有一個更像我們的大腦一樣去運(yùn)行得模型。它僅僅需要很少的一些標(biāo)簽就能夠理解現(xiàn)實世界中的很多類事物。在現(xiàn)實世界中,我指的類是物體類別、動作類別、環(huán)境類別、物體的部分的類別,諸如此類還有很多很多。
正如你會在這篇評論中看到的一樣,最成功的模型就是那些能夠預(yù)測視頻中即將出現(xiàn)的畫面的模型。很多這類技術(shù)面臨并正嘗試解決的一個問題,即為了達(dá)到良好的全局表現(xiàn),訓(xùn)練要在視頻上進(jìn)行,而不是靜態(tài)的圖片上。這是將學(xué)習(xí)到的表征應(yīng)用在實際任務(wù)中的唯一途徑。
一、基本概念
無監(jiān)督學(xué)習(xí)研究的主要目標(biāo)就是要預(yù)訓(xùn)練出能夠用于其他任務(wù)的模型(即鑒別器或者編碼器)。編碼器的特點應(yīng)該盡可能的通用,以便可以用在分類任務(wù)中(如在 ImageNet 上進(jìn)行訓(xùn)練),并且提供盡可能像監(jiān)督模型一樣好的結(jié)果。
最新的監(jiān)督模型總是表現(xiàn)得比無監(jiān)督預(yù)訓(xùn)練模型更好。那是因為,監(jiān)督會允許模型能夠更好的編碼數(shù)據(jù)集上的特征。但是當(dāng)模型應(yīng)用在其他的數(shù)據(jù)集上時,監(jiān)督會衰減。在這方面,無監(jiān)督訓(xùn)練有希望提供更加通用的特性來執(zhí)行任何任務(wù)。
如果以實際生活中的應(yīng)用為目標(biāo),例如無人駕駛、動作識別、目標(biāo)檢測和實時提取中的識別,那么算法需要在視頻上訓(xùn)練。
二、自編碼器
UC Davis 的 Bruno Olshausen 和康奈爾大學(xué)的 David Field 于 1996 年的發(fā)表的論文《Sparse Coding with an Overcomplete Basis Set: A Strategy by V1?》(論文鏈接:http://redwood.psych.cornell.edu/papers/olshausen_field_1997.pdf) 表明,編碼理論可以被用在視覺皮層的接收域中。他們證明了我們大腦中的基本視覺旋渦 (V1) 使用稀疏性原理來創(chuàng)建一個能夠被用于重建輸入圖像的基本功能的最小集合。
下面的鏈接是 2014 年倫敦微軟 Bing 團(tuán)隊的 Piotr Mirowski 關(guān)于自動編碼器的一個很好的綜述。
鏈接:https://piotrmirowski.files.wordpress.com/2014/03/piotrmirowski_2014_reviewautoencoders.pdf
Yann LeCun 的團(tuán)隊也從事這個領(lǐng)域的研究。在鏈接網(wǎng)頁中的 demo 中,你可以看到像 V1 一樣的濾波器是如何學(xué)習(xí)的。(鏈接:http://www.cs.nyu.edu/~yann/research/deep/)
通過重復(fù)貪婪逐層訓(xùn)練的過程,堆棧式自編碼器(Stacked-auto encoder)也被使用了。
自動編碼器方法也被稱為直接映射方法。
自動編碼器/稀疏編碼/堆疊式自動編碼的優(yōu)點和缺點
優(yōu)點:
- 簡單的技術(shù):重建輸入
- 多層可堆疊
- 直觀和基于神經(jīng)科學(xué)的研究
缺點
- 每一層都被貪婪地(greedily)訓(xùn)練
- 沒有全局優(yōu)化
- 比不上監(jiān)督學(xué)習(xí)地性能
- 多層失效
- 對通用目標(biāo)地表征而言,重建輸入可能不是理想的指標(biāo)
三、聚類學(xué)習(xí)
它是用 k-means 聚類在多層中學(xué)習(xí)濾波器的一種技術(shù)。
我們組把這項技術(shù)命名為:聚類學(xué)習(xí)(見論文:Clustering Learning for Robotic Vision)、聚類連接 (見論文:An Analysis of the Connections Between Layers of Deep Neural Networks),以及卷積聚類 (見論文:Convolutional Clustering for Unsupervised Learning)。就在最近,這項技術(shù)在流行地?zé)o監(jiān)督學(xué)習(xí)數(shù)據(jù)集 STL-10 上實現(xiàn)了非常好的結(jié)果。
我們在這個領(lǐng)域的研究和 Adam Coates 與 Andrew Ng 在基于 k-means 學(xué)習(xí)特征表示 ( Learning Feature Representations with K-means ) 中發(fā)表的研究成果是獨立的。
眾所周知,由于在求解配分函數(shù)時的數(shù)值問題,受限波爾茲曼機(jī)(RBM),深波爾茲曼機(jī)(DBM),深度信念網(wǎng)絡(luò)(DBN/參見 Geoffrey E. Hinton 等人的研究:A fast learning algorithm for deep belief net)等模型已經(jīng)很難去訓(xùn)練了。因此,它們沒有廣泛應(yīng)用于解決問題中。
聚類學(xué)習(xí)的優(yōu)缺點:
優(yōu)點:
- 簡單的技術(shù):得到相似群集的輸出
- 多層可堆疊
- 直觀和基于神經(jīng)科學(xué)的研究
缺點:
- 每一層都被貪婪地訓(xùn)練
- 沒有全局優(yōu)化
- 在某些情況下可以和監(jiān)督學(xué)習(xí)的性能媲美
- 多層遞增式失效==性能回報遞減
四、生成對抗網(wǎng)絡(luò)模型
生成對抗網(wǎng)絡(luò)嘗試通過鑒別器和生成器的對抗而得來一個優(yōu)良的生成模型,該網(wǎng)絡(luò)希望能夠生成足以騙過鑒別器的逼真圖像。生成模型這一領(lǐng)域近年來十分優(yōu)秀的生成對抗網(wǎng)絡(luò)正是由 Ian Goodfellow 和 Yoshua Bengio 等人在論文《Generative Adversarial Nets》中提出。這里還有 OpenAI 的研究員 Ian 在 2016 年底做的關(guān)于生成對抗網(wǎng)絡(luò) (GANS) 的總結(jié),視頻鏈接:
https://channel9.msdn.com/Events/Neural-Information-Processing-Systems-Conference/Neural-Information-Processing-Systems-Conference-NIPS-2016/Generative-Adversarial-Networks。
由 Alec Radford、 Luke Metz 以及 Soumith Chintala 等人實例化的一個被稱作 DCGAN 的生成對抗模型取得了非常好的結(jié)果。他們的研究發(fā)表在論文:
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks。
Vincent Dumoulin 和 Ishmael Belghazi 等人對這個模型做了一個比較好的解釋(鏈接:https://ishmaelbelghazi.github.io/ALI/)。
DCGAN 鑒別器被設(shè)計來判斷一副輸入圖片是真實的(來源于某個數(shù)據(jù)集的真實圖片)或虛假的(來源于某個生成器)。生成器將隨機(jī)地噪聲向量(例如 1024 個數(shù)值)作為輸入,并生成一副圖片。
在 DCGAN 中,生成器網(wǎng)絡(luò)如下:
盡管這個鑒別器是一個標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)。具體的細(xì)節(jié)可以參考下文提及的代碼。
關(guān)鍵是要并行地去訓(xùn)練這兩個網(wǎng)絡(luò),同時不要完全過擬合,因此才會復(fù)制數(shù)據(jù)集。學(xué)習(xí)到的特征需要泛化在未知的樣本上,所以學(xué)習(xí)數(shù)據(jù)集將不會有用。
在 Torch7 上訓(xùn)練 DCGAN 的代碼(https://github.com/soumith/dcgan.torch)也被提供了。這需要大量的實驗,相關(guān)內(nèi)容 Yann LeCun 在 Facebook 中也分享過:
https://www.facebook.com/yann.lecun/posts/10153269667222143
當(dāng)生成器和鑒別器都被訓(xùn)練之后,你可以同時使用兩者。主要的目標(biāo)就是訓(xùn)練出一個能夠被用于其他任務(wù)的鑒別器網(wǎng)絡(luò),例如在其他數(shù)據(jù)集上可以分類。生成器可以用來從隨機(jī)向量中生成圖片。這些圖片有著非常有趣的屬性。首先,它們從輸入空間中提供了平滑的變換。如下所示的例子展示了在 9 個隨機(jī)輸入向量中移動而生成的圖片:
輸入向量空間也提供了數(shù)學(xué)屬性,證明學(xué)習(xí)到的特征是按照相似性來組織的,如下圖所示:
生成器學(xué)習(xí)到的平滑空間啟示鑒別器也要有類似的屬性,這使得鑒別器在編碼圖像時成了一個很棒的通用特征提取器。這有助于解決 CNN 在訓(xùn)練不連續(xù)圖像的時候由于對抗噪聲而造成的失敗(詳見 Christian Szegedy 等人的文章《Intriguing properties of neural networks》,https://arxiv.org/abs/1312.6199)。
GAN 最新的進(jìn)展,在僅有 1000 個標(biāo)簽樣本的 CIFAR-10 數(shù)據(jù)集上實現(xiàn)了 21% 的錯誤率,參見 OpenAI 的 Tim Salimans 等人的論文《Improved Techniques for Training GANs》,論文鏈接:https://arxiv.org/pdf/1606.03498v1.pdf。
最近關(guān)于 infoGAN 的論文《InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets》(鏈接:https://arxiv.org/abs/1606.03657)中,能夠產(chǎn)生特征非常清晰的圖像,并且這些圖像具有更加有趣的意義。然而,他們并沒有公布學(xué)習(xí)到的特征在某項任務(wù)或某個數(shù)據(jù)集中的性能對比。
在如下所示的博客和網(wǎng)站中也有關(guān)于生成對抗模型的總結(jié),參見 OpenAI 的技術(shù)博客 https://blog.openai.com/generative-models/ 和網(wǎng)頁
https://code.facebook.com/posts/1587249151575490/a-path-to-unsupervised-learning-through-adversarial-networks/。
另一個非常有趣的例子如下,在例子中,作者用生成對抗訓(xùn)練去學(xué)習(xí)從文本描述中生成圖像。參見論文《Generative Adversarial Text to Image Synthesis》,鏈接:
https://arxiv.org/abs/1605.05396。
我最欣賞這項工作的地方在于它所使用的網(wǎng)絡(luò)用文本描述作為生成器的輸入,而不是隨機(jī)向量,這樣就可以精確地控制生成器的輸出。網(wǎng)絡(luò)模型結(jié)構(gòu)如下圖所示:
生成對抗模型的缺點和優(yōu)點
優(yōu)點:
- 對整個網(wǎng)絡(luò)的全局訓(xùn)練
- 易于編程和實現(xiàn)
缺點:
- 難以訓(xùn)練和轉(zhuǎn)換問題
- 在某些情況下可以比得上監(jiān)督學(xué)習(xí)的性能
- 需要提升可用性(這是所有無監(jiān)督學(xué)習(xí)算法面臨的問題)
五、可以從數(shù)據(jù)中學(xué)習(xí)的模型
通過設(shè)計不需要標(biāo)簽的無監(jiān)督學(xué)習(xí)任務(wù)和旨在解決這些任務(wù)的學(xué)習(xí)算法,這些模型直接從無標(biāo)簽的數(shù)據(jù)中學(xué)習(xí)。
在視覺表征中通過解決拼圖問題來進(jìn)行無監(jiān)督學(xué)習(xí)確實是一個聰明的技巧。作者將圖像分割成了拼圖,并且訓(xùn)練深度網(wǎng)絡(luò)來解決拼圖問題。最終得到的網(wǎng)絡(luò)的表現(xiàn)足以比肩最好的預(yù)訓(xùn)練網(wǎng)絡(luò)。詳見論文《Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles》,鏈接:https://arxiv.org/abs/1603.09246
在視覺表征中通過圖像補(bǔ)丁和布局來進(jìn)行無監(jiān)督學(xué)習(xí)也是一個聰明的技巧。他們讓同一幅圖像上的兩個補(bǔ)丁緊密分布。這些補(bǔ)丁在統(tǒng)計上來講是同一個物體。第三個補(bǔ)丁選擇隨機(jī)的圖像,并且布局在隨機(jī)的位置,從統(tǒng)計上來講與前兩個補(bǔ)丁并不是同一類物體。然后訓(xùn)練一個深度網(wǎng)絡(luò)來區(qū)分兩個屬于同一類的補(bǔ)丁和另一個不同類別的補(bǔ)丁。最終得到的網(wǎng)絡(luò)具有和最高性能精調(diào)網(wǎng)絡(luò)之一相同的性能。詳情參見論文《Learning visual groups from co-occurrences in space and time》,鏈接:https://arxiv.org/abs/1511.06811。
從立體圖像重建中進(jìn)行的無監(jiān)督學(xué)習(xí)模型采用立體圖像作為輸入,例如圖像一幀的左半部分,然后重建出圖像的右半部分。雖然這項工作并不針對無監(jiān)督學(xué)習(xí),但是它可以用作無監(jiān)督學(xué)習(xí)。這種方法也可以用來從靜態(tài)圖片生成 3D 電影。參見論文《Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks》,鏈接:
https://arxiv.org/abs/1604.03650,github 上的 Python 源碼:https://github.com/piiswrong/deep3d。
利用替代類別的無監(jiān)督學(xué)習(xí)視覺表征使用圖像不行來創(chuàng)建非常大的替代類。這些圖像補(bǔ)丁然后被增強(qiáng),然后被用來訓(xùn)練基于增強(qiáng)替代類的監(jiān)督網(wǎng)絡(luò)。這在無監(jiān)督特征學(xué)習(xí)中給出了最好的結(jié)果。詳情參見論文《Discriminative Unsupervised Feature Learning with Exemplar Convolutional Neural Networks》,鏈接:https://arxiv.org/abs/1406.6909。
使用視頻的無監(jiān)督學(xué)習(xí)視覺表征采用了基于 LSTM 的編碼器-解碼器對。編碼 LSTM 運(yùn)行在視頻幀的序列上以生成一個內(nèi)部表征。隨后這些表征通過另一個 LSTM 被解碼以生成一個目標(biāo)序列。為了使這個變成無監(jiān)督的,一種方法是預(yù)測與輸入相同的序列。另一種方式是預(yù)測未來的幀。詳情參見論文《Unsupervised Learning of Visual Representations using Videos》,鏈接:https://arxiv.org/abs/1505.00687。
另一篇使用視頻的文章出自 MIT 的 Vondrick 和 Torralba 等人(http://arxiv.org/abs/1504.08023),有著非常惹人注目的結(jié)果。這項工作背后的思想是從視頻輸入中預(yù)測未來幀的表示。這是一種優(yōu)雅的方法。使用的模型如下:
這項技術(shù)的一個問題就是:一個訓(xùn)練在靜態(tài)圖像幀上的神經(jīng)網(wǎng)絡(luò)被用來解釋視頻輸入。這種網(wǎng)絡(luò)不會學(xué)習(xí)到視頻的時間動態(tài)變化以及在空間運(yùn)動的物體的平滑變換。所以我們認(rèn)為這個網(wǎng)絡(luò)并不適合用來預(yù)測未來視頻中的畫面。
為了克服這個問題,我們團(tuán)隊創(chuàng)建了一個大型的視頻數(shù)據(jù)集eVDS(https://engineering.purdue.edu/elab/eVDS/),可用來直接從視頻數(shù)據(jù)上訓(xùn)練新的(遞歸和反饋)網(wǎng)絡(luò)模型。
六、PredNet
PredNet 是被設(shè)計來預(yù)測視頻中未來幀的網(wǎng)絡(luò)。在這個博客中可以看到一些例子,博客鏈接:https://coxlab.github.io/prednet/。
PredNet 是一個非常聰明的神經(jīng)網(wǎng)絡(luò)型,在我們看來,它將在將來的神經(jīng)網(wǎng)絡(luò)中起著重要的作用。PredNet 學(xué)習(xí)到了超越監(jiān)督式 CNN 中的單幀圖片的神經(jīng)表征。
PredNet 結(jié)合了生物啟發(fā)的雙向 [人腦模型](詳見論文《Unsupervised Pixel-prediction》,https://papers.nips.cc/paper/1083-unsupervised-pixel-prediction.pdf)。它使用了 [預(yù)測編碼和神經(jīng)模型中的反饋連接](詳見論文《Neural Encoding and Decoding with Deep Learning for Dynamic Natural Vision》,http://arxiv.org/abs/1608.03425)。下面是 PredNet 模型以及一個具有兩個堆疊層的例子:
PredNet 結(jié)合了生物啟發(fā)的雙向人腦模型
這個模型有以下這幾個優(yōu)點:
- 可使用無標(biāo)簽的數(shù)據(jù)來訓(xùn)練
- 在每一層嵌入了損失函數(shù)來計算誤差
- 具有執(zhí)行在線學(xué)習(xí)的能力,通過監(jiān)控錯誤信號,當(dāng)模型不能預(yù)測輸出的時候,它會知道需要學(xué)習(xí)誤差信號
PredNet 存在的一個問題是,對第一層的一些簡單的基于運(yùn)動的濾波器而言,預(yù)測未來輸入的幀是相對容易的。在我們所做的 PredNet 的實驗中,PredNet 在重建輸入幀的時候?qū)W會了在重建輸入幀時達(dá)到很好的效果,但是更高層不會學(xué)到較好的表征。事實上,在實驗中更高層連簡單的分類任務(wù)都解決不了。
事實上,預(yù)測未來的幀是不必要的。我們愿意做的就是去預(yù)測下一幀的表征,就像 Carl Vondrick 做的一樣。詳見論文《Anticipating Visual Representations from Unlabeled Video》,鏈接:https://arxiv.org/abs/1504.08023。
七、通過觀察物體的運(yùn)動來學(xué)習(xí)特征
最近的這篇論文通過觀察視頻中物體的運(yùn)動來訓(xùn)練無監(jiān)督模型(《Learning Features by Watching Objects Move》,https://people.eecs.berkeley.edu/~pathak/unsupervised_video/)。運(yùn)動以光流的形式被提取出來,并被用作運(yùn)動物體的分割模板。盡管光流信號并沒有提供任何一個接近良好的分割模板,但是在大規(guī)模數(shù)據(jù)集上的平均效果使得最終的網(wǎng)絡(luò)會表現(xiàn)良好。例子如下所示:
這項工作是非常激動人心的,因為它遵循關(guān)于人類視覺皮層如何學(xué)習(xí)分割運(yùn)動物體的神經(jīng)學(xué)理論。參見論文《Development of human visual function》,鏈接:
http://www.sciencedirect.com/science/article/pii/S004269891100068X。
未來
未來需要你們來創(chuàng)造。
無監(jiān)督訓(xùn)練仍然還是一個有待發(fā)展的主題,你可以通過以下方式做出較大的貢獻(xiàn):
- 創(chuàng)建一個新的無監(jiān)督任務(wù)去訓(xùn)練網(wǎng)絡(luò),例如:解決拼圖問題、對比圖像補(bǔ)丁、生成圖像等......
- 想出能夠創(chuàng)造很棒的無監(jiān)督功能的任務(wù),例如:像我們?nèi)祟愐曈X系統(tǒng)的工作方式一樣,理解立體圖像和視頻中什么是物體、什么是背景。
本文作者為專注機(jī)器人與視覺研究的 e-Lab 的研究者 Eugenio Culurciello。
原文:https://medium.com/intuitionmachine/navigating-the-unsupervised-learning-landscape-951bd5842df9
【本文是51CTO專欄機(jī)構(gòu)機(jī)器之心的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】