李宏毅機器學習課程筆記-15.2無監督學習之主成分分析

主成分分析即Principal Component Analysis,PCA,它是一種線性降維方法。

主成分分析(1)

PCA即主成分分析(Principe Component Analysis)。PCA假設降維函數是一個linear function,即輸入\(x\)和輸出\(z\)之間是linear transform \(z=Wx\),而PCA要做的就是根據很多個\(x\)找出\(W\)

PCA for 1-D

爲了簡化問題先假設輸出\(z=W\cdot x\)是1個標量(scalar),其中\(W\)是1個行向量(row vector)、\(x\)是1個列向量。若假設\(W\)的模(長度)\(||W||_2=1\),此時\(z\)就是\(x\)\(W\)方向上的投影。

我們希望所有\(x\)\(W\)方向上投影得到的所有\(z\)分佈越大越好,也就是說在投影之後不同樣本之間的區別仍然是可以被看得出來的,所以投影結果的variance越大越好,即我們希望找到一個使得投影結果的variance較大的\(W\),variance的計算公式爲\(Var(z)=\frac{1}{N}\sum\limits_{z}(z-\bar{z})^2, ||W||_2=1\),其中\(\bar z\)是所有\(z\)的平均值。

PCA for n-D

如果輸出\(z=Wx\)是1個包含\(n\)個元素的向量(\(n\)需要我們自己確定),其中\(W\)是1個matrix、\(w^i\)\(W\)中的第\(i\)個行向量(\(||w^i||_2=0,1\leq i\leq n\))、\(x\)是1個列向量,則\(z_i=w^i\cdot x\)表示\(x\)在方向\(w^i\)上的投影。

注:\(w^i\)必須相互正交,即\(W\)爲正交矩陣(Orthogonal Matrix),否則最終找到的\(w^i\)實際上是相同的值。

拉格朗日乘子法

如何求出PCA中的參數\(W\)呢?實際上已經有相關庫可以直接調用PCA,此外也可以用神經網絡描述PCA算法然後用梯度下降的方法來求解,這裏主要介紹用拉格朗日乘子法(Lagrange multiplier)求解PCA的數學推導過程。

注:\(w^i\)\(x\)均爲列向量,下文中類似\(w^i\cdot x\)表示的是矢量內積,而\((w^i)^T\cdot x\)表示的是矩陣相乘。

計算\(w^1\)

結論:\(w^1\)\(S=Cov(x)\)這個matrix中的特徵向量,對應最大的特徵值\(\lambda_1\)

首先計算出\(\bar{z_1}\)

\[\begin{split} &z_1=w^1\cdot x\\ &\bar{z_1}=\frac{1}{N}\sum z_1=\frac{1}{N}\sum w^1\cdot x=w^1\cdot \frac{1}{N}\sum x=w^1\cdot \bar x \end{split} \]

\(Var(z_1)\)越大越好,所以我們要使得\(Var(z_1)\)最大:

\[\begin{split} Var(z_1)&=\frac{1}{N}\sum\limits_{z_1} (z_1-\bar{z_1})^2\\ &=\frac{1}{N}\sum\limits_{x} (w^1\cdot x-w^1\cdot \bar x)^2\\ &=\frac{1}{N}\sum (w^1\cdot (x-\bar x))^2\\ \end{split} \]

因爲\((a\cdot b)^2=(a^Tb)^2=a^Tba^Tb=a^Tb(a^Tb)^T=a^Tbb^Ta\),所以:

\[\begin{split} Var(z_1)&=\frac{1}{N}\sum (w^1\cdot (x-\bar x))^2\\ &=\frac{1}{N}\sum(w^1)^T(x-\bar x)(x-\bar x)^T w^1\\ &=(w^1)^T\frac{1}{N}(\sum(x-\bar x)(x-\bar x)^T) w^1\\ \end{split} \]

又因爲\(Cov(x)=\frac{1}{N}\sum(x-\bar x)(x-\bar x)^T\),並令\(S=Cov(x)\),所以:

\[\begin{split} Var(z_1)&=(w^1)^T\frac{1}{N}(\sum(x-\bar x)(x-\bar x)^T) w^1\\ &=(w^1)^T Cov(x)w^1\\ &=(w^1)^TSw^1 \end{split} \]

在使得\(Var(z_1)=(w^1)^TCov(x)w^1\)最大的同時,還有一個約束條件\(||w^1||_2=(w^1)^Tw^1=1\),否則\(w^1\)無限大就可以使得\(Var(z_1)\)但這並沒有意義。

