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散度主要有兩個性質: 9 (1)不對稱性 10 儘管KL散度從直觀上是個度量或距離函式,但它並不是一個真正的度量或者距離,因為它不具有對稱性,即D(P||Q)!=D(Q||P)。 11 (2)非負性 12 相對熵的值是非負值,即D(P||Q)>0。 13 14 2)JS散度(Jensen-Shannon divergence) 15 JS散度也稱JS距離,是KL散度的一種變形。 16 17 但是不同於KL主要又兩方面: 18 (1)值域範圍 19 JS散度的值域範圍是[0,1],相同則是0,相反為1。相較於KL,對相似度的判別更確切了。 20 (2)對稱性 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)是個常數,對梯度更新沒有價值;所以兩者的最優解是一樣的;