整体或局部: 图形计算基础,SVD方法奇异分解还不了解吗?

举报
码乐 发表于 2023/11/16 11:18:34 2023/11/16
【摘要】 7 写在前面侠骨耐风霜, 雄心吞宇宙。浩然一点气, 清风万里飘。磨磨唧唧终于到达这里。 我们经历了哪些,从方程组消元到方阵行列式变换最简型,到CR分解块运算。现在是矩形矩阵特征值。 也就是 奇异值(singular values)。我们仍然需要解决零空间 A->x = 0 问题。 7.0 奇异值和奇异矩阵注意:有些书有 奇异矩阵,这 与 奇异值 不是同一个东西。我的理解是 奇异值 是 矩形...

7 写在前面

侠骨耐风霜, 雄心吞宇宙。
浩然一点气, 清风万里飘。

磨磨唧唧终于到达这里。 我们经历了哪些,从方程组消元到方阵行列式变换最简型,到CR分解块运算。

现在是矩形矩阵特征值。 也就是 奇异值(singular values)。

我们仍然需要解决零空间 A->x = 0 问题。

写在前面

SVD算法大量在图形计算中应用。这是类似于前面讲过的一种矩阵分解算法,可以将一个矩阵分解为三个矩阵:U、Σ和V。U和V是正交矩阵,Σ是奇异值矩阵。 正交分解方法在后续章节将会陆续讲解。

降维PCA应用

图形特征提取

图形压缩

这里先讲解如何手算一个矩阵的奇异分解,并在最后介绍现在常用的图形计算领域。

7.0 奇异值和奇异矩阵

注意:有些书有 奇异矩阵,这 与 奇异值 不是同一个东西。

我的理解是 奇异值 是 矩形矩阵的特征值,为了与方阵的特征值区别,专有名称为 奇异值。

奇异矩阵是矩阵,只是没有逆矩阵,所以称为 奇异矩阵。

如果矩阵A为奇异矩阵,那么A的长度 |A| = 0

相对奇异矩阵的是满秩矩阵,非奇异矩阵。 |A| != 0

矩形矩阵可能是奇异的或非奇异的,但是都可以尝试获取奇异值。
因为奇异值是一种近似值,类似最小二乘解(这将在下一部分了解)。

设 S = S^T 的特征值 与 正交特征向量,它有 X^t*Y = 0,首先它有如下事实

		S_x = λX   
		S_y = αY

		λ != α   有 S^t = S

证明正交性 X^t * y = 0

	 (1) 转置到 X^t*S^t = λX^t 和使用 S^t = S 
			X^t*S_y = λX^t*y

	 (2) 也可以 乘以 S_y = αY 
	       X^t*S_y = αX^t*Y

	 (3) 现在 λX^t*Y = αX^t*Y 
             由于 λ != α 所以 X^t*Y 必须为 0 

对于对角矩阵 (2  1    上下对角线元素相同, 每一个对称矩阵都是正交矩阵。
            1  2)

    	S[q1 ... qr] = [λ*q1 ... λn*qn] = [q1 ... qn] (λ1 ... 0
    		                                           0 λ2 ... 0
    		                                           0 0 ... λn)

这表示 SQ = QA

      S = Q ⋀ Q^-1  = Q ⋀ Q^t # 合取
    
      S = Q ⋀ Q^t 

这等同于求和 λ1q1q1^t + … + λrqrqn^t 为秩为1的矩阵

    S = A^t*A 这里将取得奇异值

所以奇异分解公式: A = UΣV^t 是对以下方程的求和

    	α1U1V1^t + ... + αrUrVr^t  (秩为1的矩阵)

奇异值 α1 … αr 存在于求和过程中,奇异向量在 U 和 V中
那么对于非对称矩阵,也就是矩形矩阵

    	A[X1 ... Xn] = [λ1X1 ... λrXr]
    	AX = X⋀

n阶为独立特征向量

    	A = X ⋀ X^-1

这里A^2 和 A^3 拥有相同的特征向量,类似A

    		A^2*X = A(λX) = λ(A*X) = λ^2*X          A^n*X = λ^n*X
 
    		A^2 = (X ⋀ X^-1)(XAX^-1) = X⋀^2X^-1    A^n = X⋀^nX^-1

    		A^n -> 0 当 ⋀^n -> 0 时 有以下结论:
    			|λ_i| < 1

证明: A^t*A 是方阵,对称,明确非负的

        (1) A^t*A =  (n x m)(m x n) = n x n   #方阵
        (2) (BA)^t = A^t*B^t    (A^t*A)^t = A^t*A^tt = A^t*A    #对称
        (3) S = S^t 是非负的明确的有以下条件特征值

        	1  全部特征值  >= 0  Sx = λx
        	2  对于每个向量x有: x^t * Sx >= 0 