因爲\(S=Cov(x)\),所以S是對稱的(symmetric)、半正定的(positive-semidefine)、所有特徵值非負的(non-negative eigenvalues)。

使用拉格朗日乘數法,利用目標和約束條件構造函數:\(g(w^1)=(w^1)^TSw^1-\alpha((w^1)^Tw^1-1)\),對\(w^1\)中每個元素求偏微分並使爲0:

\[\begin{split} &\partial g(w^1)/\partial w_1^1=0\\ &\partial g(w^1)/\partial w_2^1=0\\ &\partial g(w^1)/\partial w_3^1=0\\ &... \end{split} \]

整理上式,可以得到:\(Sw^1=\alpha w^1\),其中\(w^1\)\(S\)的特徵向量(eigenvector),但滿足\((w^1)^Tw^1=1\)的特徵向量\(w^1\)有很多,我們要找的是使得\((w^1)^TSw^1\)最大的那個\(w_1\),於是可得\((w^1)^TSw^1=(w^1)^T \alpha w^1=\alpha (w^1)^T w^1=\alpha\),因此使得\((w^1)^TSw^1\)最大就變成了使得\(\alpha\)最大,即\(S\)的特徵值\(\alpha\)最大時對應的那個特徵向量\(w^1\)就是我們要找的\(w^1\)

計算\(w^2\)

在計算\(w^2\)時比計算\(w^1\)時多了一個限制條件:\(w^2\)必須與\(w^1\)正交(orthogonal)。

所以求解目標爲:使得\((w^2)^TSw^2\)最大,約束條件爲:\((w^2)^Tw^2=1,(w^2)^Tw^1=0\)

結論:\(w^2\)也是\(S=Cov(x)\)這個matrix中的特徵向量,對應第二大的特徵值\(\lambda_2\)

與計算\(w^1\)一樣使用拉格朗日乘子法求解,定義\(g(w^2)=(w^2)^TSw^2-\alpha((w^2)^Tw^2-1)-\beta((w^2)^Tw^1-0)\),然後對\(w^2\)的每個元素做偏微分:

\[\begin{split} &\partial g(w^2)/\partial w_1^2=0\\ &\partial g(w^2)/\partial w_2^2=0\\ &\partial g(w^2)/\partial w_3^2=0\\ &... \end{split} \]

整理上式可得\(Sw^2-\alpha w^2-\beta w^1=0\),該式兩側同乘\((w^1)^T\)得到\((w^1)^TSw^2-\alpha (w^1)^Tw^2-\beta (w^1)^Tw^1=0\),其中\(\alpha (w^1)^Tw^2=0,\beta (w^1)^Tw^1=\beta\)

由於\((w^1)^TSw^2\)是vector×matrix×vector=scalar所以在外面套一個transpose不會改變其值,並且S是對稱的即\(S^T=S\),所以:

\[\begin{split} (w^1)^TSw^2&=((w^1)^TSw^2)^T\\ &=(w^2)^TS^Tw^1\\ &=(w^2)^TSw^1 \end{split} \]

已知\(w^1\)滿足\(Sw^1=\lambda_1 w^1\),所以:

\[\begin{split} (w^1)^TSw^2&=(w^2)^TSw^1\\ &=\lambda_1(w^2)^Tw^1\\ &=0 \end{split} \]

因此有\((w^1)^TSw^2=0\)\(\alpha (w^1)^Tw^2=0\)\(\beta (w^1)^Tw^1=\beta\),又根據\((w^1)^TSw^2-\alpha (w^1)^Tw^2-\beta (w^1)^Tw^1=0\),所以\(\beta=0\)

此時\(Sw^2-\alpha w^2-\beta w^1=0\)就轉變成了\(Sw^2-\alpha w^2=0\)\(Sw^2=\alpha w^2\)。由於\(S\)是對稱的,因此在與\(w_1\)不衝突的情況下,這裏\(\alpha\)選取第二大的特徵值\(\lambda_2\)時,可以使\((w^2)^TSw^2\)最大。

decorrelation

可知\(z=W\cdot x\),有一個神奇的事情是\(Cov(z)=D\),即z的covariance是一個對角矩陣(diagonal matrix)。

推導過程如下:

img

PCA可以讓降維後數據中不同dimension之間的covariance變爲0,即降維後數據中不同feature之間是沒有correlation的,這樣的好處是減少feature之間的聯繫從而減少model所需的參數量

