日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

t-SNE(t-distributed stochastic neighbor embedding)

發布時間:2024/9/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 t-SNE(t-distributed stochastic neighbor embedding) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

t-SNE(t-distributed stochastic neighbor embedding)是用于降維的一種機器學習算法,是由 Laurens van der Maaten 和 Geoffrey Hinton在08年提出來。此外,t-SNE 是一種非線性降維算法,非常適用于高維數據降維到2維或者3維,進行可視化。

t-SNE是由SNE(Stochastic Neighbor Embedding, SNE; Hinton and Roweis, 2002)發展而來。我們先介紹SNE的基本原理,之后再擴展到t-SNE。最后再看一下t-SNE的實現以及一些優化。

1.SNE

1.1基本原理

SNE是通過仿射(affinitie)變換將數據點映射到概率分布上,主要包括兩個步驟:

我們看到t-SNE模型是非監督的降維,他跟kmeans等不同,他不能通過訓練得到一些東西之后再用于其它數據(比如kmeans可以通過訓練得到k個點,再用于其它數據集,而t-SNE只能單獨的對數據做操作,也就是說他只有fit_transform,而沒有fit操作)

1.2 SNE原理推導

SNE是先將歐幾里得距離轉換為條件概率來表達點與點之間的相似度。具體來說,給定一個N個高維的數據 x1,...,xN

(注意N不是維度), t-SNE首先是計算概率pij,正比于xi和xj

之間的相似度(這種概率是我們自主構建的),即:

pj∣i=exp(?∣∣xi?xj∣∣2/(2σ2i))∑k≠iexp(?∣∣xi?xk∣∣2/(2σ2i))

這里的有一個參數是σi

,對于不同的點xi取值不一樣,后續會討論如何設置。此外設置px∣x=0

,因為我們關注的是兩兩之間的相似度。

那對于低維度下的yi

,我們可以指定高斯分布為方差為12√

,因此它們之間的相似度如下:

qj∣i=exp(?∣∣xi?xj∣∣2)∑k≠iexp(?∣∣xi?xk∣∣2)

同樣,設定qi∣i=0

.

如果降維的效果比較好,局部特征保留完整,那么 pi∣j=qi∣j

, 因此我們優化兩個分布之間的距離-KL散度(Kullback-Leibler divergences),那么目標函數(cost function)如下:

C=∑iKL(Pi∣∣Qi)=∑i∑jpj∣ilogpj∣iqj∣i

這里的Pi

表示了給定點xi下,其他所有數據點的條件概率分布。需要注意的是KL散度具有不對稱性,在低維映射中不同的距離對應的懲罰權重是不同的,具體來說:距離較遠的兩個點來表達距離較近的兩個點會產生更大的cost,相反,用較近的兩個點來表達較遠的兩個點產生的cost相對較小(注意:類似于回歸容易受異常值影響,但效果相反)。即用較小的 qj∣i=0.2 來建模較大的 pj∣i=0.8, cost=plog(pq)=1.11,同樣用較大的qj∣i=0.8來建模較大的pj∣i=0.2

, cost=-0.277, 因此,SNE會傾向于保留數據中的局部特征

思考:了解了基本思路之后,你會怎么選擇σ

,固定初始化?

下面我們開始正式的推導SNE。首先不同的點具有不同的σi

,Pi的熵(entropy)會隨著σi的增加而增加。SNE使用困惑度(perplexity)的概念,用二分搜索的方式來尋找一個最佳的σ

。其中困惑度指:

Perp(Pi)=2H(Pi)

這里的H(Pi)

是Pi

的熵,即:

H(Pi)=?∑jpj∣ilog2pj∣i

困惑度可以解釋為一個點附近的有效近鄰點個數。SNE對困惑度的調整比較有魯棒性,通常選擇5-50之間,給定之后,使用二分搜索的方式尋找合適的σ

?

那么核心問題是如何求解梯度了,目標函數等價于∑∑?plog(q)

