矩阵低秩近似 —— 伪逆
Chen Kai BOSS

在真实数据里,矩阵往往既不方、也不满秩:特征相关、样本不足、噪声导致的病态都会让“求逆”这件事变得不稳定甚至不存在。伪逆( Moore – Penrose inverse)可以把“逆”的直觉保留下来:它不追求完美解,而是把线性方程组的解定义成一个最合理的最小二乘解(并在多解时选最小范数那一个),因此在回归、控制、信号处理里非常常见。本文会从最小二乘视角给出伪逆的定义与四个 Penrose 条件,再用 SVD 把它的计算与低秩近似联系起来,解释为什么截断奇异值能让解更稳、什么时候需要正则化,以及这些结论在机器学习里怎么落地使用。

什么是伪逆?

对于给定的矩阵 伪逆(记作 )提供了一种解决线性方程组的方式,即使这些方程组没有唯一解或精确解。特别地,当 不可逆或不是方阵时,可以通过定义 来最小化误差的平方和。

伪逆通过以下优化问题定义:

其中:

  • 是我们希望计算伪逆的矩阵。
  • 是目标矩阵。
  • 表示 Frobenius 范数,定义为:

简单来说,伪逆通过最小化矩阵乘积 与目标矩阵 的误差来近似逆矩阵。

Frobenius 范数

在进一步讨论伪逆之前,我们首先要了解一下 Frobenius 范数,这是矩阵优化问题中广泛使用的工具。

对于矩阵 Frobenius 范数定义为:

它也可以通过矩阵的迹来表示:

其中 表示迹运算,即矩阵对角线元素之和。

为什么将矩阵 的每个元素平方然后求和等价于求 的迹?

事实上,当我们计算 的对角线元素时,这些元素是 中每一行向量与自己相乘得到的平方和(即内积),所以最终结果相当于对每个元素的平方求和。通过这个公式可以看到 Frobenius 范数实际上是矩阵乘法结果中对角线元素之和的平方根,这与直接将矩阵元素平方求和再开平方的结果是一样的。

Frobenius 范数可以看作是欧几里得范数在矩阵上的推广,将矩阵的元素视为向量的元素来计算。

优化视角

从优化的角度来看,伪逆可以通过以下问题来定义:

这个问题的本质是寻找一个 ,使得 之间的 Frobenius 范数最小化。当 是单位矩阵时,我们称 右伪逆

$$

A^+ = _B | AB - I |_F^2 $$

同样地,左伪逆也可以通过类似的方式定义。

求解伪逆

为了解决上述优化问题,我们对目标函数求导:

令其等于零,得到:

$$

A^T (AB - M) = 0 $$

解得:

$$

B = (A^T A)^{-1} A^T M $$

为单位矩阵时,伪逆的解为:

$$

A^+ = (A^T A)^{-1} A^T $$

一般形式

对于不满秩的矩阵 不可逆的情况,可以通过正则化来稳定计算伪逆:

$$

A^+ = _{} (A^T A + I)^{-1} A^T $$

这被称为Tikhonov 正则化岭回归

为了证明 是可逆的,可以从以下几个步骤来展开:

的不可逆性

矩阵 协方差矩阵,如果 的列向量线性相关,就会是奇异矩阵,不可逆。这是因为在线性相关的情况下,的某些特征值为 0,导致行列式为 0,进而不可逆。

引入正则化项

为了保证矩阵 可逆,我们引入正则化项 ,其中 是单位矩阵。加入正则化项的目的是增加对角线上的元素,使得整个矩阵的特征值都大于零,从而使其可逆。

需要证明 是可逆的。

可逆性证明(三种方法)

正定性

首先,我们知道矩阵 是对称矩阵,因为 和单位矩阵 都是对称的。对称矩阵的可逆性可以通过其是否正定来判断。

考虑任意向量 ,我们计算

$$

x^T (A^T A + I) x = x^T A^T A x + x^T I x = |Ax|_2^2 + |x|_2^2 $$

其中 ,由于 ,可以得到:

$$

x^T (A^T A + I) x = |Ax|_2^2 + |x|_2^2 > 0 x $$

这表明 是正定矩阵,因此它是可逆的。

特征值的变化

假设 的特征值为 ,其中一些 (即 不满秩)。对于 ,其特征值变为:

由于 ,即使某些 ,加入 后特征值也变成了 ,因此所有特征值都严格大于零。特征值严格大于零意味着矩阵是正定的,因此可逆。

行列式不为零

可逆矩阵的充要条件是行列式不为零。行列式可以通过特征值的乘积来计算:

由于 ,每个 ,因此行列式不为零,这也证明了 是可逆的。

伪逆的性质

伪逆具有以下重要性质: 1. 对称性,即伪逆的伪逆等于原矩阵。 2. 一致性,这保证了伪逆与标准逆矩阵具有类似的行为。 3. 最小误差:伪逆最小化 之间的 Frobenius 范数。

奇异值分解( SVD)与伪逆

伪逆的一个强大计算方法是通过奇异值分解( SVD)。对于任意矩阵 ,其 SVD 分解为:

$$

A = U V^T $$

其中:

  • 是正交矩阵。
  • 是包含 的奇异值的对角矩阵。

伪逆可以通过 SVD 计算为:

$$

A^+ = V ^+ U^T $$