非方阵可能没有特征值和特征向量。 此时,可以使用计算奇异值的方式。

7.1 奇异分解: 矩形矩阵的 SVD过程

SVD(Sigular Value Decomposition) 又称奇异值分解过程:

	A = UΣV^t  (公式一)

SVD常常用于高维数据的降维操作,比如百万图像,高清晰视频提取,用于它们的高清晰关键信息提取。

它也是傅里叶变换(Fourier transform)的数据驱动概括(FFT)的基本步骤。 从大型计算中提取近似方程,做为数字转换映射系统到某个坐标系统中。比如湍流分析,大型飞机高速飞行的湍流和气流研究。

也可以用于解决 Ax = b 在零空间的解的问题。

在互联网行业如脸书,谷歌,微软用于主成分统计分析PCA(principal component analysis),这是一种基于用户主要行为模式和相关性的数据分析提取,并蒸馏它到关键信息,以方便理解数据。另一些以一种奇异分解的方式,用于特征识别。如AMZ的商品推荐算法,或Netfix的视频推荐算法,它是简要的可解释的,用于哪些被喜欢,哪些被讨厌的简要列表,总之它被广泛使用于建模。

当 U^tU = I 并且 V^tV = 1
A*V = UΣ 这意思是:(σ sigma 为奇异值)

	A(V1 ... Vr) = (U1 ... Ur)(σ1
		                     ...
		                       σ_r) 

并且 AVi = σ_iU_i

奇异值 σ1 >= σ_2 >= … >= σ_r > 0 (r为A的秩)

我们使全部 U 和V,因为 V1 … Vr 是相互正交的,我们可以仅仅在对称矩阵先进行验证。

    σ表示奇异值,奇异值或奇异向量,拉伸 或 翻转 矩形矩阵。

分解矩阵为奇异小矩阵后,如果乘 向量 ->x 第一件事就是获得 V的转置 V^t, 并且V^t 是正交矩阵。
我们可以求取奇异向量。先解决以下两个问题:

	(1) 怎样在A的行空间 选择正交 Vi
		设Vi是特征向量,取自 A^t*A
		A^t*A*Vi = λiVi = σi^2*Ui     # 此处Vi是正交的,即 V^t*V = I

	(2) 在A的列空间选择 Ui 因为Ui 是正交的,所以重要的性质是 U^t*U = I,因此 
        (AVj/σj)^t*(AVi/σi) = (Vj^t*A^t*A*Vi)/(σj*σi)
        = (Vj^t*σi^2*Vi)/(σj*σi)
        =( 1   当 i = j  
           0   当 i != j)

如下图所示关系,为奇异值如何变化并且使空间变化的:

(1) U 和 V 是旋转并且可能反射的。 (rptationis and reflections)

(2) U是左奇异向量,V是右奇异向量。

(3) 求和Σ 拉伸圆到椭圆。 当矩阵对称时,右奇异值,将进入V,

	左奇异值 = 左特征向量
	右奇异值 = 右特征向量

7.2 手工分解的实际例子

例1 SVD分解:

设A为 m x n矩阵, U 为 m x m 矩阵,V 为 n x n 矩阵

		A = UΣV^t     (公式)

参数含义:

设 U_r+1 到 U_m 为: N(A^t) 
设 V_r+1 到 V_n 为: N(A)

    Σ = (σ1 ... 0
         ..σr
        0  ... 0)
    V^t = ( v1       为矩阵A的特征向量集合
           ...
           vn )

现在有 矩阵 A 如下,获取其奇异值:

    A = (3  0 
         4  5)

因此有

  A^t*A =  (3  4  *  (3 0 =  (25  20     
            0  5)    4 5)    20  25)  

同时有

 A*A^t =   (3 0 *  (3  4 = (9 12
            4 5)    0  5)   12 41)

 V^t =  1/√2 * (1  1    =  (1/√2   1/√2  
               -1  1)      -1/√2   1/√2)
    
 U = (1/√10   -3/√10     
     3/√10    1/√10)

 Σ = (3√5  0
     0   √5)

因此 σ1u1v1^t + σ2u2v2^t = 3/2*(1  1   + 1/2*(3  -3
                               3  3)        -1  1)
                         = (3  0
                           4  5)

如果有100 x 100的矩阵,或 100 x 1000的矩阵,这里可能得到100个奇异值,但是人们只关心 σ1
或者前5个 σ1 ~ σ5, 也许5个奇异值就可以做相关的事情。

从SVD奇异分解开始

	A = UΣV^t = σ1*u1*v1^t + ... +σr*ur*vr^t

保留k个最大的即σ1 到σk

	Ak = σ1*u1*v1^t + ... +σk*uk*vk^t

Ak时最接近K阶的矩阵(closest rank A),它最接近原矩阵A

	||A - Ak || <= ||A - Bk||