這個式子與softmax非常的類似,我們知道softmax的目標函數是∑?ylogp,對應的梯度是y?p(注:這里的softmax中y表示label,p表示預估值)。 同樣我們可以推導SNE的目標函數中的i在j下的條件概率情況的梯度是2(pi∣j?qi∣j)(yi?yj), 同樣j在i下的條件概率的梯度是2(pj∣i?qj∣i)(yi?yj)

, 最后得到完整的梯度公式如下:

δCδyi=2∑j(pj∣i?qj∣i+pi∣j?qi∣j)(yi?yj)

在初始化中,可以用較小的σ

下的高斯分布來進行初始化。為了加速優化過程和避免陷入局部最優解,梯度中需要使用一個相對較大的動量(momentum)。即參數更新中除了當前的梯度,還要引入之前的梯度累加的指數衰減項,如下:

Y(t)=Y(t?1)+ηδCδY+α(t)(Y(t?1)?Y(t?2))

這里的Y(t)

表示迭代t次的解,η表示學習速率,α(t)

表示迭代t次的動量。

此外,在初始優化的階段,每次迭代中可以引入一些高斯噪聲,之后像模擬退火一樣逐漸減小該噪聲,可以用來避免陷入局部最優解。因此,SNE在選擇高斯噪聲,以及學習速率,什么時候開始衰減,動量選擇等等超參數上,需要跑多次優化才可以。

思考:SNE有哪些不足? 面對SNE的不足,你會做什么改進?

2.t-SNE

盡管SNE提供了很好的可視化方法,但是他很難優化,而且存在”crowding problem”(擁擠問題)。后續中,Hinton等人又提出了t-SNE的方法。與SNE不同,主要如下:

  • 使用對稱版的SNE,簡化梯度公式
  • 低維空間下,使用t分布替代高斯分布表達兩點之間的相似度

t-SNE在低維空間下使用更重長尾分布的t分布來避免crowding問題和優化問題。在這里,首先介紹一下對稱版的SNE,之后介紹crowding問題,之后再介紹t-SNE。

2.1 Symmetric SNE

優化pi∣j

和qi∣j

的KL散度的一種替換思路是,使用聯合概率分布來替換條件概率分布,即P是高維空間里各個點的聯合概率分布,Q是低維空間下的,目標函數為:

C=KL(P∣∣Q)=∑i∑jpi,jlogpijqij

這里的pii

,qii為0,我們將這種SNE稱之為symmetric SNE(對稱SNE),因為他假設了對于任意i,pij=pji,qij=qji

,因此概率分布可以改寫為:

pij=exp(?∣∣xi?xj∣∣2/2σ2)∑k≠lexp(?∣∣xk?xl∣∣2/2σ2)????qij=exp(?∣∣yi?yj∣∣2)∑k≠lexp(?∣∣yk?yl∣∣2)

這種表達方式,使得整體簡潔了很多。但是會引入異常值的問題。比如xi

是異常值,那么∣∣xi?xj∣∣2會很大,對應的所有的j, pij都會很小(之前是僅在xi下很小),導致低維映射下的yi

對cost影響很小。

思考: 對于異常值,你會做什么改進?pi

表示什么?

為了解決這個問題,我們將聯合概率分布定義修正為: pij=pi∣j+pj∣i2

, 這保證了∑jpij>12n

, 使得每個點對于cost都會有一定的貢獻。對稱SNE的最大優點是梯度計算變得簡單了,如下:

δCδyi=4∑j(pij?qij)(yi?yj)

實驗中,發現對稱SNE能夠產生和SNE一樣好的結果,有時甚至略好一點。

2.2 Crowding問題

擁擠問題就是說各個簇聚集在一起,無法區分。比如有一種情況,高維度數據在降維到10維下,可以有很好的表達,但是降維到兩維后無法得到可信映射,比如降維如10維中有11個點之間兩兩等距離的,在二維下就無法得到可信的映射結果(最多3個點)。 進一步的說明,假設一個以數據點xi

為中心,半徑為r的m維球(三維空間就是球),其體積是按rm增長的,假設數據點是在m維球中均勻分布的,我們來看看其他數據點與xi

的距離隨維度增大而產生的變化。

從上圖可以看到,隨著維度的增大,大部分數據點都聚集在m維球的表面附近,與點xi

