2.7特征分解
特征分解(superimposition)是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。
方阵A的特征向量(eigenvector)是指与A相乘后相当于对该向量进行缩放的非零向量v:
Av = λv.
标量λ被称为这个特征向量对应的特征值(eigenvalue)。类似的我们也可以定义左特征向量(left eigenvector)vTA=λvT,但是通常我们更关注右特征向量(right eigenvector)
如果v是A的特征向量,那么任意缩放后的向量sv(s∈R,s≠0)也是A的特征向量。此外,sv跟v有相同的特征值。基于这个原因,通常我们只考虑单位特征向量。
假设A有n个线性无关的特征向量{v1,....,vn},对应着特征值{λ1,...,λn}。我们将特征向量连接成一个矩阵,使每一列是一个特征向量:V=[v1,....,vn],类似的,我们也可以将特征值连接成一个向量λ=[λ1,...,λn].因此A的特征分解(eigndecomposition)也可以记作
A=Vdiag(λ)V-1
不是每个矩阵都可以分解成特征向量和特征值。在某些情况下,特征分解存在,但是会涉及到复数而非实数。(本书只讨论简单分解的矩阵)
每个实对称矩阵都可以分解成实特征向量和实特征值:
其中Q是A的特征向量组成的正交矩阵,Λ是对角矩阵。特征值Λi,i对应的特征向量是矩阵Q的第i列,记作Q:,i。因为Q是正交矩阵,我们可以将A看成是沿vi方向延展λi倍的空间。如图2.3所示:
虽然任意一个实对称矩阵A都有特征分解,但是特征分解可能并不唯一。
所有特征值都是整数的矩阵被称为正定(positive definite);
所有特征值都是非负数的矩阵被称为半正定(positive semidifinite)。
所有特征值都是负数的矩阵被称为负定(negative definite);
所有特征值都是非正数的矩阵被称为半负定(negative semidefinite)。
**
矩阵是奇异的当且仅当含有零特征值。
实对称矩阵的特征分解也可以用来优化二次方程f(x)=xTAx,其中限制xTx=1。
当x等于A的某个特征向量的时候,f将返回对应的特征值。在限制条件下,函数f的最大值是最大特征值,最小值是最小特征值。(这个推理可用于证明第12节PCA)
(以下证明是一个前辈笔记上的,有想要的,请回复下,介于可能是qq群广告就不写在上面了)
拉格朗日乘子法证明:
argmin(UTZU) subject to UTU=1.
U=(u1,u2....un)
Z=[X1,X2....Xn]
Xi=(xi1,xi2,....xin)
原式等价为:
求其偏导:
式子1:
式子2:
思考:
ZU = βU,β是Z归一化的特征向量,β是对应的特征值
对比式子1,可得β=-λ
所以求解U只要求Z的特征向量,并且β(特征值)越大,所求值越大。
证明:
即β越大,其结果越大。
又因为Z是对称矩阵,其不同特征值的特征向量互相正交。
2.8奇异值分解
除了特征值分解还有另外一种分解矩阵的方法,被称为奇异值分解(singular value decompositionn,SVD),将矩阵分解为奇异向量(singular vector)和奇异值(singular value)。每个实数矩阵都有奇异值分解,但是不一定有特征分解。
奇异值分解将矩阵A分解为三个矩阵的乘积:
A=UDVT
假设A是一个m x n的矩阵,那么U是一个m x m的矩阵,D是m x n的矩阵,V是一个n x n的矩阵。
矩阵U和V被定义为正交矩阵,而矩阵D被定义为对角矩阵(不一定是方阵)。
对角矩阵D对角线上的元素被称为矩阵A的奇异值(singular value)。矩阵U的列向量被定义为左奇异向量(left singular vector),矩阵V的列向量被称为右奇异向量(right singular vector)。
事实上,我们可以用与A相关的特征分解去解释A的奇异值分解。A的左奇异向量是AAT的特征向量。A的右奇异向量是ATA的特征向量。A的非零奇异值是ATA特征值的平方根,同时也是AAT特征值的平方根。
2.9Moore-Penrose伪逆
对于非方阵而言,其逆矩阵没有定义。
例如:
Ax = y
这样的方程,我们用等式两边左乘左逆B,我们得到:
x=By
取决于问题的形式,我们可能武打设计一个唯一的映射将A映射到B,如果矩阵A的行数大于列数,那么上述方程可能没有解,如果A的列数大于行数,那么上述矩阵可能有多个解。
Moore-Penrose伪逆(Moore-Penrose pesudoinverse)使我们在这类问题上取得一定进展。
矩阵A的伪逆定义为:
计算伪逆的实际算法没有基于这个定义,而是使用下面的公式:
其中,矩阵U,D和V是矩阵A奇异值分解后得到的矩阵,对角矩阵D的伪逆D+是其非零元素取倒数后再转置得到的。
2.10迹运算
迹运算返回矩阵对角元素的和:
迹运算的使用原因很多,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号,可以清楚的表达。
用及运算表示表达式,我们可以使用很多有用的等式巧妙地处理表达式。例如:
多个矩阵相乘得到的方阵的迹,将这些矩阵的最后一个挪到最前面之后相乘的迹是相同的:
即使循环置换后矩阵乘积的矩阵形状变了,其迹运算的结果仍然不变。
另一个有用的事实,对于标量,迹运算后仍然是他自己:a=Tr(a)。
2.11行列式
行列式,记作det(A),是一个将方阵A映射到实数的函数。
行列式等于矩阵特征值的乘积。
行列式的绝对值可以用来衡量矩阵参与矩阵乘法后空间扩大或者缩小了多少。
如果行列式为0,那么空间至少沿着某一维完全收缩了。
如果行列式为1,那么这个转换保持空间体积不变。
2.12主成分分析
主成分分析(principal components analysis,PCA)是一个简单的机器学习算法。
假设Rn空间中我们有m个点{x1,...xm},我们希望对这些数据进行有损压缩。有损压缩表示我们使用更少的内存,但是损失一些精度去存储这些数据。
一种编码这些点的方式是用低纬表示,对于每一个xi∈Rn,会有一个对应的编码向量ci∈RL.如果l
PCA有我们选择的解码函数而定,为了简化解码器,我们使用矩阵乘法将编码映射回Rn,即g(c)=Dc,其中D∈Rn x l是定义解码的矩阵。
目前看来,问题会有很多解,因为我们按比例缩小所有点对应的编码向量ci,那么我们只需要按比例放大D:,i,既可保持结果不变,为了使所有的问题有唯一解,我们限制D中所有的列向量都有单位范数。
计算这个解码器的最优编码可能是一个困难的问题,为了使编码问题简单一些,PCA限制D的列向量彼此正交(注意:除非l=n,否则严格意义上D不是一个正交矩阵)。
为了将这个基本思想编程我们能够实现的算法,首先我们需要明白如何根据每一个输入x得到一个最优编码c*,一种方法是最小化原是输入向量x和重构向量g(c*)的距离。我们使用范数来描述他们之间的距离。在PCA算法中,我们使用L2范数:
我们也可以使用平方L2范数来代替L2范数,因为两者在相同的值c上取得最小值,这是因为L2范数是非负的,并且平方运算在非负值上是单调递增的。
该最小化函数可以简化为:
(因为标量g(c)Tx的转置等于其自身)
因为第一项xTx不依赖于c,我们可以忽略他,得到如下优化目标:
进一步,我们带入g(c)的定义:
我们可以通过向量微积分来求解这个最优化问题:
这使得算法很高效:最优编码x只需要一个矩阵-向量乘法操作。为了编码向量,我们使用编码函数:
进一步使用矩阵乘法,我们也可以定义PCA重构操作:
(2.67)
接下来,我们需要挑选编码矩阵D。要做到这一点,我们回顾最小化输入和重构之间L2距离的这个想法。因为我们用相同的矩阵D对所有点进行编码,我们不能再鼓励看每个点。反而我们必须最小化所有维度和所有店上的误差矩阵的Frobenius范数:
Subject to DTD = Il.
为了推导用于寻求D*的算法,我们首先考虑l=1的情况。这种情况下,D是一个单一的向量d。
我们将(2.67)代入(2.68),简化D为d,问题简化为;
Subject to ||d||2=1.
上述式子是直接带入的考虑到标量的转置和自身相等,我们也可以写作:
用矩阵代替求和:
(这儿推导用word写太费劲了,就不一一敲了)
花书是一本主讲深度学习的书,所以这部分讲的有点粗糙,我推荐一本线代书籍:华章数学 线性代数。并非是广告,挺好的一本书。