t-SNE 從入門到放棄


t-SNE 算法

1 前言

  t-SNE 即 t-distributed stochastic neighbor embedding 是一種用於降維的機器學習算法,在 2008 年由 Laurens van der Maaten 和 Geoffrey Hinton 提出。

  t-SNE 是一種非線性降維算法,主要適用於將高維數據降維到 2 維或 3 維 ,方便可視化。但是由於以下種種原因導致它不適合於降維,僅適合可視化:

  • 數據需要降維時,特征間常存在線性相關性,此時常使用線性降維算法,如 PCA。而對於特征之間存在非線性相關,我們並不會先使用非線性降維算法降維再搭配一個線性模型,而是直接使用非線性模型;
  • 一般而言,我們降維並不會把數據維度降維到2 維或者3維,降維的維度一般較大,如降到 20 維,由於 t-SNE 算法使用自由度為 1 的 t 分布很難做到好的效果;
  • t-SNE 算法計算復雜度很高,目標函數非凸,容易得到局部最優解;

  以下使用 t-SNE 和 PCA可視化手寫數字的效果對比:

      

  常見的降維算法:

    • 主成分分析(線性)
    • t-SNE (非參數/非線性)
    • 薩蒙映射(非線性)
    • 等距映射(非線性)
    • 局部線性嵌入(非線性)
    • 規范相關分析(非線性)
    • SNE(非線性)
    • 最小方差無偏估計(非線性)
    • 拉普拉斯特征圖(非線性)

2 SNE 算法

  t-SNE 算法是從 SNE 改進而來,所以先介紹 SNE 。給定一組高維數據 $ \{x_{1}, x_{2}, \ldots, x_{n} \} , x_i=(x_{i}^{(1)}$,$x_{i}^{(2)},x_{i}^{(3)},......x_{i}^{(n)}) $,目標是將這組數據降維到 2 維,SNE 的基本思想是若兩個數據在高維空間中是相似的,那么降維到 2 維空間時距離得很近。 

2.1 高維空間

  隨機鄰近嵌入(SNE) 采用首先通過將數據點之間的高維歐幾里得距離轉換為相似性的條件概率來描述兩個數據之間的相似性。

  假設高維空間中的兩個點 $ x_{i}, x_{j}$ ,以點 $ x_{i}$ 為中心構建方差為 $ \sigma_{i}$ 的高斯分布。用 $ p_{j \mid i}$ 表示 $ x_{j}$ 在 $ x_{i}$  鄰域的概率,若 $ x_{j}$ 與 $ x_{i}$ 相距很近,那么 $ p_{j \mid i}$ 很大;反之, $ p_{j \mid i}$ 很小。

  $ p_{j \mid i}$ 定義如下:

    $p_{j \mid i}=\frac{\exp \left(-\left\|x_{i}-x_{j}\right\|^{2} /\left(2 \sigma_{i}^{2}\right)\right)}{\sum_{k \neq i} \exp \left(-\left\|x_{i}-x_{k}\right\|^{2} /\left(2 \sigma_{i}^{2}\right)\right)}$

  只關心不同點對之間的相似度,所以設 $p_{i \mid i}=0$ 。

2.2 低維空間

  當把數據映射到低維空間后,高維數據點之間的相似性也應該在低維空間的數據點上體現出來。  

  假設 $ x_{i}, x_{j}$ 映射到低維空間后對應 $ y_{i}, y_{j}$,那么 $y_{j}$ 是 $ y_{i}$ 鄰域的條件概率為 $ q_{j \mid i}$ :

    $q_{j \mid i}=\frac{\exp \left(-\left\|y_{i}-y_{j}\right\|^{2}\right)}{\sum \limits _{k \neq i} \exp \left(-\left\|y_{i}-y_{k}\right\|^{2}\right)}$

  低維空間中的方差直接設置為  $ \sigma_{i}=\frac{1}{\sqrt{2}}  $ 。同樣  $q_{i \mid i}=0$  。 

