0 - 特征值分解(EVD)
奇異值分解之前需要用到特征值分解,回顧一下特征值分解。
假設$A_{m \times m}$是一個是對稱矩陣($A=A^T$),則可以被分解為如下形式,
$$A_{m\times m}=Q_{m\times m}\Sigma_{m\times m} Q_{m\times m}^T=Q_{m\times m}\begin{bmatrix}\lambda_1 & 0 & 0 & 0 \\ 0 & \lambda_2 & 0 & 0 \\ 0 & 0 & \ddots & 0 \\0 & 0 & 0 & \lambda_m \end{bmatrix}Q_{m\times m}^T,$$
其中$Q_{m\times m}$為標准正交矩陣,即$Q_{m\times m}Q_{m\times m}^T=I_{m\times m}$,$\Sigma_{m\times m}$為對角矩陣,$\lambda_i$為特征值。
注意到,特征值分解要求被分解的矩陣必須是實對稱矩陣!
1 - 奇異值分解(SVD)
由於現實遇到的問題中的矩陣很難保證是實對稱矩陣,奇異值分解便可以處理更加廣泛的矩陣。
1.0 - 定義
對於實數矩陣$A_{m\times n}$,可以將其分解為如下形式,
$$A_{m\times n}=U_{m\times m}\Sigma_{m\times n} V_{n\times n}^T=U_{m\times m}\begin{bmatrix}\sigma_1 & 0 & 0 & 0 \\ 0 & \sigma_2 & 0 & 0 \\ 0 & 0 & \ddots & 0 \\ 0 & 0 & 0 & \ddots \end{bmatrix}_{m\times n}V_{n\times n}^T,$$
其中$U_{m\times m}$和$V_{n\times n}$分別為左奇異矩陣和右奇異矩陣,且均為標准正交矩陣($U_{m\times m}U_{m\times m}^T=I_{m\times m}$和$V_{n\times n}V_{n\times n}^T=I_{n\times n}$),$\sigma_i$稱為奇異值,$Q$(特征矩陣)中的每一列$q_i$為$\sigma_i$對應的特征向量。
1.1 - 求解
注意到,有如下性質,
$$AA^T=U\Sigma V^TV\Sigma^T U^T\&=U\Sigma\Sigma^T U^T=U\begin{bmatrix}\sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \ddots\end{bmatrix}_{m\times m}U^T,$$
$$A^TA=V\Sigma^T U^TU\Sigma V^T=V\Sigma^T\Sigma V^T=V\begin{bmatrix}\sigma_1^2 & 0 & 0 & 0\\ 0 & \sigma_2^2 & 0 & 0\\ 0 & 0 & \ddots & 0\\ 0 & 0 & 0 & \ddots\end{bmatrix}_{n\times n}V^T,$$
其中,$AA^T$和$A^TA$均為實對稱矩陣,由上述兩式可得,$\Sigma\Sigma^T$和$\Sigma^T\Sigma$分別為$AA^T$和$A^TA$經過矩陣分解之后的特征值矩陣,因此對特征值矩陣開方即可得到奇異值矩陣。
1.2 - 實踐
SVD的奇異值表示了分解對象中的重要特征,因此可以通過取分解之后的部分特征來重構圖像。對於一張圖分別選前10、50、100、200、300重要的奇異值之后再重構圖像可視化效果如下。
2 - 代碼
特征值分解(EVD)和奇異值分解(SVD)以及實踐的python代碼可見於我的github。