郭艷萍 高云 呂丙東
(山西大同大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)工程學(xué)院 山西省大同市 037009)
研究表明人類(lèi)從外界獲得的信息中80%以上都來(lái)自于視覺(jué)系統(tǒng)[2]。因?yàn)槿祟?lèi)視覺(jué)只能接受3 維或3 維以下的信息, 超出3 維將無(wú)法直接觀察[2]。然而,現(xiàn)實(shí)情況卻是隨意獲取到的數(shù)據(jù)集,都可能會(huì)有成千上百個(gè)維度。如,經(jīng)典的MNIST 維度是64,所以使用2 維的笛卡爾坐標(biāo)系,注定無(wú)法繪制64 個(gè)維度。
如果想對(duì)高維數(shù)據(jù)集進(jìn)行聚類(lèi),但又不清楚這個(gè)數(shù)據(jù)集有沒(méi)有很好的聚類(lèi)性時(shí),可以通過(guò)降維算法將該數(shù)據(jù)集映射到2 維或3 維空間中。很久以前,就有研究者提出主成分分析(PCA)降維法,期間又有其他的降維算法陸續(xù)出現(xiàn),比如多維縮放(MDS)、線(xiàn)性判別分析(LDA)和等度量映射(Isomap)等。
2008年,Laurens van der Maaten 和Geoffrey Hinton 一同提出了t-SNE 算法。他們將SNE 算法改進(jìn)為t-SNE 算法,并使它在降維領(lǐng)域得到了更為廣泛的應(yīng)用[3][4]。
t-SNE 算法是一種降維技術(shù),用于在2 維或3 維的低維空間中表示高維數(shù)據(jù)集,從而使其可視化。
t-分布全稱(chēng)為學(xué)生t-分布,是針對(duì)單個(gè)樣本,而非總體樣本的t 變換值的分布,是對(duì)u 變換變量值的標(biāo)準(zhǔn)正態(tài)分布的估計(jì)分布[5]。
t-SNE 的本質(zhì)是一種嵌入模型,它在盡量保留樣本集局部特性的基礎(chǔ)上,將高維空間中的樣本投影到低維空間中[5]。樣本集經(jīng)過(guò)t-SNE 變換后,如果在低維空間中仍具有可分性,則表明原始樣本集是可分的;如果在低維空間呈現(xiàn)為不可分,則可能是由于樣本集本身不具有可分性,或者樣本集雖然具有可分性,但不適合投影到低維空間[3]。
t-SNE 將樣本點(diǎn)之間的相似度轉(zhuǎn)化為條件概率,高維空間中樣本點(diǎn)的相似度由高斯聯(lián)合分布表示,嵌入空間中樣本點(diǎn)的相似度用t-分布表示[6]。即t-SNE 創(chuàng)建一個(gè)維度縮小的特征空間,相似的樣本在該空間中使用其附近的點(diǎn)建模,相似度低的樣本則由高概率的遠(yuǎn)點(diǎn)建模[5][7]。
t-SNE 為高維樣本根據(jù)樣本點(diǎn)之間的相似度構(gòu)建一個(gè)概率分布,相似度高的樣本被選中的概率就高,反之亦然。然后,t-SNE 在低維空間里根據(jù)概率分布構(gòu)建這些點(diǎn),使得這兩個(gè)概率分布之間盡可能的相似[5]。最后,t-SNE 最小化了兩個(gè)分布之間關(guān)于嵌入點(diǎn)位置的Kullback-Leibler(KL)散度。
通過(guò)原始空間和嵌入空間聯(lián)合概率分布的KL 散度作為評(píng)估兩個(gè)分布的相似度的指標(biāo),來(lái)評(píng)估嵌入效果。即將KL 散度函數(shù)作為損失函數(shù)[6],通過(guò)梯度下降最小化所有樣本點(diǎn)上的KLD 差異的總和[7],最終獲得收斂結(jié)果。
假設(shè)在一個(gè)2 維平面上有均勻分布的多個(gè)點(diǎn),如果把這些點(diǎn)投影到一個(gè)1 維的線(xiàn)會(huì)導(dǎo)致很多點(diǎn)是重合的。所以,為了在1 維的線(xiàn)上盡可能表達(dá)出2 維平面中的點(diǎn)的信息,Hinton 采取的方法為,把由于投影所重合的點(diǎn)使用不同的微小距離來(lái)投影[3]。原來(lái)在那些距離上的點(diǎn)會(huì)再增加一個(gè)微小的距離,被趕到更遠(yuǎn)一點(diǎn)的距離。
t-分布是長(zhǎng)尾的,意味著即使距離更遠(yuǎn),那些點(diǎn)依然能給出和高斯分布下距離小的點(diǎn)相同的概率[7]。
假設(shè)如圖1所示的是一個(gè)由3 個(gè)不同的類(lèi)在2 維空間上組成的數(shù)據(jù)集群。
圖1:3 個(gè)不同的類(lèi)組成的數(shù)據(jù)集群
接下來(lái)希望將該數(shù)據(jù)集由2 維空間映射到1 維空間上,同時(shí)保持集群之間清晰的邊界達(dá)到如圖2所示的結(jié)果。
圖2:二維投射到一維上
映射的方法有很多種,最簡(jiǎn)單的是如圖3所示的將數(shù)據(jù)投射到一個(gè)軸(縱軸)上來(lái)降低維數(shù)。很顯然,這是一種糟糕的方法,因?yàn)檫@樣做會(huì)導(dǎo)致大量的信息丟失,并且可能導(dǎo)致數(shù)據(jù)集進(jìn)行錯(cuò)誤的劃分[7]。
圖3:對(duì)象到縱軸的映射
而使用t-SNE 算法可以實(shí)現(xiàn)如圖2所示的要求。t-SNE 算法的第一步是計(jì)算一個(gè)點(diǎn)相對(duì)于其他點(diǎn)的歐幾里得距離。計(jì)算后不是直接處理這些距離,而是將它們轉(zhuǎn)換為條件概率來(lái)表達(dá)點(diǎn)與點(diǎn)之間的相似度,即映射到一個(gè)概率分布。在分布中,相對(duì)于當(dāng)前點(diǎn)距離最小的點(diǎn)有很高的可能性,而遠(yuǎn)離當(dāng)前點(diǎn)的點(diǎn)有很低的可能性。在圖3所示的2 維圖中,星型的點(diǎn)團(tuán)比三角形的點(diǎn)團(tuán)更加分散。如果不解決比例上的差異,三角形點(diǎn)的可能性將大于星型點(diǎn)的可能性。為了解釋這一事實(shí),將圖4和圖5所示點(diǎn)的概率分布除以概率的總和,計(jì)算公式及結(jié)果分別如公式(1)和公式(2)所示[7]。
圖4:三角形點(diǎn)概率分布圖
圖5:星型點(diǎn)概率分布圖
可以看出,盡管圖4和圖5中兩點(diǎn)之間的絕對(duì)距離不同,但其概率分布除以概率總和的值是相同的,因此它們被認(rèn)為是相似的[7]。
接下來(lái),使用縮小的特征空間。
圖6:9×1 的矩陣
采用如上所述的方法,即測(cè)量點(diǎn)之間的絕對(duì)距離并將它們映射到一個(gè)概率分布中,需要注意的是,這樣做并不是意味著,要將數(shù)據(jù)集中所有點(diǎn)的可能性的總和除以所有其他點(diǎn)的可能性。接下來(lái)考慮的是如何簡(jiǎn)化特征空間中的點(diǎn)的概率分布使其近似于原始特征空間中的點(diǎn),就可以得到定義良好的聚類(lèi)了[8]。
為了做到這一點(diǎn),使用了KL 散度值。KLD 值是用來(lái)衡量一個(gè)概率分布與另一個(gè)概率分布之間的差異,即比較兩個(gè)概率分布的接近程度。
在統(tǒng)計(jì)應(yīng)用中,經(jīng)常需要用一個(gè)簡(jiǎn)單的、近似的概率分布f*來(lái)描述觀察數(shù)據(jù)D 或者另一個(gè)復(fù)雜的概率分布f。此時(shí),需要使用一個(gè)量來(lái)衡量所選擇的近似分布f*和原分布相比究竟損失了多少信息量,這就是KL 散度的作用。
KL 散度不具有交換性,不能將其理解為“距離”的概念,它衡量的并不是兩個(gè)分布在空間中的遠(yuǎn)近,更準(zhǔn)確的理解還是衡量一個(gè)分布相比另一個(gè)分布的信息損失(infomation lost)。
從圖7和圖8所示的兩個(gè)KLD 中可得,KLD 值越小,兩個(gè)概率分布的差異越小,越接近。當(dāng)KLD 值為0 時(shí),意味著這兩個(gè)概率分布是完全相同的。
圖7:
圖8:
通常情況下 t-SNE 算法往往需要多次迭代并重復(fù)計(jì)算, 通過(guò)梯度下降達(dá)到最小化KL 散度的目的,取效果最好的一次結(jié)果。一旦該過(guò)程完成,將其映射回一個(gè)2 維或3 維空間。
t-SNE 是在SNE(Stochastic Neighbor Embedding, SNE; Hinton and Roweis)算法的基礎(chǔ)上發(fā)展而來(lái)的。
數(shù)學(xué)上,正態(tài)分布的方程式如公式(3)所示。
基于該假設(shè),近鄰點(diǎn)之間會(huì)有較高的pj|i,而相互遠(yuǎn)離的點(diǎn)的pj|i隨著距離的增加逐漸減小。在低維空間根據(jù)樣本點(diǎn)在高維空間中的條件概率重置其位置,即t-SNE 降維的主要思路是測(cè)量點(diǎn)之間的距離并將它們映射到一個(gè)概率分布,實(shí)現(xiàn)高維空間到低維空間的特征映射。條件概率pj|i計(jì)算如公式(4)[4]所示。
其中,σi是以xi為中心的高斯函數(shù)的方差。
t-SNE 算法采用對(duì)稱(chēng)的SNE 計(jì)算,同時(shí),在高維空間采用高斯概率分布, 低維空間下采用更重長(zhǎng)尾分布, 即自由度為1 的t-分布,來(lái)解決SNE 的“crowding problem”問(wèn)題。這種處理減弱了模擬的低維空間中映射點(diǎn)之間的吸引力[4]。低維特征空間映射點(diǎn)之間的概率qij對(duì)高維空間數(shù)據(jù)點(diǎn)之間的概率pij,如公式(5)[4]和公式(6)[4]所示。
t-SNE 降維算法采用KLD 值測(cè)量并量化聯(lián)合概率qij對(duì)pij映射的正確性[4]。
描述該正確性的量綱使用一個(gè)概率分布所對(duì)應(yīng)的熵H,其表達(dá)如公式7 所示[13]。
當(dāng)使用2 作為對(duì)數(shù)的底時(shí)(log2),熵可以被理解為編碼所有信息所需要的最小位數(shù)(minimum numbers of bits)。KL 散度計(jì)算公式就是熵計(jì)算公式7 的簡(jiǎn)單變形,在原有概率分布P 上,加入近似概率分布Q,計(jì)算其每個(gè)取值對(duì)應(yīng)對(duì)數(shù)的差:
換句話(huà)說(shuō),KL 散度計(jì)算的就是數(shù)據(jù)的原分布與近似分布的概率的對(duì)數(shù)差的期望值。當(dāng)對(duì)數(shù)log 以2 為底時(shí)(log2),可以理解為“損失了多少位的信息”,將其寫(xiě)成期望形式為:
公式(9)更常見(jiàn)的形式為:
KLD 計(jì)算如公式(11)[10]所示。
在t-SNE 中,使用KL 散度的函數(shù)作為loss 函數(shù),降維效果評(píng)判中,KLD 越小,兩個(gè)分布越接近,即模擬正確性越高。KLD 為0 意味著這兩個(gè)分布是相同的。利用梯度下降方法進(jìn)行多次迭代,最小化所有數(shù)據(jù)點(diǎn)的KLD[4],再計(jì)算梯度下降最小化所有樣本點(diǎn)上的KLD 差異的總和,得到最佳低維空間映射。
對(duì)loss 函數(shù)的每一點(diǎn)求偏導(dǎo),得到每次更新的方向,梯度下降方法如公式(12)[4]所示,yi為低維空間中的映射數(shù)據(jù),隨著KLD下降迭代不斷優(yōu)化。
t-SNE 算法通常需要多次迭代獲得最好的收斂效果[4]。值得注意的時(shí),該loss 函數(shù)不是凸函數(shù),即具有不同初始值的多次運(yùn)行將收斂于KL 散度函數(shù)的局部最小值中,可能導(dǎo)致獲得不同的結(jié)果。因此,嘗試不同的隨機(jī)數(shù)種子有時(shí)候是有用的,并選擇具有最低KLD 值的結(jié)果。
t-SNE 模型是非監(jiān)督的降維,不需要預(yù)先指定分類(lèi)標(biāo)簽信息[10]。與K-Means 等算法不同的是,它不能通過(guò)訓(xùn)練得到模型之后再將該模型用于其它數(shù)據(jù), t-SNE 只能單獨(dú)的對(duì)某個(gè)數(shù)據(jù)集進(jìn)行操作,即它只能進(jìn)行fit_transform 操作,而沒(méi)有fit 操作。
Intel(R)Core(TM)i7-8550U CPU@1.80GHz 2.00GHz 處理器,16.0GB 內(nèi)存,Windows 10 Professional 操作系統(tǒng),基于x64 的處理器, Anaconda3-5.2.0 環(huán)境進(jìn)行算法編寫(xiě)運(yùn)行。實(shí)驗(yàn)使用Python 中numpy 庫(kù)、scikiti-learn 庫(kù)、scripy 庫(kù)、matplotlib 庫(kù) 以 及seaborn 庫(kù)實(shí)現(xiàn)。
使用Python 的load_digits 數(shù)據(jù)集,該數(shù)據(jù)集是sklearn.datasets中內(nèi)置的手寫(xiě)數(shù)字圖片數(shù)據(jù)集,這是一個(gè)研究圖像分類(lèi)算法的優(yōu)質(zhì)數(shù)據(jù)集。
該數(shù)據(jù)集包含了1797 個(gè)樣本,樣本為ndarray 類(lèi)型,保存8*8的圖像,其元素是float64 類(lèi)型,共有1797 張圖片。
4.3.1 使用scikiti-learn 庫(kù)將手繪數(shù)字導(dǎo)入程序
該數(shù)據(jù)集的屬性為 ['data', 'target', 'target_names', 'images', 'DESCR'];
樣本數(shù)量=1797 ;
查看第一個(gè)樣本數(shù)據(jù),樣本大小為8×8,即64:
[ 0.0.5.13.9.1.0.0.0.0.13.15.10.15.5.0.0.3.15.2.0.11.8.0.0.4.12.0.0.8.8.0.0.5.8.0.0.9.8.0.0.4.11.0.1.12.7.0.0.2.14.5.10.12.0.0.0.0.6.13.10.0.0.0.]。
t-SNE 嚴(yán)格用于可視化時(shí),只能在至多3 維空間內(nèi)進(jìn)行顯示,所以可視化維度只能降維2 或者 3,本文給定目標(biāo)維度=2。算法的復(fù)雜度與算法中使用的最近鄰的數(shù)量有關(guān),不同的復(fù)雜度可能導(dǎo)致最終結(jié)果的劇烈變化,本文中將復(fù)雜度設(shè)為30。
4.3.2 調(diào)用擬合函數(shù)
表1:樣本點(diǎn)之間歐氏距離表
根據(jù)表1所得的歐氏距離,使用復(fù)雜度為30 的參數(shù)值,進(jìn)一步計(jì)算得到其聯(lián)合概率pj|i值,結(jié)果如表2所示。
表2:聯(lián)合概率pj|i
使用從標(biāo)準(zhǔn)偏差為10-4的高斯分布中隨機(jī)選取值來(lái)創(chuàng)建縮小的特征空間本文創(chuàng)建的特征空間大小為1979×2,空間樣本如表3所示。
表3:縮小的特征空間
定義自由度=1,經(jīng)驗(yàn)表明,當(dāng)自由度=空間維度-1 時(shí),會(huì)得到更好的結(jié)果,本文的空間維度為2,因此計(jì)算得自由度為1。這里需要注意的是,如果空間維度為1 時(shí),自由度也是1,而不能為0。
4.3.3 調(diào)用tsne 函數(shù)
將表3所示特征空間的樣本向量拉平至一維,結(jié)果如表4所示。
表4:拉平至一維的特征空間
4.3.4 計(jì)算KL 散度和梯度的誤差
梯度下降函數(shù)通過(guò)最小化KLD 值更新其中嵌入的值,當(dāng)梯度范數(shù)低于閾值,或者達(dá)到可容忍迭代次數(shù)而沒(méi)有取得任何進(jìn)展時(shí),將提前停止迭代。本文中設(shè)置最大迭代次數(shù)為1000,最小梯度范數(shù)閾值為10-7,最大無(wú)進(jìn)展迭代次數(shù)為300。
每次迭代都會(huì)計(jì)算KLD 值和梯度形式的誤差,本文實(shí)驗(yàn)次數(shù)達(dá)到最大迭代次數(shù)1000,迭代的部分結(jié)果如下:
首先計(jì)算高維空間中的樣本在低維圖中映射樣本的概率分布,理論上算法可以處理任意小的正數(shù),但是在實(shí)際處理過(guò)程中,Python 中計(jì)算機(jī)可表示的最小的正數(shù)為epsilon,小于該值的數(shù)字因?yàn)槿鄙俦匾谋忍囟荒鼙挥?jì)算機(jī)操作。所以算法中檢查了概率矩陣中的值是否小于epsilon,并在它們小于時(shí)替換它們,得到的結(jié)果如表5所示。
表5:低維圖中映射樣本的概率分布
將表5中的結(jié)果作為參數(shù)計(jì)算KL 散度,結(jié)果如表6所示。
表6:KLD 值
將表5中的結(jié)果作為參數(shù)計(jì)算梯度(偏導(dǎo)),結(jié)果如表7所示。
表7:梯度值
計(jì)算表7所示梯度的2 范數(shù),得到結(jié)果如表8所示。
表8:梯度2 范數(shù)
利用梯度下降最小化KLD 值,從表6可以看出,隨著迭代次數(shù)的增加,KLD 值逐漸減小,即低維空間映射樣本的概率分布與高維空間原始樣本的概率分布越來(lái)越接近。
最后,將降維后的手繪數(shù)字可視化展示出來(lái),結(jié)果如圖9所示。
圖9:t-SNE 可視化手繪數(shù)字
t-SNE 是目前效果最好的數(shù)據(jù)降維與可視化方法,本實(shí)驗(yàn)數(shù)據(jù)使用t-SNE 與PCA 的可視化結(jié)果如圖10 所示。
圖10:t-SNE 與PCA 的可視化結(jié)果對(duì)比
從圖10 可以看出,t-SNE 盡量保留了樣本的分類(lèi)特征。但是它的缺點(diǎn)也很明顯,比如:
(1)t-SNE 的計(jì)算復(fù)雜度高,資源占用大,運(yùn)行時(shí)間長(zhǎng),處理包含數(shù)百萬(wàn)個(gè)樣本的數(shù)據(jù)集可能需要幾個(gè)小時(shí),而PCA 可以在幾秒鐘或幾分鐘內(nèi)完成。
(2)t-SNE 通常只用于可視化應(yīng)用,即映射空間只限于2 維或3 維。
(3)t-SNE 算法具有隨機(jī)性,即不同種子的多次實(shí)驗(yàn)可能產(chǎn)生不同的結(jié)果。雖然最終選擇損失最小的結(jié)果,但可能需要嘗試不同的初始化點(diǎn),進(jìn)行多次實(shí)驗(yàn)以防止局部次優(yōu)解帶來(lái)的影響。
(4)全局結(jié)構(gòu)未能明確保留,雖然這個(gè)問(wèn)題可以通過(guò)PCA 初始化點(diǎn)來(lái)緩解,但不能根本解決。