2.3 目標函數

  若  $y_{i}$  和  $y_{j}$  真實反映了高維數據點  $x_{i}$  和  $x_{j}$  之間的關系,那么條件概率  $p_{j \mid i}$  與  $q_{j \mid i} $ 應該完全相等。這里只考慮了  $x_{i}$  與  $x_{j}$ 之間的條件概率,若考慮  $x_{i}$  與其他所有點之間的條件概率,則可構成一個條件概率分布  $P_{i}$。 同理在低維空間存在一個條件概率分布  $Q_{i}$  且應該與  $P_{i}$  對應。

  衡量兩個分布之間的相似性采用 KL 距離(Kullback-Leibler Divergence),SNE 最終目標就是對所有數據點最小化 KL 距 離,我們使用梯度下降算法最小化如下代價函數:

    $C=\sum\limits_{i} K L\left(P_{i}|| Q_{i}\right)=\sum \limits _{i} \sum \limits_{j} p_{j \mid i} \log \frac{p_{j \mid i}}{q_{j \mid i}}$

  但由於 KL 距離 是一個非對稱的度量。最小化代價函數的目的是讓  $p_{j \mid i}$  和  $q_{j \mid i}$ 的值盡可能的接近,即低維空間中點的相似性應當與高維空間中點的相似性一致。但從代價函數的形式可以看出,當  $p_{j \mid i}$  較大,$q_{j \mid i}$  較小時,代價較高;而  $p_{j \mid i}$ 較小,$ q_{j \mid i}$ 較大時,代價較低。即高維空間中兩個數據點距離較近時,若映射到低維空間后距離較遠,那么將得到一個很高的懲罰,這當然沒問題。反之,高維空間中兩個數據點距離較遠時,若映射到低維空間距離較近,將得到一個很低的懲罰值,顯然應得到一個較高的懲罰。即SNE的代價函數更關注局部結構,而忽視了全局結構。

2.4 SNE缺點

  總結一下SNE的缺點:

  • 不對稱導致梯度計算復雜。由於條件概率  $p_{j \mid i}$  不等於  $p_{i \mid j}$,$q_{j \mid i}$  不等於  $q_{i \mid j} $,因此梯度計算中需要的計算量較大。目標函數計算梯度如下:

    $\frac{\delta C}{\delta y_{i}}=2 \sum \limits _{j}\left(p_{j \mid i}-q_{j \mid i}+p_{i \mid j}-q_{i \mid j}\right)\left(y_{i}-y_{j}\right)$

  • Crowing 問題。即不同類別的簇擠在一起,無法區分開來。擁擠問題與某個特定算法無關,而是由於高維空間距離分布和低維空間距離分布的差異造成的。如高維度數據在降維到 10 維,可以有很好的表達,但降維到 2 維后無法得到可信映射。假設一個以數據點 $x_i$ 為中心,半徑為 $r$ 的 $m$ 維球(三維空間就是球),其體積是按 $r^m$ 增長的,假設數據點是在 $m$ 維球中均勻分布的,我們來看看其他數據點與 $x_i$ 的距離隨維度增大而產生的變化。

      

  從上圖可以看到,隨着維度的增大,大部分數據點都聚集在 $m$ 維球的表面附近,與點 $x_i$ 的距離分布極不均衡。如果直接將這種距離關系保留到低維,就會出現擁擠問題。

import matplotlib.pyplot as plt
import numpy as np
from numpy.linalg import norm
npoints = 1000 # 抽取1000個m維球內均勻分布的點
plt.figure(figsize=(20, 4))
for i, m in enumerate((2, 3, 5, 8)):
    # 這里模擬m維球中的均勻分布用到了拒絕采樣,即先生成m維立方中的均勻分布,再剔除m維球外部的點
    accepts = []
    while len(accepts) < 1000:
        points = np.random.rand(500, m)
        accepts.extend([d for d in norm(points, axis=1) if d <= 1.0]) # 拒絕采樣
    accepts = accepts[:npoints]
    ax = plt.subplot(1, 4, i+1)
    ax.set_xlabel('distance') # x軸表示點到圓心的距離
    if i == 0:
        ax.set_ylabel('count') # y軸表示點的數量
    ax.hist(accepts, bins=np.linspace(0., 1., 50), color='green')
    ax.set_title('m={0}'.format(str(m)), loc='left')