的距離分布極不均衡。如果直接將這種距離關系保留到低維,就會出現擁擠問題。

怎么解決crowding問題呢?

Cook et al.(2007) 提出一種slight repulsion的方式,在基線概率分布(uniform background)中引入一個較小的混合因子ρ

,這樣qij就永遠不會小于2ρn(n?1) (因為一共了n(n-1)個pairs),這樣在高維空間中比較遠的兩個點之間的qij總是會比pij大一點。這種稱之為UNI-SNE,效果通常比標準的SNE要好。優化UNI-SNE的方法是先讓ρ為0,使用標準的SNE優化,之后用模擬退火的方法的時候,再慢慢增加ρ. 直接優化UNI-SNE是不行的(即一開始ρ不為0),因為距離較遠的兩個點基本是一樣的qij(等于基線分布), 即使pij很大,一些距離變化很難在qij中產生作用。也就是說優化中剛開始距離較遠的兩個聚類點,后續就無法再把他們拉近了。

2.3 t-SNE

對稱SNE實際上在高維度下 另外一種減輕”擁擠問題”的方法:在高維空間下,在高維空間下我們使用高斯分布將距離轉換為概率分布,在低維空間下,我們使用更加偏重長尾分布的方式來將距離轉換為概率分布,使得高維度下中低等的距離在映射后能夠有一個較大的距離。

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

使用了t分布之后的q變化,如下:

qij=(1+∣∣yi?yj∣∣2)?1∑k≠l(1+∣∣yi?yj∣∣2)?1

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

δCδyi=4∑j(pij?qij)(yi?yj)(1+∣∣yi?yj∣∣2)?1

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

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

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

2.4 算法過程

算法詳細過程如下:

  • Data: X=x1,...,xn
  • ?
  • 計算cost function的參數:困惑度Perp
  • 優化參數: 設置迭代次數T, 學習速率η
  • , 動量α(t)
  • ?
  • 目標結果是低維數據表示 YT=y1,...,yn
  • ?
  • 開始優化
    • 計算在給定Perp下的條件概率pj∣i
  • (參見上面公式)
  • 令 pij=pj∣i+pi∣j2n
  • ?
  • 用 N(0,10?4I)
  • 隨機初始化 Y
  • 迭代,從 t = 1 到 T, 做如下操作:
    • 計算低維度下的 qij
  • (參見上面的公式)
  • 計算梯度(參見上面的公式)
  • 更新 Yt=Yt?1+ηdCdY+α(t)(Yt?1?Yt?2)
      • ?
    • 結束
  • 結束

優化過程中可以嘗試的兩個trick:

  • 提前壓縮(early compression):開始初始化的時候,各個點要離得近一點。這樣小的距離,方便各個聚類中心的移動。可以通過引入L2正則項(距離的平方和)來實現。
  • 提前夸大(early exaggeration):在開始優化階段,pij

乘以一個大于1的數進行擴大,來避免因為qij太小導致優化太慢的問題。比如前50次迭代,pij

  • 乘以4

優化的過程動態圖如下:

2.5 不足

主要不足有四個:

  • 主要用于可視化,很難用于其他目的。比如測試集合降維,因為他沒有顯式的預估部分,不能在測試集合直接降維;比如降維到10維,因為t分布偏重長尾,1個自由度的t分布很難保存好局部特征,可能需要設置成更高的自由度。
  • t-SNE傾向于保存局部特征,對于本征維數(intrinsic dimensionality)本身就很高的數據集,是不可能完整的映射到2-3維的空間
  • t-SNE沒有唯一最優解,且沒有預估部分。如果想要做預估,可以考慮降維之后,再構建一個回歸方程之類的模型去做。但是要注意,t-sne中距離本身是沒有意義,都是概率分布問題。
  • 訓練太慢。有很多基于樹的算法在t-sne上做一些改進

3.變種

  • multiple maps of t-SNE
  • parametric t-SNE
  • Visualizing Large-scale and High-dimensional Data

總結

以上是生活随笔為你收集整理的t-SNE(t-distributed stochastic neighbor embedding)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。