奇异值分解(SVD)在计算机视觉中有着广泛的应用,如数据降维、推荐系统、自然语言处理等。本文是介绍SVD的数学计算过程,并从SVD的性质说明其应用的原理。
01特征值与特征向量奇异值分解(SVD)与特征分解类似,是将矩阵分解为由奇异值(特征值)和特征向量表示的矩阵之积的方法。因而,在介绍SVD前有必要先介绍特征值、特征向量和特征分解。
由线性代数知识可知特征值与特征向量的定义:
Aα = λα
其中:A是nxn矩阵,λ是特征值,α是特征值对应的n维特征向量。通过线性代数知识可以求解特征值和特征向量
02特征分解特征分解是将矩阵分解为由特征值和特征向量表示的矩阵之积的方法。如大小为 nxn 的矩阵 A 可以用如下特征分解表示:
A=WΣW-1
其中:W是n个特征向量组成的nxn矩阵,Σ是以n个特征值为主对角线的nxn矩阵。一般情况下需要将W矩阵中n个特征向量标准化,即 ||ωi||2=1,或 ωiTωi=1,那么W矩阵为酉矩阵,即 WTW=I,WT=W-1 。则矩阵A的特征分解可以写为:
A=WΣWT
由此可见,我们只需计算矩阵A的特征值和特征向量就能够实现矩阵分解
03奇异值分解上述特征分解是对大小为nxn的矩阵(方阵)的分解,对于非方阵的求解则需要采用SVD。假设A是mxn的矩阵,那么其相应的奇异值分解可表示为:
A=UΣVT
其中:U是AAT矩阵的特征向量组成的mxm的矩阵,Σ是以奇异值 σ 为主对角线的mxn的矩阵,V是ATA矩阵的特征向量组成的nxn的矩阵,U,V均为酉矩阵,即UUT=I,VVT=I。
由此可以看出SVD分解后的矩阵计算方法与特征分解的计算方法略有不同。对于U、V矩阵可分别计算AAT矩阵的特征向量和 ATA 矩阵的特征向量来实现,但 Σ 矩阵包含奇异值 σ ,那么我们需要说明奇异值的计算。
由SVD分解的定义可知:
A=UΣVT
因为V为酉矩阵,即:VTV=I,那么:
AV=UΣVTV=UΣ
定义 V 矩阵由特征向量 νi (称为右奇异向量)组成, U 矩阵由特征向量 μi (称为左奇异向量)组成,那么
Aνi = σi μi
因为 νi 和 μi 可以由前述过程得到,所以通过此式能够得到奇异值,从而构建 Σ 矩阵。注意其中 i 的最大值是min( n, m)。
04SVD性质SVD分解中奇异值 σ 类似于特征分解中的特征值 λ,在 Σ 矩阵中依据 σ 大小排列后,可发现 σ 数值减少趋势明显,通常数值较大的 σ 之和占据了全部奇异值之和的绝大部分比例。因而,我们可以使用前 k 个最大的奇异值和对应的左右奇异向量来近似描述矩阵,即:
Amn = UmmΣmnVnnT ≅ UmkΣkkVknT
其中k远小于n,那么矩阵A可以使用小矩阵表示。因为SVD这个性质,因而SVD可用于降维、去噪等。
END
扫码关注我们臭皮匠快速编程