plt.show()

3 t-SNE

3.1 對稱 SNE

  在 SNE 中,高維空間中條件概率 $p_{j \mid i}$ 不等於 $p_{i \mid j}$,低維空間中 $q_{j \mid i}$ 不等於 $q_{i \mid j} $,於是提出對稱 $\mathrm{SNE} $,采用聯合概率分布代替原始的條件概率,使得 $p_{i j}=p_{j i}, \quad q_{i j}=q_{j i} $

  優化  $p_{i  \mid j }$  和  $q_{i \mid j} $ 的 KL 散度的一種替換思路是,使用聯合概率分布來替換條件概率分布,即 $P$ 是高維空間里各個點的聯合概率分布, $Q$ 是低維空間下,目標函數為:

    $C=K L(P \| Q)=\sum \limits_{i} \sum \limits _{j} p_{i, j} \log \frac{p_{i j}}{q_{i j}}$

  在高維空間中定義 $p_{i j} $:

    $p_{i j}=\frac{\exp \left(-\left\|x_{i}-x_{j}\right\|^{2} / 2 \sigma^{2}\right)}{\sum \limits_ {k \neq l} \exp \left(-\left\|x_{k}-x_{l}\right\|^{2} / 2 \sigma^{2}\right)}$

  在低維空間中定義 $ q_{i j} $ :

    $q_{i j}=\frac{\exp \left(-\left\|y_{i}-y_{j}\right\|^{2}\right)}{\sum_{k \neq l} \exp \left(-\left\|y_{k}-y_{l}\right\|^{2}\right)}$

   但在高維空間中這樣定義會帶來異常值的問題。假設點  $x_{i}$  是一個噪聲點,那么  $\left\|x_{i}-x_{j}\right\|$  的平方會很大,那么對於所有的  $j$,$p_{i j}$  的值都會很小,導致在低維映射下的  $y_{i}$  對整個損失函數的影響很小,但對於異常值,我們需要得到一個更大的懲罰,於是對高維空間中的聯合概率修正為:

    $p_{i j}=\frac{p_{i\mid j}+p_{p_{j \mid i}}}{2}$

  這樣就避免了異常值的問題,此時的梯度變為:

    $\frac{\delta C}{\delta y_{i}}=4 \sum_{j}\left(p_{i j}-q_{i j}\right)\left(y_{i}-y_{j}\right)$

  但對稱 SNE 的效果只是略微優於 SNE 的效果。

3.2 引入 t 分布

  $t$-分布(t-distribution)用於根據小樣本來估計呈正態分布且方差未知的總體的均值。如果總體方差已知(例如在樣本數量足夠多時),則應該用正態分布來估計總體均值。

   $t$分布曲線形態與 $n$(確切地說與自由度df)大小有關。與標准正態分布曲線相比,自由度 df 越小,$t$ 分布曲線愈平坦,曲線中間愈低,曲線雙側尾部翹得愈高;自由度 df 愈大,$t$ 分布曲線愈接近正態分布曲線,當自由度 $df=∞$ 時,$t$分布曲線為標准正態分布曲線。

  假設 $X$ 服從標准正態分布 $N (0,1)$, $Y$ 服從 $ \chi^{2}(n) $分布, 那么  $Z=\frac{X}{\sqrt{Y / n}} $ 的分布稱為自由度為  $n$  的分布,記為  $Z \sim t(n) $ 。 

  分布密度函數 $f_{Z}(x)=\frac{\operatorname{Gam}\left(\frac{n+1}{2}\right)}{\sqrt{n \pi} \operatorname{Gam}\left(\frac{n}{2}\right)}\left(1+\frac{x^{2}}{n}\right)^{-\frac{n+1}{2}} $

  其中,$ \operatorname{Gam}(\mathrm{x}) $ 為伽馬函數。

  對稱 SNE 在高維度下另外一種減輕”擁擠問題”的方法:在高維空間下,使用高斯分布將距離轉換為概率分布,在低維空間下,使用更加偏重長尾分布的方式來將距離轉換為概率分布。

      

