目录

机器学习中的线性代数奇异值分解-SVD

机器学习中的线性代数:奇异值分解 SVD

线性代数 奇异值分解(SVD)

参考资料:

非常好的视频,本文内容主要来自于该视频,在此表示感谢!

简单的实对称矩阵

我们从一个简单的对称矩阵开始说起:

A

[ 1 2 2 1 ] A = \left[ \begin{matrix} 1 & 2 \ 2 & 1 \ \end{matrix} \right]

A

=

[

1

2

2

1

]

我们有

A A

A 这样的一个矩阵,一个二维向量

x x

x 右乘

A A

A 相当于进行了一次线性变换,但是这样并不简洁,从直观的角度上来说,既发生了旋转,也发生了拉伸,比如说

x 1

( 1 0 ) x_1 = \left( \begin{matrix}1\0\end{matrix} \right )

x

1

=

(

1

0

) ,就会得到

A x 1

( 1 2 ) Ax_1 = \left( \begin{matrix}1 \ 2\end{matrix}\right)

A

x

1

=

(

1

2

) ,这里显然发生了“拉伸”,也发生了“旋转”,毕竟单一维度的向量已经到达了更高维度的情况。

在这样的思路下,我们尝试抽取一般性的“伸缩矩阵”和“旋转变换矩阵”

  • 伸缩变换 (也就是只会沿着某个坐标轴的方向进行倍数变化):

    S

    [ λ 1 λ 2 ]

    d i a g { λ 1 , λ 2 } S

    S T ,        λ 1 , λ 2 ≥ 0 S = \left[ \begin{matrix} \lambda_1 & &\& & \lambda_2 \end{matrix} \right ] = {diag} { \lambda_1, \lambda_2} \newline S = S^T, ;;;\lambda_1, \lambda_2 \ge 0

    S

    =

    [

    λ

    1

    λ

    2

    ]

    =

    d

    ia

    g

    {

    λ

    1

    ,

    λ

    2

    }

    S

    =

    S

    T

    ,

    λ

    1

    ,

    λ

    2

    0

    其中,经过简单验证,可以发现矩阵

    S S

    S 可以保证只会坐标轴方向进行伸缩,其他情况同理

  • 旋转变换 :对应到正交矩阵

    Q Q

    Q

    Q T Q

    Q Q T

    E ,      Q − 1

    Q T Q^T Q=Q Q^T = E, ;; Q^{-1} = Q^T

    Q

    T

    Q

    =

    Q

    Q

    T

    =

    E

    ,

    Q

    1

    =

    Q

    T

    正交矩阵对应的就是不改变长度的情况下,向量的旋转变换

从 实对称矩阵 到 分解后的变换

对于

A A

A 来说,旋转 -> 伸缩 -> 再旋转是一种比较自然的想法,

A

Q S Q T →    S

Q T A Q

Q − 1 A Q A = QSQ^T \rightarrow ; S = Q^T A Q = Q^{-1} A Q

A

=

QS

Q

T

S

=

Q

T

A

Q

=

Q

1

A

Q

我们先进行某种角度的旋转,待到伸缩变换之后,我们再进行反角度的旋转;

这里

S S

S 是对角矩阵,且

Q T

Q − 1 Q^T = Q^{-1}

Q

T

=

Q

1 所以

S S

S 与

A A

A 一定是相似矩阵,这里我们求

S S

S ,只需要求出特征值就可以;

但是这里需要注意的是:

我们要求:

λ i ≥ 0 \lambda_i \ge 0

λ

i

0 成立,代表的含义是某个维度上的放缩不可以进行反向放缩

但是

Q Q

Q 还有其他要求,需要进行“ 矫正 ”操作,带后面会继续进行说明

为了使得

S S

S 尽量具有唯一性和好的性质,我们常常将

S

d i a g { λ 1 ,    . . . ,    λ n } S=diag{ \lambda_1, ;… ,; \lambda_n}

S

=

d

ia

g

{

λ

1

,

,

λ

n

} 从大到小排列 这样尽量保证唯一性,并且在 低秩近似矩阵 中也有一定的应用

普通方阵的奇异值分解

对一个普通的方阵

A A

A ,我们可以知道

A A T AA^T

A

A

T 以及

A T A A^TA

A

T

A 一定是对称矩阵,证明也很显然:

( A A T ) T

( A T ) T ( A ) T

A A T (AA^T)^T = (A^T)^T (A)^T = AA^T

(

A

A

T

)

T

=

(

A

T

)

T

(

A

)

T

=

A

A

T

我们假设

A A

A 是可以进行某种类型的分解的(这一点在这里没有证明):

A

P S Q T , P P T

P T P

E , Q Q T

Q T Q

E (1.1) A = P S Q^T, \qquad PP^T=P^TP=E, QQ^T=Q^TQ=E \tag{1.1}

A

=

PS

Q

T

,

P

P

T

=

P

T

P

=

E

,

Q

Q

T

=

Q

T

Q

=

E

(

1.1

)

A A T

P S Q T Q S T P

P S 2 P T A T A