其中 的伪逆,通过将非零奇异值取倒数,零保持不变。

示例

考虑矩阵:

$$

A =

$$

通过 SVD 分解 为:

$$

A = U V^T $$

然后通过取 的伪逆,计算出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np

# 定义矩阵 A
A = np.array([[1, 2],
[3, 4],
[5, 6]])

# 进行 SVD 分解
U, Sigma, VT = np.linalg.svd(A)

# 计算 Σ 的伪逆
Sigma_inv = np.zeros((A.shape[1], A.shape[0])) # 创建一个与 A 的维度相匹配的矩阵
Sigma_inv[:len(Sigma), :len(Sigma)] = np.diag(1 / Sigma) # 对非零的奇异值取倒数

# 计算伪逆 A^+
A_pseudo_inverse = VT.T @ Sigma_inv @ U.T

# 输出伪逆
A_pseudo_inverse

# array([[-1.33333333, -0.33333333, 0.66666667],
# [ 1.08333333, 0.33333333, -0.41666667]])

伪逆的应用

线性系统求解

伪逆在求解无唯一解的线性方程组时尤为有效。对于线性方程组 ,如果 不可逆,伪逆提供了最小二乘意义下的最佳近似解:

$$

x = A^+ b $$

低秩近似

在机器学习中,伪逆常用于低秩矩阵近似,例如在主成分分析( PCA)中,通过伪逆找到最优投影,将高维数据压缩到低维。

控制理论

在控制系统中,伪逆用于设计控制器,即使系统可能不可完全控制或观测。伪逆通过最小二乘方法计算控制规律,从而减少误差。

数值稳定性与计算考虑

数值不稳定性的来源

在计算伪逆时,最常用的方法是通过奇异值分解 (SVD)。 SVD 将矩阵分解为三个部分:正交矩阵 ,奇异值矩阵 ,以及正交矩阵 。伪逆的计算依赖于对 取倒数,这本质上是对矩阵的奇异值进行反转操作。

问题在于,当某些奇异值 非常接近 0 时,取倒数的结果 会变得非常大。这会导致数值计算中的不稳定性,因为计算机无法准确表示非常小或非常大的数。这种不稳定性在数值上表现为:

  • 计算误差被放大。
  • 最终结果不准确甚至可能溢出。

举个例子,假设有一个矩阵 ,它的奇异值为 。当我们尝试取伪逆时,的结果是:

这意味着与小奇异值对应的反转操作会导致非常大的数值。这些数值将导致在后续的矩阵乘法中产生巨大的计算误差。

Tikhonov 正则化:数值稳定性的方法

为了解决奇异值非常小时的数值不稳定问题,可以引入Tikhonov 正则化(也称为岭回归)。其核心思想是在计算过程中人为地增加一个小的正则化项 ,以避免奇异值过小的问题。

正则化方法通过修改原始问题来改善数值稳定性。通常的做法是修改伪逆计算公式,将伪逆表示为:

$$

A^+ = _{} (A^T A + I)^{-1} A^T $$

其中 是一个非常小的正则化参数,是单位矩阵。引入 的主要目的是避免直接使用非常小的奇异值,从而减小数值不稳定的影响。

数值稳定性的来源

通过添加 ,我们实际是增加了矩阵的对角线元素。这会使得矩阵的最小特征值变得不再为 0 或非常小,而是增加了一个 。即使原矩阵 是奇异矩阵,加上 之后它也会变得可逆,从而可以安全地进行伪逆的计算。

正则化的影响

在计算伪逆时,正则化项 的大小对结果有直接影响:

  • 如果 过大,正则化效果会过强,导致伪逆的解偏离实际的解。
  • 如果 过小,则无法有效改善数值不稳定性。

因此,选择适当的 是至关重要的。通常,通过交叉验证或经验选择合适的正则化参数。

示例:使用正则化计算伪逆

假设我们有矩阵 ,其奇异值中存在较小的值。可以通过添加正则化项来计算伪逆,以避免数值不稳定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import numpy as np

# 定义矩阵 A
A = np.array([[1, 2],
[3, 4],
[5, 6]])

# 正则化参数 lambda
lambda_reg = 1e-5

# 计算 A^T A 和 正则化项
ATA_reg = A.T @ A + lambda_reg * np.eye(A.shape[1])

# 计算伪逆
A_pseudo_inverse_reg = np.linalg.inv(ATA_reg) @ A.T

# 输出伪逆
print(A_pseudo_inverse_reg)

# [[-1.33328236 -0.33331944 0.66664347]
# [ 1.08329309 0.33332236 -0.41664837]]

结论

伪逆是逆矩阵的推广,适用于更广泛的矩阵类型,包括非方阵或不可逆矩阵。它在优化、机器学习和控制理论中具有重要应用。通过奇异值分解,可以高效计算伪逆,并将其应用于实际问题。

参考文献

  1. Moore – Penrose 伪逆
  2. 奇异值分解
  3. Tikhonov 正则化
  • 本文标题:矩阵低秩近似 —— 伪逆
  • 本文作者:Chen Kai
  • 创建时间:2020-12-03 09:00:00
  • 本文链接:https://www.chenk.top/%E7%9F%A9%E9%98%B5%E4%BD%8E%E7%A7%A9%E8%BF%91%E4%BC%BC-%E2%80%94%E2%80%94-%E4%BC%AA%E9%80%86/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论