在实现 SVD 分解之前,我们先来回顾一下 SVD 的主要概念和步骤。如果矩阵 是对称的
方阵,那么我们可以求得这个矩阵的特征值和特征向量,并把矩阵 分解为特征值和特征
向量的乘积。
假设我们求出了矩阵 的 个特征值 ,以及这 个特征值所对应的
特征向量 ,那么矩阵 可以表示为:
其中, 是这 个特征向量所张成的 维矩阵,而 是这 个特征值为主对角线
的 维矩阵。这个过程就是特征分解(Eigendecomposition)。
如果我们会把 的这 个特征向量进行标准化处理,那么对于每个特征向量 ,就有
,而这表示 ,此时 的 个特征向量为标准正交基,满足
, 也就是说, 为酉矩阵,有 。这样一来,我们就可以把特征分
解表达式写作:
可是,如果矩阵 不是对称的方阵,那么我们不一定能得到有实数解的特征分解。但是,
SVD 分解可以避免这个问题。
我们可以把 的转置 和 做矩阵乘法,得到一个 维的对称方阵 ,并
对这个对称方阵进行特征分解。分解的时候,我们得到了矩阵 的 个特征值和对应
的 个特征向量 ,其中所有的特征向量叫作 的右奇异向量。通过所有右奇异向量我
们可以构造一个 维的矩阵 。
类似地,如果我们把 和 做矩阵乘法,那么会得到一个 维的对称方阵
。由于 也是方阵,因此我们同样可以对它进行特征分解,并得到矩阵 的
个特征值和对应的 个特征向量 ,其中所有的特征向量向叫作 的左奇异向量。通
过所有左奇异向量我们可以构造一个 的矩阵 。
现在,包含左右奇异向量的 和 都求解出来了,只剩下奇异值矩阵 了。 除了对
角线上是奇异值之外,其他位置的元素都是 0,所以我们只需要求出每个奇异值 就可以
了。之前我们已经推导过, 可以通过两种方式获得。第一种方式是计算下面这个式子:
评论