Q S T P T P S Q T

Q S 2 Q T (1.2) AA^T = PSQ^T Q S^T P = P S^2 P^T \newline A^T A = Q S^T P^T P S Q^T = QS^2Q^T \tag {1.2}

A

A

T

=

PS

Q

T

Q

S

T

P

=

P

S

2

P

T

A

T

A

=

Q

S

T

P

T

PS

Q

T

=

Q

S

2

Q

T

(

1.2

)

注意 :尽管我们可以从

( 1.1 ) (1.1)

(

1.1

) 推导到

( 1.2 ) (1.2)

(

1.2

) ,但是二者并不是充要条件,也就是说 这里的

A T A

( − Q ) S 2 ( − Q ) T A^TA = (-Q) S^2 (-Q)^T

A

T

A

=

(

Q

)

S

2

(

Q

)

T 也是有可能出现的,因此,我们通过

( 1.2 ) (1.2)

(

1.2

) 求出来的特征值可以保证是正确的(直接开根号、取正数),但是特征向量还是需要进行 校正

具体来说,我们需要

( 1.1 ) (1.1)

(

1.1

) 的完全等价表示:

A

P S Q T ⇔ A Q

P S (1.3) A = PSQ^T \quad \Leftrightarrow \quad AQ = PS \tag{1.3}

A

=

PS

Q

T

A

Q

=

PS

(

1.3

)

我们接下来,我们就可以用

( 1.3 ) (1.3)

(

1.3

) 进行校正,我们可以固定其中的

Q Q

Q ,默认它是正确的,然后重新解出来

P P

P ,此时也就可以保证正确性

从 方阵 到 m ∗ n m*n m ∗ n 矩阵

A m ∗ n

P m ∗ m    S m ∗ n    Q n ∗ n T (1.4) A_{mn} = P_{mm} ; S_{mn} ; Q_{nn}^T \tag{1.4}

A

m

n

=

P

m

m

S

m

n

Q

n

n

T

(

1.4

)

这里,

P , Q P,Q

P

,

Q 均为正交矩阵,这里假设

m < n m\lt n

m

<

n 且

S S

S 需要满足这样的性质:

S m ∗ n

( J m ∗ m   ,    O ) S_{mn} = (J_{mm},,;O)

S

m

n

=

(

J

m

m

,

O

) ,

J J

J 是对角矩阵;

这里可以思考这样一个问题:

如果说,

J m ∗ m J_{m*m}

J

m

m

表示的是各个维度上的伸缩,那么

J m ∗ n J_{m*n}

J

m

n

表示了怎样的几何含义?

这里只对

A m ∗ n , m < n A_{m*n}, m \lt n

A

m

n

,

m

<

n 的情况进行讨论,另一边可以用相似的方法:

A m ∗ n

P S Q T

P   ( J , O )   Q T A A T

P S S T P T

P J 2 P T A T A

Q S T S Q T

Q ( J O ) ( J O ) Q T

Q ( J 2 O O O ) Q T A_{m*n} = PSQ^T = P,(J, O) ,Q^T \newline AA^T = PSS^TP^T = PJ^2P^T \newline A^TA = QS^TSQ^T = Q \left( \begin{matrix} J \ O \end{matrix} \right) \left( \begin{matrix} J & O \end{matrix} \right)Q^T = Q \left( \begin{matrix}J^2 & O \ O & O \end{matrix} \right)Q^T

A

m

n

=

PS

Q

T

=

P

(

J

,

O

)

Q

T

A

A

T

=

PS

S

T

P

T

=

P

J

2

P

T

A

T

A

=

Q

S

T

S

Q

T

=

Q

(

J

O

)

(

J

O

)

Q

T

=

Q

(

J

2

O

O

O

)

Q

T

这样求出公共的特征值,仍然需要进行校正操作,就可以得到最终答案

奇异值分解的实际应用

奇异值分解被广泛用于图像处理、低秩近似矩阵等领域,可以用来进行数据压缩等等;

比如说,一张 512 * 512 的图片,我们正常来说需要记录它的全部像素点,但是

A

P S Q T A = PSQ^T

A

=

PS

Q

T ,而且我们可以逐个

S S

S 的元素进行展开,

A

[ α 1 . . . α n ] d i a g { λ 1 , . . . , λ n } [ β 1 . . . β n ] T A = \left[ \begin{matrix} \alpha_1& … &\alpha_n \end{matrix} \right] diag{\lambda_1, … ,\lambda_n } \left[ \begin{matrix} \beta_1& … &\beta_n \end{matrix} \right]^T

A

=

[

α

1

α

n

]

d

ia

g

{

λ

1

,

,

λ

n

}

[

β

1

β

n

]

T

这样我们可以发现,每一项一定是秩为1的,而且如果按照我们所说的

λ i \lambda_i

λ

i

大的部分放的更靠前,那么我们就在一定程度上认为,前面的部分所占的权重更大,可能只取前面 200 项的时候,就基本能够近似表示原本的图片,这也就是所谓“ 低秩近似 ”,也就起到了压缩图片的作用