SVD — 奇异向量分解
SVD, 奇异向量分解 (Singular Vector Decomposition). 对于 \(\forall A\) (\(A\) 不一定是方阵),都可以写成: \(AV = U\Sigma\)。 即:
\[\begin{aligned} A = U \Sigma V^T = \vec{u_1}\sigma_1\vec{v_1}^T + \vec{u_2}\sigma_2\vec{v_2}^T + ... + \vec{u_n}\sigma_n\vec{v_n}^T \end{aligned}\]其中:
- U, V 是正定矩阵,即 \(V^{T} = V^{-1}\), \(U^{T} = U^{-1}\).
- \({\sigma_i}^2 = \lambda_i\), \(\lambda_i\) 是 \(AA^T\) 的特征值,当然也是 \(A^TA\) 的特征值。\(\sigma_1 \sigma_2 ... \sigma_k\) 的排列顺序是按特征值的大小降序排列的。
- \(u_i\) 是 \(AA^T\) 的特征向量,是 A 列子空间上的向量。
- \(v_i\) 是 \(A^TA\) 的特征向量,是 A 行子空间上的向量。
要求 A 是非方阵,而组成 \(A^TA, AA^T\) 对称矩阵。
对称矩阵
为什么要是对称矩阵那?因为对称矩阵有以下性质:
- 对称矩阵的特征值都是实数,即:\(\forall \lambda_i \in R\).
- 若特征值 \(\lambda_i \ne \lambda_j\), 则分别对应的特征向量是正交的。
- 其特征值组成的特征向量矩阵 Q 是正交的,即 \(Q^T = Q^{-1}\)
根据上面的两个性质,则可以证明对称矩阵一定可以对角化。
为什么要对角化?
对角化需要矩阵是方阵。当方阵矩阵 A 有 n 个不相关的特征向量时 \(\vec{x_1}, \vec{x_2}, ...\vec{ x_n}\) 组成 S , 则有
\[S^{-1} A S = \Lambda = \begin{bmatrix} \lambda_{1} & & \\ & \ddots & \\ & & \lambda_{n} \end{bmatrix}\]- S 是特性向量矩阵。
- \(\Lambda\) 是特征值矩阵。
使用对角化的矩阵可以来计算矩阵的变化率,和观察矩阵的状态。因为 \(A^k = S \Lambda^{k} S^{-1}\), 利用这个式子我们可以计算如 Fibonacci 数列, Markov 矩阵等。
- Fibonacii 数列的增长率就是
[1 1; 1 0]
矩阵的特征值,约等于 1.618 - Markov 矩阵为 1 的特征值对就的特征向量是稳态特征向量 (steady state), 多次增长后所以列都会趋向于这稳定状态。
关于特征值和特征向量
特征向量是最能表示出矩阵特征的向量。
向量 \(\vec{x}\) 乘上A 不会改变向量的方向,就是 A 的特征向量。即 \(A\vec{x} = \lambda\vec{x}\) 。 基中上 \(\lambda\) 是特征值,\(\vec{x}\) 是特征向量。
对于特征值和特征向量的求解方法是:
- 求解 \((A - \lambda I) = 0\) 求出特征值。
- 求解 \((A - \lambda I) \vec{x} = 0\) 求出特征向量。
下面特征值的两个性质可以作为验证所示的特征值是否正确。
- 和等于迹 \(\sum_{i = 1}^{i = n} \lambda_i = trace(A)\)
- 积等于行列式的值 \(\prod_{i = 1}^{i = n} \lambda_i = det(A)\)
两个定义:
- 当 \(\forall \lambda > 0\) 时,A 称为正定矩阵。
- 当 \(\forall \lambda \geq 0\) 时,A 称为半正定矩阵。
LU 分解
顺便回顾下 LU 分解 (LU Decomposition, LU Factorization)。求解线性方程时,可以把 A 写成 A = LU 的形式。 其中 U 是上三角矩阵,而 L 是下三角矩阵。上面的矩阵通过高斯消元,矩阵的初等变换求得。
- U 第一行的第一个非零元素称为
pivot
。 - L 第一行的最后一个非零元素者是 1.
\(EA = U, A = E^{-1}U = LU\), L 是初等变换矩阵的逆。
SVD 的应用
SVD 可以应用在图像压缩和数据压缩中。 压缩一个图像 (256 x 512) 一个 Naive 的方法的是将相邻的 4 个像素合成一个象素,即压缩比例是 4:1。这种 Naive 的没有经过分析而进行的粗暴压缩方法容易造成很严重的图像失真。
通过 SVD 我们可以将 (256 x 512) 压缩成 (256 + 512) 即压缩比例是 170 : 1。我们可以用 5 个秩为 1 的矩阵来表示。用 SVD 表示出来就是前 5 个最大的特征值。
\[\begin{aligned} A = \vec{u_1}\sigma_1\vec{v_1}^T + \vec{u_2}\sigma_2\vec{v_2}^T + ... + \vec{u_5}\sigma_n\vec{v_5}^T \end{aligned}\]