1. 程式人生 > 實用技巧 >T-sne降維

T-sne降維

1. SNE原理

基本原理: 是通放射變換 將資料點對映到概率分佈上,分為兩個步驟:

  • 構建高維物件之間的概率分佈,使得相似的物件有更高的概率被選擇,而不相似的物件有更低的概率。
  • SNE 在低維空間中構建這兩個分佈,使得兩個概率分佈儘可能相似。

t-SNE是非監督的降維,跟kmeans 等不同,他不能通過訓練得到一些東西后再用於其他資料(kmeans 可以通過訓練得到k個點,再用於其他資料集,而t-SNE 只能單獨多資料做操作。

原理推導: SNE 是先將歐幾里得距離轉化為條件概率來表達點與點之間的相似度,具體來說,給定N個高維的資料,(N不是維度)。首先是計算概率pij,正比於xi和xj 之間的相似度,

這裡的引數對於不同的xi的取值不一樣,後續討論如何設定,此外設定px|x =0,因為我們關注的是兩兩之間的相似度,對於低維度下的yi,可以指定高斯分佈方差為,因此相似度為

同樣qi|i=0。

如果降維效果比較好,區域性特徵保留完整,那麼,因此我們優化兩個分佈之間的KL散度。目標函式如下:

,這裡的·Pi表示了給定點xi下,其他所有資料點的條件概率分佈。

KL 散度具有不對稱性,在低維對映中不同距離對應的懲罰權重是不同的。具體來說是: 距離較遠的兩個點來表達距離較近的兩個點會產生更大的cost,距離較近的兩個點來表達距離較遠的兩個點產生的cost 相對較小。例如來建模 cost=

,用同樣較大的來建模,因此,SNE 傾向與保留資料中的區域性特徵。

2 t-SNE

SNE 很難優化,存在Crowing 問題 (擁擠) 不同點: 使用對稱的SNE,簡化梯度公式,低維空間下,使用更重長尾分佈的t 分佈替代高斯分佈代表兩點之間的相似度。來避免擁擠問題。

2.1 Symmetric SNE

優化pi|j 和qi|j 的KL散度的替換思路是使用聯合概率分佈來替換條件概率分佈,即P是高維空間中各個點的聯合概率分佈,Q是低維空間下的,目標函式為

這裡1的pii和qii都為0,這種SNE稱為symmetric SNE,因為他假設了對於任意i,pij =pji,qij=qji,因此概率分佈可以改寫為:

這種方法會引入異常值的問題,比如xi 是異常值,那麼||xi-xj||2 會很大,對應的所有的j,pij 都會很小,導致低維對映下yi對cost的影響很小。為了解決這個問題,會將聯合概率分佈做一個修正。

2.2 Crowing 問題

各個簇聚在一起,無法區分,比如高維資料在降維到10維下,會有很好的表達,但是降維到2維後,無法得到可信對映。

如何解決: 用sight repulsion的方法

2.3 t-SNE

對稱SNE時間上在高維度下,另一種減輕擁擠問題的方法: 在高維空間下使用高斯分佈將距離轉換為概率分佈,在低維空間下,使用t 分佈將距離轉換為概率分佈,使得高維度下中低等的距離在對映後能夠有個較大的距離。

t 分佈受異常值影響更小,擬合介個更為合理,較好的捕獲了資料的整體特徵。

t-SNE 的梯度更新有兩大優勢:

對於不相似的點,用一個較小的距離會產生較大的梯度來讓這些點排斥開來。

這種排斥又不會無限大(梯度中分母) ,避免不相似的點距離太遠。

2.4 演算法過程

Data: X=x1,....xn

計算cost function 的引數

優化引數: 設定迭代次數T,學習速率n,動量

目標結果是低維資料表示,YT=y1,...,yn

開始優化:

計算給定Perp 下的條件概率,pj|i

令pij=(pj|i +pi|j)/2n

用N(0,10-4I) 隨機初始化Y

迭代,從t=1 到T,做如下的操作:

計算低維度下的qij ,計算梯度,更新Yt

結束

我們對比一下高斯分佈和t分佈(如上圖,code見probability/distribution.md), t分佈受異常值影響更小,擬合結果更為合理,較好的捕獲了資料的整體特徵。

使用了t分佈之後的q變化,如下:

此外,t分佈是無限多個高斯分佈的疊加,計算上不是指數的,會方便很多。優化的梯度如下:

t-sne的有效性,也可以從上圖中看到:橫軸表示距離,縱軸表示相似度, 可以看到,對於較大相似度的點,t分佈在低維空間中的距離需要稍小一點;而對於低相似度的點,t分佈在低維空間中的距離需要更遠。這恰好滿足了我們的需求,即同一簇內的點(距離較近)聚合的更緊密,不同簇之間的點(距離較遠)更加疏遠。

總結一下,t-SNE的梯度更新有兩大優勢:

  • 對於不相似的點,用一個較小的距離會產生較大的梯度來讓這些點排斥開來。
  • 這種排斥又不會無限大(梯度中分母),避免不相似的點距離太遠。

2.5 不足

1 主要用於視覺化,

2 傾向與儲存區域性特徵

3 沒有唯一最優解

4 訓練很慢

更詳細的介紹:https://blog.csdn.net/scott198510/article/details/76099700

對kl散度的介紹如下

 1 KL散度、JS散度和交叉熵
 2 三者都是用來衡量兩個概率分佈之間的差異性的指標。不同之處在於它們的數學表達。
 3 對於概率分佈P(x)和Q(x)
 4 1)KL散度(Kullback–Leibler divergence)
 5 又稱KL距離,相對熵。
 6 
 7 當P(x)和Q(x)的相似度越高,KL散度越小。
 8 KL散度主要有兩個性質:
 91)不對稱性
10 儘管KL散度從直觀上是個度量或距離函式,但它並不是一個真正的度量或者距離,因為它不具有對稱性,即D(P||Q)!=D(Q||P)。
112)非負性
12 相對熵的值是非負值,即D(P||Q)>013  
14 2)JS散度(Jensen-Shannon divergence)
15 JS散度也稱JS距離,是KL散度的一種變形。
16 
17 但是不同於KL主要又兩方面:
181)值域範圍
19 JS散度的值域範圍是[0,1],相同則是0,相反為1。相較於KL,對相似度的判別更確切了。
202)對稱性
21 即 JS(P||Q)=JS(Q||P),從數學表示式中就可以看出。
22 3)交叉熵(Cross Entropy)
23 在神經網路中,交叉熵可以作為損失函式,因為它可以衡量P和Q的相似性。
24 
25 交叉熵和相對熵的關係:
26 
27 以上都是基於離散分佈的概率,如果是連續的資料,則需要對資料進行Probability Density Estimate來確定資料的概率分佈,就不是求和而是通過求積分的形式進行計算了。
28  
29 個人理解:
30 1、KL散度本質是用來衡量兩個概率分佈的差異一種數學計算方式;由於用到比值除法不具備對稱性;
31 2、神經網路訓練時為何不用KL散度,從數學上來講,它們的差異在於KL散度多減了一個 H(P);P代表真實分佈,Q代表估計的分佈
32 
33 從損失函式角度來看,在訓練樣本固定的情況下,H(P)是個常數,對梯度更新沒有價值;所以兩者的最優解是一樣的;