如果使用PCA將原數據降維之後再給其他model使用,那這些model就可以直接假設數據的各個維度不相關,這時model得到簡化、參數量大大降低,相同的數據量可以得到更好的訓練結果,從而可以避免overfitting的發生。

主成分分析(2)

Reconstruction Component

假設我們現在考慮MNIST手寫數字識別,可以假設一個數字圖片由一些類似於筆畫的component(本質上是一個28×28的vector)組成,將這些component記做\(u_1,u_2,u_3,...\),我們把\(K\)個component加權求和就可以組成一個數字圖片:\(x≈c_1u^1+c_2u^2+...+c_Ku^K+\bar x\),其中\(x\)是一張數字圖片,\(\bar x\)是所有數字圖片的平均值。

假設\(K\)個component已知,我們就可以用\(\left [\begin{matrix}c_1\ c_2\ c_3...c_k \end{matrix} \right]^T\)來表示一張數字圖片,如果\(k\)遠小於圖片像素數量,那這種表示方法就可以有效降維。

那我們要如何找出這\(K\)個component呢?我們要找到\(K\)個vector使得\(x-\bar x\)\(\hat x\)越接近越好,其中\(\hat x=c_1u^1+c_2u^2+...+c_Ku^K\)

所以目標是使得Reconstruction Error \(||(x-\bar x)-\hat x||\)最小,即\(L=\min\limits_{u^1,...,u^k}\sum||(x-\bar x)-(\sum\limits_{i=1}^k c_i u^i) ||_2\)

回顧PCA中\(z=W\cdot x\),實際上我們通過PCA最終解得的\(W=\{w^1,w^2,...,w^k\}\)就是使Reconstruction Error最小化的\(K\)個vector\(\{u^1,u^2,...,u^k\}\),簡單證明如下。

如下圖和下式所示,用下圖中的矩陣相乘來表示所有的\(x^i-\bar x≈c_1^i u^1+c_2^i u^2+...\),其中\(x^i\)指第\(i\)張圖片,目標是使\(\approx\)兩側矩陣之間的差距越小越好。

img

\[\begin{split} &x= \left [ \begin{matrix} u_1\ u_2\ ...\ u_k \end{matrix} \right ]\cdot \left [ \begin{matrix} c_1\\ c_2\\ ...\\ c_k \end{matrix} \right ]\\ \\ &\left [ \begin{matrix} x_1\\ x_2\\ ...\\ x_n \end{matrix} \right ]=\left [ \begin{matrix} u_1^1\ u_2^1\ ... u_k^1 \\ u_1^2\ u_2^2\ ... u_k^2 \\ ...\\ u_1^n\ u_2^n\ ... u_k^n \end{matrix} \right ]\cdot \left [ \begin{matrix} c_1\\ c_2\\ ...\\ c_k \end{matrix} \right ]\\ \end{split} \]

使用SVD將每個matrix \(X_{m×n}\)都拆成matrix \(U_{m×K}\)\(\Sigma_{K×K}\)\(V_{K×n}\)的乘積,其中\(K\)爲component的數目。使用SVD拆解後三個矩陣相乘的結果是跟等號左邊的矩陣\(X\)最接近的,此時\(U\)就對應着\(u^i\)形成的矩陣、\(\Sigma\cdot V\)就對應着\(c_k^i\)形成的矩陣。

根據SVD的結論,組成矩陣\(U\)\(k\)個列向量(標準正交向量,orthonormal vector)就是\(XX^T\)最大的\(k\)個特徵值(eignvalue)所對應的特徵向量(eigenvector),而\(XX^T\)實際上就是\(x\)的covariance matrix,因此\(U\)就是PCA的\(k\)個解。

PCA尋找\(W\)的過程,實際上就是把\(X\)拆解成能夠使得Reconstruction Error最小的\(k\)個component的過程,PCA中要找的投影方向\(w^i\)就相當於恰當的component \(u^i\),PCA中投影結果\(z^i\)就相當於各個component各自的權重\(c_i\)

NN for PCA

由上可知,PCA找出來的\(\{w^1,w^2,...,w^k\}\)就是\(K\)個component \(\{u^1,u^2,...,u^k\}\)\(\hat x=\sum\limits_{k=1}^K c_k w^k\),我們要使\(\hat x\)\(x-\bar x\)之間的差距越小越好。我們已經通過SVD找到了\(w^k\)的值,而對每個不同的樣本\(x\)都有一組不同的\(c_k\)值。

