7.4.6 核PCA

7.4.6 核PCA

經典 PCA 是線性變換,重構數據矩陣是原矩陣的投影變換,當數據點雲分佈呈現明顯的非線性時,線性PCA不能很好壓縮維度,達不到提取主成分的效果。例如三維空間中,點雲是一條曲線分佈,曲線不位於任意平面內,則對點雲進行投影變換隻能變換到三維空間,所以線性PCA的主成分還是3個。但曲線可以看作只有一維,“沿曲線切線方向”的維度,這就需要通過非線性變換,獲得該主成分。

假設數據矩陣爲 AA ,每列爲一個樣本點 ai\mathbf{a}_{i} ,對每個樣本進行非線性變換,變換函數爲 Φ\Phi ,注意不是線性變換,即變換函數 Φ\Phi 不是矩陣。令變換後的樣本爲 bi=Φ(ai)\mathbf{b}_{i} = \Phi(\mathbf{a}_{i}) ,數據矩陣爲 BB ,則 B=Φ(A)B = \Phi(A) 。我們對數據矩陣 BB 進行線性 PCA,希望獲得對數據矩陣 AA 非線性變換能力。

數據矩陣 BB 線性PCA變換爲: BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u} ,其中 λ0\lambda \ge 0 是對稱半正定矩陣 BBTBB^T 特徵值,u\mathbf{u} 是對應特徵向量,最大前 kk 個特徵值對應的特徵向量即爲主方向。如果我們知道非線性變換函數 Φ\Phi 的具體函數形式,則可以得到特徵向量,就完美解決了非線性PCA。很可惜,對於具體問題,很難或者幾乎不可能得到 Φ\Phi 的具體函數形式,所以需要另闢蹊徑,這時神奇的核技巧發揮作用。具體如下:

BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u} 兩邊左乘 BTB^T
BTBBTu=λBTu B^TBB^T\mathbf{u} = \lambda B^T\mathbf{u}
K=BTBK=B^TB,單位向量 p=κBTu\mathbf{p} = \kappa B^T\mathbf{u},則 Kp=λpK\mathbf{p} =\lambda \mathbf{p},所以 λ0\lambda \ge 0 是對稱半正定矩陣 KK 特徵值,p\mathbf{p} 是對應特徵向量。注意 BBT,BTBBB^T,B^TB 有相同的特徵值,但特徵向量不同。假設我們通過核技巧,能計算出矩陣 KK ,則我們就能得到 pλ\mathbf{p}、\lambda 。由於 p\mathbf{p} 是單位向量,則 1=pTp=κ2uTBBTu=κ2uTλu=κ2λ1 = \mathbf{p}^T\mathbf{p} = \kappa^2 \mathbf{u}^TBB^T\mathbf{u} = \kappa^2 \mathbf{u}^T\lambda \mathbf{u} = \kappa^2\lambda,所以 κ=1/λ\kappa =1/ \sqrt{\lambda}

現在計算任意樣本 x\mathbf{x} 的主成分即在特徵向量 u\mathbf{u} 上的投影,根據 BBTu=λuBB^T\mathbf{u} = \lambda \mathbf{u}u=1/λBBTu\mathbf{u} = 1/ \lambda BB^T\mathbf{u};因爲 p=κBTu\mathbf{p} = \kappa B^T\mathbf{u}BTu=p/κB^T\mathbf{u} = \mathbf{p}/ \kappa

yiu=xTu=xT1/λBBTu=1/λxTBBTu=1/λxTBp/κ=1λ(xTB)p y^u_i = \mathbf{x}^T\mathbf{u} = \mathbf{x}^T 1/\lambda BB^T\mathbf{u} \\ = 1/ \lambda \mathbf{x}^TBB^T\mathbf{u} \\ = 1/ \lambda \mathbf{x}^TB \mathbf{p}/\kappa \\ = \frac{1}{\sqrt{\lambda}} (\mathbf{x}^TB) \mathbf{p}

則整個樣本在特徵向量 u\mathbf{u} 上的主成分爲
yu=1λBTBp=1λKp=1λλp=λp \mathbf{y}^u = \frac{1}{\sqrt{\lambda}} B^TB \mathbf{p} \\ = \frac{1}{\sqrt{\lambda}} K \mathbf{p} \\ = \frac{1}{\sqrt{\lambda}} \lambda \mathbf{p} \\ = \sqrt{\lambda}\mathbf{p}

所以現在剩下的核心問題是如何計算矩陣 K=BTBK=B^TB ,根據矩陣四種乘法方式,得到矩陣 KK 任意位置的元素爲

Kij=biTbj=ΦT(ai)Φ(aj) K_{ij} = \mathbf{b}^T_{i}\mathbf{b}_{j} \\ = \Phi^T(\mathbf{a}_{i})\Phi(\mathbf{a}_{j})

