從某種程度上來(lái)說(shuō),沒(méi)有人真正理解機(jī)器學(xué)習(xí)。
這不是一個(gè)復(fù)雜的問(wèn)題,我們所做的一切也都非常簡(jiǎn)單,但由于一些天生的“障礙”,我們?nèi)祟惔_實(shí)難以理解發(fā)生在計(jì)算機(jī)“大腦”中的那些簡(jiǎn)單事物。
人類長(zhǎng)久以來(lái)的生理進(jìn)化決定了我們能推理二維、三維的空間,在這基礎(chǔ)上,我們也能靠想象思考四維空間里發(fā)生的變化。但這對(duì)于機(jī)器學(xué)習(xí)來(lái)說(shuō)卻是小巫見(jiàn)大巫,它通常需要處理數(shù)千、數(shù)萬(wàn),甚至數(shù)百萬(wàn)個(gè)維度!即便是很簡(jiǎn)單的問(wèn)題,如果我們把它放進(jìn)維度非常高的空間內(nèi)來(lái)解決,以人類的目前的大腦,不理解也不足為奇。
因此,直觀地感受高維空間是沒(méi)有希望的。
為了在高維空間中做一些事情,我們建立了許多工具,其中一個(gè)龐大的、發(fā)達(dá)的分支是降維,它探索的是把高維數(shù)據(jù)轉(zhuǎn)換為低維數(shù)據(jù)的技術(shù),也為此做了大量可視化方面的工作。
所以如果我們希望可視化機(jī)器學(xué)習(xí)、深度學(xué)習(xí),這些技術(shù)會(huì)是我們必備的基礎(chǔ)知識(shí)。可視化意味著我們能更直觀地感受實(shí)際正在發(fā)生的事情,我們也可以借此更深入地了解神經(jīng)網(wǎng)絡(luò)。為了這一目的,我們要做的第一件事是理解降維,我們選擇的數(shù)據(jù)集是MNIST。
MNIST
MNIST是一個(gè)簡(jiǎn)單的計(jì)算機(jī)視覺(jué)數(shù)據(jù)集,它由28×28像素的手寫數(shù)字圖像組成,例如:
每個(gè)MNIST數(shù)據(jù)點(diǎn),每個(gè)圖像,都可以被看作是描述每個(gè)像素有多暗的數(shù)字?jǐn)?shù)組。例如我們可以這么看待這個(gè)手寫數(shù)字“1”:
因?yàn)槊總€(gè)圖像的像素都是28×28,所以我們得到的其實(shí)是一個(gè)28×28的矩陣。考慮到矢量的每個(gè)分量都是介于0和1之間的一個(gè)描述明暗程度的值,如果我們把每一個(gè)值都看做是維向量,那這就是一個(gè)28×28=784的高維空間。
所以空間內(nèi)的矢量其實(shí)并不都是MNIST數(shù)字,不同像素點(diǎn)之間的區(qū)別稱得上是天差地別。為了論證這一點(diǎn),我們從圖像中隨機(jī)選取了幾個(gè)點(diǎn)并把它們放大——這是個(gè)像素為28×28的圖像——每個(gè)像素的顏色可能是黑色的、白色的或帶陰影灰色的。如下圖所示,選取的隨機(jī)點(diǎn)看起來(lái)更像是噪聲。
像MNIST數(shù)字這樣的圖像是非常罕見(jiàn)的,雖然數(shù)據(jù)點(diǎn)被嵌入在784維空間中,但它們又被包含在一個(gè)非常小的子空間內(nèi)。用更復(fù)雜的話說(shuō),就是它們占據(jù)較低維的子空間。
人們對(duì)MNIST數(shù)字占據(jù)的子空間維數(shù)具體是多少有很多討論,其中流行在機(jī)器學(xué)習(xí)研究人員中的一個(gè)假設(shè)是流形理論:MNIST是一個(gè)低維流形結(jié)構(gòu),高維數(shù)據(jù)通過(guò)它嵌入高維空間中,形成掃掠和彎曲。而與拓?fù)鋽?shù)據(jù)分析更相關(guān)的另一個(gè)假設(shè)是,像MNIST數(shù)字這樣的數(shù)據(jù)具有一些觸手狀的突起,這些突起會(huì)嵌入周圍空間中。
但是事實(shí)究竟是什么,沒(méi)有人真正知道!
MNIST立方體
為了探索這一點(diǎn),我們可以把MNIST數(shù)據(jù)點(diǎn)看作是在一個(gè)784維立方體中固定的一點(diǎn)。立方體的每個(gè)維度都對(duì)應(yīng)一個(gè)特定的像素,根據(jù)像素強(qiáng)度,數(shù)據(jù)點(diǎn)的范圍在0到1之間。在維度的一邊,是像素為白色的圖像,在另一邊,是像素為黑色的圖像。在它們之間的是灰色圖像。
如果這樣想,一個(gè)自然而然的問(wèn)題是如果我們只看到一個(gè)特定的二維面,那這個(gè)立方體看起來(lái)會(huì)是什么樣的?就像盯著一個(gè)雪球,我們只能看到投影在二維平面上的數(shù)據(jù)點(diǎn),一個(gè)維度對(duì)應(yīng)像素強(qiáng)度,另一個(gè)維度對(duì)應(yīng)另一個(gè)像素。這樣做能幫助我們用原始的方式探索MNIST。
在下圖中,每個(gè)點(diǎn)都表示一個(gè)MNIST數(shù)據(jù)點(diǎn),顏色表示所屬類別(哪個(gè)數(shù)字)。當(dāng)我們把鼠標(biāo)放在上面后,它的圖像會(huì)出現(xiàn)在各個(gè)軸上。每個(gè)軸對(duì)應(yīng)特定的像素明暗強(qiáng)度。
探索這個(gè)可視化有助于我們挖掘MNIST結(jié)構(gòu)的一些信息。如下圖所示,如果選取坐標(biāo)為p18,16和p7,12的像素,數(shù)字0會(huì)聚集在右下角,數(shù)字9則會(huì)集中在左上角。
紅色點(diǎn)為0,粉色點(diǎn)為9
如果選取坐標(biāo)為p5,6和p7,9處的像素,那數(shù)字2會(huì)大量出現(xiàn)在右上角,數(shù)字3則集中在右下角。
黃綠色點(diǎn)為2,綠色點(diǎn)為3
這看似是個(gè)小小的進(jìn)步,但我們其實(shí)不可能完全以這種方式理解MNIST。這些小發(fā)現(xiàn)有時(shí)并沒(méi)什么說(shuō)服力,它們更像是運(yùn)氣的產(chǎn)物,雖然我們從中窺見(jiàn)的關(guān)于結(jié)構(gòu)的信息量很少,但這種思維方式是正確的。如果我們從平面看不到理想的數(shù)據(jù)結(jié)構(gòu),那我們也許能從某個(gè)角度來(lái)觀察這些數(shù)據(jù)。
這就牽出了第二個(gè)問(wèn)題,我們?cè)撛趺催x擇合適的角度。平行看數(shù)據(jù)時(shí),我們?cè)撧D(zhuǎn)動(dòng)幾度;垂直看數(shù)據(jù)時(shí),我們又該怎么扭?好在這個(gè)難題已經(jīng)有人幫我們解決了——主成分分析(PCA)。比起手動(dòng)計(jì)算,PCA將會(huì)找到最多的角度(捕捉盡可能多的變化)。
從一個(gè)角度看784維的立方體意味著我們要確定立方體每個(gè)軸的傾斜方向:是向這邊、向那邊。還是兩頭向中間。具體來(lái)說(shuō),以下是PCA選出的兩個(gè)角度的圖片,紅色表示像素的尺寸向一側(cè)傾斜,藍(lán)色則表示向另一側(cè)傾斜。
如果MNIST數(shù)字基本呈現(xiàn)紅色,它就在對(duì)應(yīng)的一側(cè)結(jié)束,反之亦然。我們選擇PCA選擇的第一個(gè)“主要成分”作為水平角度,然后再把“大部分紅色小部分藍(lán)色”的點(diǎn)推向左側(cè),把“大部分藍(lán)色小部分紅色”的點(diǎn)推向右側(cè)。
現(xiàn)在我們知道最佳的水平和垂直角度,我們可以嘗試從這個(gè)角度來(lái)觀察立方體。
下圖和之前的可視化動(dòng)圖基本類似,不同的是它把兩個(gè)軸固定為第一個(gè)“主成分”和第二個(gè)“主成分”,也就是我們觀察數(shù)據(jù)的角度。在每個(gè)軸上的圖像中,藍(lán)色和紅色表示的是該像素的不同“傾向”。
用PCA可視化MNIST
雖然效果更好了,但它還稱不上是完美的,因?yàn)榧幢銖淖詈玫慕嵌扔^察,MNIST的數(shù)據(jù)也不能很好地排列。這是個(gè)很特別的高維解構(gòu),簡(jiǎn)單的線性變換還不能分解其中的復(fù)雜性。
值得慶幸的是,我們有一些強(qiáng)大的工具來(lái)處理這類“不友好”的數(shù)據(jù)集。
基于優(yōu)化的降維
這里我們?cè)倜鞔_一下可視化的目的——我們?yōu)槭裁匆非蟆巴昝馈钡目梢暬靠梢暬哪繕?biāo)又該是什么?
如果在可視化圖像中,數(shù)據(jù)點(diǎn)之間的距離和它們?cè)谠呔S空間中的距離相同,那這就是個(gè)理想的結(jié)果。因?yàn)樽龅搅诉@點(diǎn),就意味著我們已經(jīng)捕捉到了數(shù)據(jù)的全局分布。
更準(zhǔn)確地說(shuō),對(duì)于MNIST圖像中的任意兩個(gè)數(shù)據(jù)點(diǎn)xi和xj,它們之間有兩種距離,一種是在原空間中的距離d?i,j,另一種則是在可視化圖像中的歐式距離di,j。它們之間的cost是:
這個(gè)值是衡量可視化是好是壞的標(biāo)準(zhǔn):只要距離不相同,那這就是個(gè)不好的可視化。如果C值過(guò)大,這意味著可視化圖像中的距離和原距離很不一樣;如果C值很小,這說(shuō)明兩者十分相近;如果C值為0,我們就得到了一個(gè)“完美”的嵌入。
這聽(tīng)起來(lái)就像一個(gè)優(yōu)化問(wèn)題了!相信任何一個(gè)深度學(xué)習(xí)研究人員都知道該怎么做——選取一個(gè)隨機(jī)點(diǎn)并使用梯度下降。
用MDS可視化MNIST
這種方法被稱為多維縮放(MDS)。首先,我們把每個(gè)點(diǎn)隨機(jī)放在一個(gè)平面上,用一個(gè)長(zhǎng)度等于原始距離d?i,j的“彈簧”把點(diǎn)與點(diǎn)連接起來(lái),隨著點(diǎn)在空間中自由移動(dòng),這個(gè)“彈簧”能依靠物理把新距離控制在可控范圍內(nèi)。
當(dāng)然,事實(shí)上這個(gè)cost是不會(huì)等于0的,因?yàn)樵诳刂凭嚯x不變的情況下把高維空間嵌入二位空間是不可能的,我們也需要這種不可能。雖然還有些缺陷,但從上圖中我們可以看到,這些數(shù)據(jù)點(diǎn)已經(jīng)顯示出了聚類趨勢(shì),這是個(gè)進(jìn)步不小的可視化。
Sammon映射
為了更盡善盡美,這里我們?cè)僖隡DS的一個(gè)變體——Sammon映射。首先要聲明一點(diǎn),就是MDS有很多變體,而且它們的共同特征是認(rèn)為cost函數(shù)強(qiáng)調(diào)數(shù)據(jù)的局部結(jié)構(gòu)比整體結(jié)構(gòu)更重要。當(dāng)采用中心化的內(nèi)積計(jì)算鄰近矩陣時(shí),我們希望原始距離和主成分是相等的,為了捕捉更多可能性,Sammon映射的做法是保護(hù)較小的距離。
如下圖所示,比起關(guān)注距離較遠(yuǎn)兩點(diǎn)的位置,Sammon映射更關(guān)注附近點(diǎn)的距離控制,如果說(shuō)某兩個(gè)點(diǎn)原距離是其他兩點(diǎn)的二分之一,那它們被“重視”的程度會(huì)是后者的兩倍。
用Sammon映射可視化MNIST
對(duì)于MNIST,這種方法并沒(méi)有顯示出太大的不同,這是因?yàn)楦呔S空間中數(shù)據(jù)點(diǎn)的距離不夠直觀,例如MNIST中的相同數(shù)字“1”之間的距離:
或者不同的數(shù)字“9”和“3”之間的距離(比前者的3倍要少一些):
對(duì)于相同的數(shù)字,它們身上的不同細(xì)節(jié)變化數(shù)不勝數(shù),因此它們的實(shí)際平均距離會(huì)比我們想象中的高不少。相反地,對(duì)于本身距離很遠(yuǎn)的數(shù)字,它們的差異隨距離增加,因此遇到兩個(gè)完全不同的數(shù)字也在情理之中。簡(jiǎn)而言之,在高維空間中,相同數(shù)字之間的距離和不同數(shù)字之間距離的差距并沒(méi)有我們想象中的那么大。
基于圖像的可視化
因此,如果我們最終希望得到的是低維空間嵌入結(jié)果,那優(yōu)化的目標(biāo)應(yīng)該更明確。
我們可以假設(shè)存在一個(gè)和MNIST距離最接近的圖(V,E),它之中的節(jié)點(diǎn)就是MNIST里的數(shù)據(jù)點(diǎn),并且這些點(diǎn)都連接到原始空間中最接近它的三個(gè)點(diǎn)。有了它,我們就能丟掉高維信息,只需思考它嵌入地位空間的方式。
給定這樣的圖,我們可以使用標(biāo)準(zhǔn)圖形布局算法來(lái)可視化MNIST。 force-directed graph drawing是一種繪圖方法,它的做法是將圖的節(jié)點(diǎn)定位在二維或三維空間中,使得所有的邊或多或少具有相等的長(zhǎng)度。在這里,我們可以假設(shè)所有數(shù)據(jù)點(diǎn)都是互相排斥的帶電粒子,距離是“彈簧”,這樣做之后得到的cost函數(shù)就是:
用圖像可視化MNIST
上圖發(fā)現(xiàn)了MNIST中的很多結(jié)構(gòu),尤其是它似乎找到了不同的MNIST類。雖然它們重疊,但在圖像布局優(yōu)化期間,我們可以發(fā)現(xiàn)聚類之間的相互滑動(dòng)。由于這些連接,最終嵌入低維平面時(shí)它們還是保持重疊狀態(tài),但我們起碼看到了cost函數(shù)試圖分離它們的嘗試。
這也是基于圖像的可視化的一個(gè)優(yōu)點(diǎn)。在之前的可視化嘗試中,即便我們?cè)谀硞€(gè)聚類里看到了某個(gè)點(diǎn),我們也無(wú)法確定它是否真的在那兒。但圖像可以完全規(guī)避這一點(diǎn),例如如果我們檢查著色為紅色的數(shù)字“0”數(shù)據(jù)點(diǎn)聚類,我們可以在里面發(fā)現(xiàn)一個(gè)藍(lán)色點(diǎn)“6”,查看它周圍的數(shù)據(jù)點(diǎn)我們就能知道,這個(gè)“6”之所以被歸類在這里是因?yàn)樗鼘懙奶盍?,長(zhǎng)得更像個(gè)“0”。
t-SNE
t-SNE是本文介紹的最后一種降維方法,它在深度學(xué)習(xí)中非常受歡迎,但考慮到其中涉及不少數(shù)學(xué)知識(shí),所以我們得先理一理。
粗略地說(shuō),t-SNE試圖優(yōu)化的東西是保存數(shù)據(jù)的拓?fù)浣Y(jié)構(gòu)。對(duì)于每一點(diǎn),它構(gòu)造了一個(gè)概念,即周圍的其他點(diǎn)都是它的“鄰居”,我們要試圖使所有點(diǎn)具有相同數(shù)量的“鄰居”。因此它的目標(biāo)就是嵌入并使各個(gè)點(diǎn)擁有的“鄰居”數(shù)相同。
在某些方面,t-SNE很像基于圖像的可視化,但它的特色在于將數(shù)據(jù)點(diǎn)之間的關(guān)聯(lián)性轉(zhuǎn)換為概率,這個(gè)點(diǎn)可能是“鄰居”,也可能不是“鄰居”,每個(gè)點(diǎn)成為“鄰居”的程度不同。
用t-SNE可視化MNIST
t-SNE通常在揭示數(shù)據(jù)集聚類和子聚類中有優(yōu)秀表現(xiàn),但它容易陷入局部最小值。如下圖所示,兩側(cè)的紅點(diǎn)“0”因?yàn)橹虚g的藍(lán)點(diǎn)“6”無(wú)法聚集在一起。
一些技巧可以幫助我們避免這些糟糕的局部極小值。其中首選的方法是增大數(shù)據(jù)量,考慮到這是一篇演示文章,我們?cè)谶@里只用了1000個(gè)樣本,如果用上MNIST全部50000多個(gè)數(shù)據(jù)點(diǎn),效果會(huì)更好。另外就是用模擬退火、調(diào)超參等。下圖是一個(gè)比較好的可視化:
用t-SNE可視化MNIST
在Maaten & Hinton(2008)最初那篇介紹t-SNE的論文里,他們給出了一些更完美的可視化結(jié)果,感興趣的讀者可以前往一讀。
在我們上面的例子中,t-SNE不僅給出了最好的聚類,我們也可以通過(guò)圖像從中推測(cè)一些東西。
用t-SNE可視化MNIST
圖中數(shù)字“1”這個(gè)聚類被橫向水平拉伸,從左向右查看數(shù)據(jù)點(diǎn),我們觀察到了這個(gè)趨勢(shì):
這些“1”先向左傾,再直立,最后向右傾。對(duì)此一個(gè)靠譜的想法是在MNIST中,相同數(shù)字變化的主要因素是傾斜。這很可能是因?yàn)镸NIST通過(guò)多種方式使數(shù)字標(biāo)準(zhǔn)化,而這些變化又以直立的手寫體為分界線分屬兩邊。這種情況不是孤例,其他數(shù)字的分布也或多或少表現(xiàn)出了這個(gè)特點(diǎn)。
三維可視化
除了降維到二維平面,三維也是非常常見(jiàn)的一個(gè)維度??紤]到之前在平面中許多聚類有重疊,因此我們也可視化了MNIST數(shù)字降維到三維的一些情況。
用圖像可視化MNIST(3D版)
不出所料,三維版本效果更好。這些聚類分離地很徹底,并且在糾纏時(shí)不再重疊。
看到這里我們就能知道為什么分類MNIST數(shù)字的準(zhǔn)確率達(dá)到95%左右很容易,但越往上就越難。在可視化圖像中,這些數(shù)據(jù)的分類十分清晰,因此但凡性能較好的分類器都能達(dá)成任務(wù)目標(biāo)。如果要更細(xì)化,這就很難了,因?yàn)橛行┦謱戵w確實(shí)難以歸類。
用MDS可視化MNIST(3D版)
看來(lái)MDS的二維比三維表現(xiàn)更好一點(diǎn)。
用t-SNE可視化MNIST
因?yàn)閠-SNE假想了一大堆鄰居,所以各聚類分得更散。但總體而言,它的效果還是不錯(cuò)。
如果你想要將高維數(shù)據(jù)可視化,那么在三維空間應(yīng)該比二維更適合。
小結(jié)
降維是一個(gè)非常發(fā)達(dá)的領(lǐng)域,本文只抓住了事物表面,還有上百種方法亟待測(cè)試,所以各位讀者可以親自動(dòng)手去試一試。
人們往往很容易陷入一種思維,固執(zhí)地認(rèn)定其中一種技術(shù)比其他技術(shù)更好。但我認(rèn)為其實(shí)大部分方法都是互補(bǔ)的,它們?yōu)榱俗龅綑?quán)衡,都必須放棄一個(gè)點(diǎn)來(lái)抓住另一個(gè)點(diǎn),如PCA嘗試保留線性結(jié)構(gòu),MDS嘗試保留全局幾何,而t-SNE嘗試保留拓?fù)洌ㄠ徲蚪Y(jié)構(gòu))。
這些技術(shù)為我們提供了一種獲得理解高維數(shù)據(jù)的方法。盡管直接試圖用人的思想來(lái)理解高維數(shù)據(jù)幾乎是無(wú)望的,但通過(guò)這些工具,我們可以開(kāi)始取得進(jìn)展。
-
圖像
+關(guān)注
關(guān)注
2文章
1088瀏覽量
40522 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8435瀏覽量
132879 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1209瀏覽量
24772
原文標(biāo)題:可視化MNIST:探索圖像降維過(guò)程
文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論