举例来说:7是这三个component加起来的结果,假设7就是x的话,c_1=1,c_2=0,c_3=1,c_4=0,c_5=1,你可以用c_1,c_2,...c_k来表示一张image。假设component比pixel的数目少的话,那么这个描述是比较有效的。7是1倍的u^1,1倍u^2,1倍的u^5所组成的,所以7是一个vector,它的第一维,第三维,第5维是1.
在PCA中我们想说:我们要找一个matrix W,x乘以matrix W就得到了z,把W的每一个row写出来就是[w_1,w_2,...,w_k],x乘上一个[(w_1)^T,(w_2)^T,...(w_k)^T],以此类推。那么说:是[w_1,w_2,...,w_k]是covariance matrix的eigenvector,事实上你要解这个式子L=mi_n(u^1,...u^k)\sum \left \| (x-\bar{x}) -(\sum_{k=1}^{k}c_ku^k)\right \|,找出u^1,...u^k。由PCA找出的这个解w^1,...w^k就是可以让L最小化
x-\bar{x}是一个vector(把这个vector拿出来),u^1,u^2...是一排vector(把它排起来,排起来就是一个matrix),columns的数目是K个,把这些component weight排成一排变成一个vector,vector乘以matrix变成另一个vector。我们不只是有一笔data,x^2-\bar{x}是另外一个黄色的vector,这个vector(c_1^2,c_2^2,....)乘以matrix u^2等于另一个黄色的vector,依次类推。
那我们把所有的data用这个式子来表示的话,这样就会得到一个matrix,这个matrix的cloumns等于data的数目(你有1万笔data,cloumns=10000)。现在\left\{\begin{matrix} ... &... \\ u^1 & u^2 \\ ...& ... \end{matrix}\right.乘以这个matrix \left\{\begin{matrix} c_1^1 &c_1^2 \\ c_2^1 & c_2^2 \\ ...& ... \end{matrix}\right.跟这个matrix越接近越好,所以你要minimize左边两个matrix跟右边这个matrix之间的差距是会被minimize的,也就是说:用SVD提供给我们的matrix拆解方法,拆成这是三个matrix相乘后,跟左边的matrix是最接近的。
如果我们今天用SVD将X拆成这三个matrix相乘,那右边三个matrix相乘的结果是最接近左边这个matrix的,那解出来的结果是什么样呢?其中U这个matrix的 K columns其实就是一组orthonormal vector,这组orthonormal vector是XX^T的eigenvector,U总共有K个orthonormal vector,这K 个orthonormal vector对应到XX^T最大的k个eigenvalue的eigenvector。
你会发现,这个XX^T就是covariance matrix,PCA之前找出的W就是covariance matrix的eigenvector。而我们这边说做SVD,解出来U的每个column就是covariance matrix的eigenvector,所以这个U得出的解就是PCA得到的解。所以我们说:PCA做的事情就是:你找出来的那些W其实就是component。
linear combinarion做的事情你可以想成用neural network来表示它,假设我们的x-\bar{x}就是一个vector(这边写做三维的vector),假设现在只有2个component(k=2),那我们先算出c_1,c_2,c_1=(x-\bar{x})(x-\bar{x})的每一个component乘上w^1的每一个component,接下来你就得到了c_1。(x-\bar{x}是neural network的input,c_1是一个neural(linear neural ),w^1_1,w^1_2,w^1_3是weight,)。c_1乘以w^1(c_1乘上w_1的第一维(w_1^1)得到一个value,乘上w_1的第二维(w_2^1)得到一个value,乘上w_1的第三维(w_3^1)得到一个value)。接下来再算一下c_2,c_2乘以w^2的结果和之前的加起来就是最后的output,\hat{x_1},\hat{x_2},\hat{x_3}就是\hat{x}。
接下来就是minimize error,我们要\hat{x}跟x-\bar{x}越接近越好(也就是这个output跟x-\hat{x}越接近越好),那你可以发现说PCA可以表示成一个neural network,这个neural network只有一个hidden layer,这个hidden layer是linear activation function。那现在我们train 这个neural network,是要input一个东西得到output,这个input跟output越接近越好。这个东西就叫做Autoencode
这边就有一个问题,假设我们现在这个weight,不是用PCA的方法去找出w^1,w^2,...w^k。而是兜一个neural network,我们要minimize error,然后用Gradient Descent去train得到的weight,那就觉得你得到的结果会跟PCA得到的结果一样吗?这其实是会一样的(neural network没有办法保证是垂直的,你会得到另外一组解)。所以在linear的情况下,或许你就想要用PCA来找这个W比较快的,你用neural network是比较麻烦的。但是用neural network的好处是:可以deep。