可見其爲原向量變換後的內積,由於不知道變換函數 Φ\Phi ,所以沒有辦法知道 KijK_{ij} ,又陷入困局。藉助神奇的核函數可以解決此困局,令
Kij=ΦT(ai)Φ(aj)=k(ai,aj) K_{ij} = \Phi^T(\mathbf{a}_{i})\Phi(\mathbf{a}_{j}) \\ = k(\mathbf{a}_{i},\mathbf{a}_{j})
k(ai,aj)k(\mathbf{a}_{i},\mathbf{a}_{j}) 稱爲核函數,只要知道核函數的表達式,就可以繞過變換函數 Φ\Phi ,得到 KijK_{ij} ,終於解決了問題。

核函數應該滿足什麼條件呢?由於需要 Kp=λpK\mathbf{p} =\lambda \mathbf{p}λ0\lambda \ge 0 成立,即要求 KK 是半正定矩陣。所以只要滿足 KK 是半正定矩陣的函數都能作爲核函數,故有無窮多核函數。

最常用的核函數是高斯核,也稱徑向基核函數:k(ai,aj)=exp(aiaj22σ2)k(\mathbf{a}_{i},\mathbf{a}_{j}) = \exp(-\frac{\|\mathbf{a}_{i}-\mathbf{a}_{j}\|^2}{2\sigma^2})σ>0\sigma > 0 爲高斯核的寬度,其次是多項式核:k(ai,aj)=(a+baiTaj)dk(\mathbf{a}_{i},\mathbf{a}_{j}) = (a + b\mathbf{a}^T_{i}\mathbf{a}_{j})^dd1,a0,b>0d \ge 1,a \ge 0, b > 0dd 是多項式的次數。

總結核PCA方法爲:

1、根據核函數,計算核數據矩陣 K=BTB,Kij=k(ai,aj)K=B^TB, K_{ij} = k(\mathbf{a}_{i},\mathbf{a}_{j}),注意 KK 必須是半正定矩陣;

2、矩陣 KK 進行特徵值分解 Kp=λpK\mathbf{p} = \lambda \mathbf{p} ,得到一系列大於零的特徵值(從大到小順序排列) λ1,,λr\lambda_1,\cdots,\lambda_r 及對應特徵向量 p1,,pr\mathbf{p}_1,\cdots,\mathbf{p}_r ,根據能量法則選擇前 kk 個最大主方向 pi\mathbf{p}_i

3、所有樣本在對應主方向 pi\mathbf{p}_i 上的分量:yi=λipi\mathbf{y}_i = \sqrt{\lambda}_i\mathbf{p}_i

細心的讀者可能會發現,對矩陣 KK 進行特徵值分解需要矩陣 BB 是中心化的,即每個變換後向量 bi\mathbf{b}_{i} 要減去平均向量 bˉi\mathbf{\bar b}_{i} 。即使原始向量 ai\mathbf{a}_{i} 是中心化的,但由於非線性變換,也不能保證 bi\mathbf{b}_{i} 是中心化的。對其中心化,讀者可自行推導得到:Kˉ=K1nKK1n+1nK1n\bar K = K - \mathbf{1}_n K - K \mathbf{1}_n + \mathbf{1}_n K \mathbf{1}_n ,其中矩陣 1n\mathbf{1}_n 尺寸爲 n×nn \times n ,元素值均爲 1/n1/nnn 是樣本數量。核PCA方法相應需要修改的地方是第二步,矩陣 KK 進行特徵值分解變爲矩陣 Kˉ\bar K 進行特徵值分解,其它不變。

核PCA方法優點是,如同線性PCA,越大特徵值對應的主成分越重要,能對非線性的點雲進行降維。缺點是,核數據矩陣 KK 的維度爲 n×nn \times nnn 是樣本數量,所以當樣本數量很多時,對其進行特徵值分解比較困難,故不能適應大數據。計算樣本在主方向上的分量的計算量與樣本數量成正比,故樣本數量很多時,計算效率比較低,特徵向量 pi\mathbf{p}_i 尺寸爲 nn ,故樣本數量很多時,存儲量大。

要對非線性點雲的主方向提取獲得好效果,樣本在樣本空間中必須採樣足夠密,以致採樣到的點雲能近似表達點雲構成的完整高維曲面形狀。如果密度不夠,則曲面會存在很多“大洞”,這些“大洞”處的樣本性質是不可能由大洞附近樣本推斷出來。由於點雲是曲面,“大洞”處點雲性質可能與其最接近處的點雲差別很大。爲什麼不採集足夠密的樣本呢,現在不是大數據時代嗎?很可惜,這會遭遇“維數災難”!假設樣本空間維度爲 mm ,樣本分佈在單位立方體內,每維假設均勻等間隔採樣,間隔爲 dd ,則總樣本數是 (1d)m(\frac{1}{d})^m ,當 mm 很大時,比如最常見圖像,語言,語音等,其維度假設最小在 100 左右,實際上會遠大於100,當 1d=1000\frac{1}{d}=1000 時,需要 1030010^{300} 樣本數,宇宙基本粒子總數才 108010^{80} 個!實際上任何機器學習算法,只要涉及非線性,都需要密採樣,都會遭遇“維數災難”問題,只是有的算法比較聰明,能更好地根據附近點雲預測大洞處點雲,此時我們稱算法的泛化性能更好,所謂泛化性能就是算法預測大洞處點雲的能力,或者說舉一反三的能力。泛化性能好的算法可以降低採樣密度。目前對於圖像來說,卷積網絡是最好的算法,語言文字是 Transformer 網絡,其它的不好說。