一般地

	||A|| = σ_max  
	||A||_F = √σ1^2 + ... +σr^2
	||A||_N = σ1 + ... + σr

随机数值线性代数是基于此的变化。

	σ1 为最大权重
	σr 为最小权重

因此奇异值分解将大型矩阵分解为许多块,人们选择自己关心的,规范的想法是如何测量矩阵。
每一个巨型矩阵的随机化,都带去一次变革。 例如乘以AB 与行列采样一起

	(AS)(S^t*B)

	AS = (σ1 σ2 σ3)(s11 0    =  (s11*σ1 s32*σ3)
                     0  0
                   0  s32)

    并且S^t*B = (s11   b1^t
    	         s32   b3^t)

注意 SS^t 不会接近I,但是可以有如下方程

	E(SS^t) = I
	E((AS)(S^t*B)) = AB

一般平方采样 Norm-squared sampling,选择行列的概率为

	~ ||σ1||*||bi^t||

这个选择的是最小化的采样变异率。
通常数据是有规则的,数据的分析提取已经有千年历史,如果从其中提取随机样本是有深度的问题,概率论在讨论这个问题。

7.3 生成空间 - SVD 实例二

矩阵奇异值,通过奇异分解获得。
通常某些矩阵不只一种分解办法,可以使用正交分解,也可以使用奇异分解。

例二:
现在有以下矩阵,获取其奇异分解式:

      A = (1  1
           0  1
          -1  1)

奇异分解因子公式:

   A = UΣV^t  

设未知数 V(特征向量集合), 而特征值为 λ

  V^t = e_set(A^t*A)
      = (v1
    v2)

  U = [(1/σ1)*Av1  
       (1/σ2)*Av2
       NS(A^t)/|NS(A^t)|]

  Σ = (σ1  0   <=>  σn = √λn   (λ是特征值)
       0   σ2
       0   0)

因此有 A = UΣV^t  =   [(1/σ1)*Av1        *   (σ1  0    *  (v1  v2)^t
                      (1/σ2)*Av2              0   σ2
                      NS(A^t)/|NS(A^t)|]      0   0)

计算全部值

	A  = (1  1   =>  A^t*A => (2  0   =>  {λ1  λ2} 
	       0  1                 0  3)  
	       1  1) 
              => {3 2} ⋀ {v1  v2}  = (0  1
                                      1  0)
    
    σ1 = √3
    σ2 = √2
    
    Σ = (√3  0
    	 0  √2
    	 0   0)

V 特征向量集合为

    V^t = (0  1
           1  0)

    U = [(1/√3)*(1  1 * (0      (1/√2)*(1  1 * (1      NS(A^t) /|NS(A^t)|
    	         0  1    1)             0  1    0)
    	        -1  1)                 -1  1)

√3 为 A的奇异值的3平方根,√2为 A的奇异值 2的平方根

                                     增广
	NS(A^t) => A^t*X = 0 => (1  1  1 | 0    ~  ( 1  0  -1 | 0
	                         1  0 -1 | 0)         0  1   2 | 0)
            => x = x3*(1
                      -2
                       1)

x3 是自由变量,假设 x3 = 1,因此:

        u3 = (1     而u3长度  |u3| = √1+4+1 = √6
              -2
               1)

    => U = (1/√3   1/√2   1/√6
    	    1/√3    0     -2/√6
    	    1/√3   -1/√3   1/√6)

最后验证该结果,可正确得到初始矩阵:

         A = UΣV^t = (1/√3   1/√2   1/√6   *  (√3  0 * (0  1 
    	              1/√3    0     -2/√6      0  √2    1  0)
    	              1/√3   -1/√3   1/√6)     0   0)
           = (1  1
              0  1
             -1  1)

小结

这里通过一个例子了解了SVD的计算过程,主要包括

1 降维:SVD算法可以将高维图像数据降维到低维空间,从而提高图像处理的效率。

图像分类:SVD算法可以用于对图像进行分类。例如,可以使用SVD算法将图像分解为若干个低维特征向量,然后使用机器学习算法对这些特征向量进行分类。

图像检索:SVD算法可以用于对图像进行检索。例如,可以使用SVD算法将图像库中的图像进行降维,然后使用K-近邻算法对查询图像进行检索。

2 特征提取:SVD算法可以用于从图像中提取特征,这些特征可以用于图像识别、分类等任务.

SVD算法可以用于从图像中提取特征,这些特征可以用于图像识别、分类等任务。例如,可以使用SVD算法将图像分解为若干个低维特征向量,这些特征向量可以用来表示图像的纹理、颜色等信息。

3 图像压缩:SVD算法可以用于压缩图像,从而减少图像的存储空间。

总之,SVD算法是一种重要的矩阵分解算法,在图形识别中具有广泛的应用。

下一节继续旅程,举例说明QR正交分解及最小二乘,了解其类似于SVD过程的强大功能。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。