在PCA中我們已經證得,\(\{w^1,w^2,...,w^k\}\)\(k\)個vector是標準正交化的(orthonormal),因此\(c_k=(x-\bar x)\cdot w^k\),這個時候我們就可以使用神經網絡來表示整個過程,如下圖所示。

img

如上圖所示,假設\(x\)是3維向量,要投影到2維的component上,即\(K=2\)\(c_k=(x-\bar x)\cdot w^k\)類似於神經網絡,\(x-\bar x\)相當於一個神經元的3維輸入,而\(w^k_1\)\(w^k_2\)\(w^k_3\)則是該神經元的權重,而\(c_k\)則是這個神經元的輸出。得到\(c_1\)\(c_2\)之後,再讓它乘上\(w^1\)\(w^2\)然後求和得到\(\hat x\)。此時,PCA就被表示成只含一層hidden layer的神經網絡,且這個hidden layer是線性的(沒有激活函數),訓練目標是讓這個神經網絡的輸入\(x-\bar x\)與輸出\(\hat x\)越接近越好,這就是Autoencoder

注:PCA求解出的\(w^i\)與上述神經網絡所解得的\(w^i\)是不一樣的,因爲PCA解出的\(w^i\)是相互垂直的(orgonormal),而上述神經網絡的解無法保證\(w^i\)相互垂直,神經網絡無法做到Reconstruction Error比PCA小。因此,在linear情況下直接用PCA找\(W\)遠比用神經網絡的方式更快速方便,神經網絡的好處是它可以使用不止一層的hidden layer而可以做Deep Autoencoder。

PCA的缺點

  • PCA是無監督的,沒有使用label
  • PCA是線性的,而有時需要non-linear transformation

What happens to PCA

觀察PCA對MNIST和Face的降維結果(見原視頻),我們發現找到的component好像並不算是component。比如MNIST實驗中PCA找到的是幾乎完整的數字雛形,而Face實驗中找到的是幾乎完整的人臉雛形,而我們想象中的組件應該是類似於橫折撇捺、眼睛鼻子眉毛等等。

原因是這樣的:\(x\approx c_1u^1+c_2u^2+...+c_Ku^K+\bar x\),其中\(c_i\)是可正可負的,所以component不僅可以相加還可以相減,於是PCA得到的組件並不是我們想象中的那樣,但通過這些組件的加加減減肯定可以獲得我們想象中的基礎的component。

如果想要直接得到類似筆畫的基礎component,就要使用NMF(non-negative matrix factorization,非負矩陣分解)

非負矩陣分解

如果想要直接得到類似筆畫的基礎component,就要使用NMF(non-negative matrix factorization,非負矩陣分解)

PCA可以看成是對原始矩陣\(X\)做SVD進行矩陣分解,但並不保證分解後矩陣的正負。實際上在進行圖像處理時,如果部分component的matrix包含一些負值的話,如何處理負的像素值也會成爲一個問題(可以做歸一化處理,但比較麻煩)。

而NMF的基本思路是,強迫使所有component和它的權重都必須是正的,也就是說所有圖像都必須由組件疊加(不可相減)得到

相比於PCA,我們可以發現NMF對MNIST和Face的降維結果(見原視頻)更接近於我們想象中的基本的component。

其它PCA版本

降維的方法有很多,這裏再列舉一些與PCA有關的方法:

  • Multidimensional Scaling (MDS) [Alpaydin, Chapter 6.7]

    MDS不需要把每個data都表示成feature vector,只需要知道特徵向量之間的distance,就可以做降維,PCA保留了原來在高維空間中的距離,在某種情況下MDS就是特殊的PCA

  • Probabilistic PCA [Bishop, Chapter 12.2]

    PCA概率版本

  • Kernel PCA [Bishop, Chapter 12.3]

    PCA非線性版本

  • Canonical Correlation Analysis (CCA) [Alpaydin, Chapter 6.9]

    CCA常用於兩種不同的data source的情況,比如同時對聲音信號和脣形的圖像進行降維

  • Independent Component Analysis (ICA)

    ICA常用於source separation,PCA找的是正交的組件,而ICA則只需要找“獨立”的組件即可

  • Linear Discriminant Analysis (LDA) [Alpaydin, Chapter 6.8]

    LDA是supervised的方式


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


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