核PCA方法中核矩陣 KK 僅利用了樣本的核函數信息,丟失了很多其它信息,故其表達樣本的能力有限,泛化性能不強,需要密採樣才能獲得好效果,但密採樣會有巨量樣本,核PCA方法不能處理巨量樣本,故核PCA方法使用受限。只有點雲曲面足夠簡單,如比較平滑接近超平面,則“大洞”處的樣本性質很容易由大洞附近樣本推斷出來,不需要密採樣,樣本數據少,就能獲得好效果。即使點雲曲面足夠簡單,核PCA方法理論上還會遭遇一個最大困難,對於某個具體問題,如何選擇最優核函數沒有指導方法,是高斯核函數更好,還是多項式更好不清楚,或者其它核函數,每種核函數的最優參數是多少也不清楚,需要不斷地試錯,來得到較好的結果。但是核PCA是無監督算法,本身是無法判斷降維效果好壞的,需要結合分類或迴歸問題來判斷,這限制了核PCA應用範圍。鄙人認爲,目前任何機器學習算法只要涉及非線性,理論上都找不到最優參數,需要不斷調參,因爲非線性所對應點雲的曲面形狀可任意,每種曲面理論上都存在最優參數,不同曲面對應的最優參數不同,目前數學還沒有很好的工具對高維點雲進行非線性表達即表達不了任意曲面,所以也就在理論上找不到最優參數。所以大家不要嘲笑深度學習是調參術,不調參不行啊!試問哪個機器學習算法不需調參,只是參數多少而已,但參數過少的算法,效果差強人意。連最簡單(很少非線性)的最小二乘法的正則化參數都難以找到解析最優值。

核函數

PCA的數據矩陣爲 AA ,核PCA的數據矩陣爲 BB ,但由於不知道具體的非線性變換 Φ\Phi ,可以認爲數據矩陣爲核矩陣 KK ,核矩陣共有 nn 列,故每列可以看作樣本非線性變換後的樣本,變換後樣本維度爲 nn 維。樣本 ai\mathbf{a}_i 變換後樣本 bi\mathbf{b}_i 在第 jj 維分量爲 k(ai,aj)k(\mathbf{a}_i,\mathbf{a}_j) 是核函數值,所以樣本屬性完全由核函數決定。採用高斯核函數時,k(ai,aj)=exp(aiaj22σ2)k(\mathbf{a}_{i},\mathbf{a}_{j}) = \exp(-\frac{\|\mathbf{a}_{i}-\mathbf{a}_{j}\|^2}{2\sigma^2}),當樣本在原始空間中歐式距離近時,核值大,距離遠時,核值小。根據奇異值能量守恆定律,可以認爲矩陣元素越大對奇異值貢獻度越大,所以歐式距離近的樣本 aj\mathbf{a}_{j} 對樣本 ai\mathbf{a}_{i} 影響更大,高斯核函數體現遠親不如近鄰原則。參數 σ\sigma 度量了樣本有效作用距離,爲了看清楚其影響,我們執其兩端。假設 σ\sigma 趨近 00 ,則只要距離 aiaj\|\mathbf{a}_{i}-\mathbf{a}_{j}\| 大於 0 ,則核值爲 0,只有距離等於 0 時核值爲 1。所以此時核矩陣爲單位矩陣,每個樣本爲標準單位向量 ei\mathbf{e}_i,分散度最大,所有特徵值均爲 1 ,無法壓縮,核PCA失敗。假設 σ\sigma 趨近正無窮大 ,則只要距離 aiaj\|\mathbf{a}_{i}-\mathbf{a}_{j}\| 是有限值,則核值爲 0,每個樣本爲零向量,所以此時核矩陣爲零矩陣,樣本收縮到原點,無法區分,核PCA也失敗。所以 σ\sigma 不能太小,否則樣本分散太開,所有成分都是同等重要,無法壓縮;也不能太大,否則樣本過度聚集,無法區分,存在一個合適取值區間或最優值。鄙人估計 σ\sigma 較優值應該是:首先計算每個樣本與其最近樣本距離,然後求這些最近距離的平均值, σ\sigma 較優值應該和平均值相當。高斯核函數遠親不如近鄰原則,當點雲曲面接近平面時是合理的,但當曲面高度非線性時是不合理的,生活中的近在眼前遠在天邊就是這個道理,近在眼前表示原空間兩個樣本距離近,遠在天邊表示變換空間兩個樣本距離遠。該理論同樣適用支持向量機核函數, σ\sigma 太小,樣本分散太開,所有樣本都是支持向量,造成過擬合;也不能太大,否則正負樣本過度聚集,無法正確分類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章