長尾分布

  長尾(The Long Tail)這一概念是由“連線”雜志主編克里斯·安德森(Chris Anderson)在2004年十月的“長尾” 一文中最早提出,用來描述諸如亞馬遜和Netflix之類網站的商業和經濟模式。

      

  如圖所示,右邊藍色長長的部分便是長尾。

  舉個例子:
  如手機市場,可能某果和某為手機近幾年大受歡迎,銷量占比極高,是手機市場上的主流商品,那就是左邊的紅色部分。而其他的各類手機就是上圖中的右邊藍色部分。

  長尾效應:
  長尾效應就是藍色面積大於紅色面積,就是市場中那些小而散的個性化需求的總和也能產生極為驚人的利益。

  t 分布是一種長尾分布,在圖左中可以看到,在沒有異常點時,t 分布與高斯分布的擬合結果基本一致。在圖右,出現了部分異常點,由於高斯分布的尾部較低,對異常點比較敏感,為了照顧這些異常點,高斯分布的擬合結果偏離了大多數樣本所在位置,方差也較大。相比之下,t  分布的尾部較高,對異常點不敏感,保證了其魯棒性,因此其擬合結果更為合理,較好的捕獲了數據的整體特征。

  圖中有高斯分布和  t 分布兩條曲線,表示點之間的相似性與距離的關系,高斯分布對應高維空間t  分布對應低維空間。那么對於高維空間中相距較近的點,為了滿足  $p_{i j}=q_{i j}$, 低維空間中的距離需要稍小一點; 而對於高維空間中相距較遠的點,為了滿足  $p_{i j}=q_{i j} $, 低維空 間中的距離需要更遠。便滿足同一簇內的點(距離較近)聚合的更緊密,不同簇之間的點(距離較遠)更加疏遠。

      

  引入 t 分布之后,在低維空間中,用自由度為 1 的 t 分布重新定義 :

     $q_{i j}=\frac{\left(1+\left\|y_{i}-y_{j}\right\|^{2}\right)^{-1}}{\sum \limits _{k \neq l}\left(1+\left\|y_{i}-y_{j}\right\|^{2}\right)^{-1}}$

  然后與原始 SNE 一樣,我們使用 K-L 散度定義目標函數進行優化,從而求解。至此,關於 t-SNE 算法的原理部分,我們就介紹完了。

3.3 t-SNE 算法過程

  • $Data: X=x_{1}, \ldots, x_{n}$
  • 計算 cost function 的參數: 困惑度 Perp
  • 優化參數:設置迭代次數 $ \mathrm{T}$ , 學習速率$ \eta$ ,動量 $ \alpha(t)$
  • 目標結果是低維數據表示 $ Y^{T}=y_{1}, \ldots, y_{n}$
  • 開始優化 
    • 計算在給定 Perp下的條件概率 $ p_{j \mid i}$ (參見上面公式)
    • 令 $ p_{i j}=\frac{p_{j\left|i+p_{i}\right| j}}{2 n}$
    • 用 $ N\left(0,10^{-4} I\right)$ 隨機初始化 $ \mathrm{Y}$
    • 迭代,從 $ \mathrm{t}=1$ 到 $ \mathrm{T}$, 做如下操作:結束
      • 計算低維度下的 $ q_{i j}$ (參見上面的公式)
      • 計算梯度(參見上面的公式)
      • 更新 $ Y^{t}=Y^{t-1}+\eta \frac{d C}{d Y}+\alpha(t)\left(Y^{t-1}-Y^{t-2}\right)$
    • 結束
  • 結束

3.4 優化小技巧

  • 提前壓縮 (ear1y compression) : 開始初始化的時候,各個點要離得近一點。這樣小的距離,方便各個聚類中心的移動。可以通過引入 $L2$ 正則項 (距離的平方和) 來實現。
  • 提前誇大(ear1y exaggeration):在開始優化階段, $ p_{i j}$ 乘以一個大於 1 的數進行擴大, 來避免因為 $ q_{i j}$ 太小導致優化太慢的問題。比如前 50 次迭代, $ p_{i j} $ 乘以 4。

  優化的過程動態圖如下:

            

3.5 缺點

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM