矩阵之芯 SVD - 从奇异值角度看矩阵范数

机器学习与数学

共 2677字,需浏览 6分钟

 ·

2020-12-07 17:46

首先,我们回顾一下矩阵奇异值分解的基本性质。

具有奇异值分解 。则该分解具有下列性质,

  • 1、如果 ,即矩阵 的秩为 ,那么 的非零奇异值的数量等于

  • 2、将两个正交矩阵分别看成按左、右奇异向量按列排列,即

以及

有如下外积展开式,

开头的图片是针对更一般的张量分解的图示,自然也包括了矩阵分解,不过只需要两根杆子。

1矩阵范数


度量、范数和内积原来是这么个关系


在上面这篇里,我们介绍了向量的范数,那么矩阵的范数又是怎么样的呢?

.定义

考虑实数域上的矩阵,范数是满足以下性质的从 实矩阵到 的一个函数

  • ,以及

  • 对于任意数 ,有

  • 对于可相乘矩阵,有

.矩阵 F-范数

矩阵 的 Frobenius 范数定义为,

我们知道,矩阵具有专门的乘法,从而将它与一般的向量空间区分开。但是向量范数的三个性质与向量乘积并没有关系。

因此,对于矩阵来说,貌似需要一个额外的性质,能够将 相关联起来。

而 F-范数刚好具有此额外性质,即

因此有,

可以说 Frobenius 矩阵范数 和欧氏向量范数 之间是相容的来表达这一点。

相容性条件 表示对于所有可相乘的矩阵 ,有

简写为,

因此可将乘积性质 添加到三条属性中以定义一般的矩阵范数。

除了 Frobenius 范数满足前面矩阵范数的定义外,但是其他有用的矩阵范数又是从何而来呢?

实际上,如下所述,每个合法的向量范数都会生成(或诱导出)一个矩阵范数。

.诱导矩阵范数

上为 定义的向量范数可诱导一个 上的矩阵范数。对于一个 矩阵 ,以及 向量 ,有

连续函数在有界闭区域上必有最小、最大值。

  • 很明显,在某种意义上,诱导矩阵范数与其基础向量范数相容,即
  • 非奇异时,

证明

容易验证 满足前三个条件。而 则意味着

换句话说,诱导范数 表示 可以将单位球面上的向量拉伸的最大程度,而 表示非奇异矩阵 可以将单位球面上的向量收缩的最大程度。

下图描述了在 中的诱导矩阵 2-范数的情况。

2奇异值与矩阵范数

下面,我们从奇异值角度审视一下矩阵的几个常用范数。

我们再次来看一下矩阵的秩 1 展开式,

注意看,上面将矩阵 分解成了 个秩 1 矩阵之和。这些矩阵 都是两个单位向量的外积形式,本身元素的大小都有限,每个矩阵对 的贡献主要得看前面的系数,即奇异值

由上面诱导矩阵范数的定义可知,范数在一定意义上是考量一个矩阵对单位向量的缩放能力。我们将展开式代入矩阵向量乘积,

矩阵对单位向量的变换可以按奇异值和相应的奇异向量分解开,而缩放能力主要反映在奇异值上。

那么,我们能不能直接从奇异值来考量或定义矩阵范数呢?

.Schatten p-范数

由矩阵 的奇异值构成的向量

定义如下范数,

巧的是,这样用向量范数直接从奇异值定义的矩阵范数与常规方式定义的矩阵范数之间真的有等价关系。不信请看:

1、矩阵 的 Schatten -范数等于矩阵 的 F 范数,即

其中,

2、矩阵 的 Schatten -范数等于矩阵 -范数,即

3、矩阵 的 Schatten -范数

定义如下,

也称为矩阵 的迹范数(trace norm 或 nuclear norm)。这个范数貌似没有对应普通的诱导范数,但在实际应用中却很受青睐。

下面我们来对上面的定义简单地解读一番。

可得,

,则有

因此,

.程序小实验

import numpy as np
from scipy.linalg import sqrtm
A = np.array([[1,2,3],[1,1,1],[0,1,-1]])
A
array([[ 1,  2,  3],
[ 1, 1, 1],
[ 0, 1, -1]])
U, S, V = np.linalg.svd(A)
AtA = A.T@A
AtA
array([[ 2,  3,  4],
[ 3, 6, 6],
[ 4, 6, 11]])
m = np.diag(S)@V
m
array([[-1.31467133, -2.16665828, -3.20525993],
[ 0.19957118, 1.13213211, -0.84714312],
[ 0.48146718, -0.15449536, -0.0930447 ]])
root_VSVT = V.T@np.diag(S)@V
root_VSVT
array([[0.90174674, 0.71064345, 0.82573525],
[0.71064345, 2.09285003, 1.05591886],
[0.82573525, 1.05591886, 3.03367709]])
S.sum()
6.028273858670582
root = sqrtm(AtA)
root
array([[0.90174674, 0.71064345, 0.82573525],
[0.71064345, 2.09285003, 1.05591886],
[0.82573525, 1.05591886, 3.03367709]])
root@root
array([[ 2.,  3.,  4.],
[ 3., 6., 6.],
[ 4., 6., 11.]])
np.trace(root)
6.028273858670583

3小结

分解,

矩阵对单位向量的变换可以按奇异值和相应的奇异向量分解开,而缩放能力主要反映在奇异值上。

因此,我们可以从奇异值的大小(甚至数量)来定义矩阵范数。可见,奇异值的确很厉害吧。


相关阅读

矩阵和线性代数原来是这么来的

矩阵特征值的故事 - 缘起琴弦

二次型和矩阵合同原来是这么一回事

矩阵特征值是这么来的,以及有趣的盖尔圆

万能的 SVD 分解是哪位牛人提出来的?
度量、范数和内积原来是这么个关系
线性映射: 从凯莱引入矩阵乘法说起
矩阵之芯 SVD: 奇异值分解及其几何解释

矩阵之芯 SVD: 基本应用以及与其他分解的关系

矩阵之芯 SVD: 从奇异值分解看四个基本子空间

矩阵之芯 SVD: 从奇异值分解 SVD 看 PCA 



浏览 65
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报