现在位置: 首页 > AI 数学基础 > 正文

特征值与特征向量 -- 矩阵的指纹

矩阵作用于大多数向量时,会同时改变其方向和长度。

但总有一些「特殊方向」上的向量,矩阵作用后方向不变,只改变长度。这些就是特征向量,缩放倍数就是特征值。

核心公式:\( A\mathbf{v} = \lambda \mathbf{v} \)

  • \( \mathbf{v} \):特征向量(非零),方向在变换后保持不变
  • \( \lambda \):特征值,表示 v 被拉伸的倍数

λ > 0

正向拉伸/缩短

方向保持不变

λ < 0

反向拉伸/缩短

方向完全反转

n×n 矩阵最多有 n 个线性无关的特征向量。

对称矩阵的特征值一定是实数——这是对称矩阵如此重要的原因之一。


生活例子

橡皮膜拉伸

一张橡皮膜,水平方向拉伸 2 倍,垂直方向保持不变。

水平方向上的箭头(如 (1,0))被拉伸到 (2,0),但方向不变——它是特征向量,λ=2。

垂直方向上的箭头(如 (0,1))完全不变——它也是特征向量,λ=1。

倾斜的箭头(如 (1,1))方向改变了——它不是特征向量。


数学定义

\[ A\mathbf{v} = \lambda \mathbf{v} \quad \Leftrightarrow \quad (A - \lambda I)\mathbf{v} = 0 \]

非零解存在的条件:\( \det(A - \lambda I) = 0 \)(特征方程)。


Python 动手实践

实例

import numpy as np

A = np.array([[2, 0], [0, 1]])  # 水平拉伸2倍,垂直不变
eigenvalues, eigenvectors = np.linalg.eig(A)

print("特征值:", eigenvalues)       # [2. 1.]
print("特征向量 (列):\n", eigenvectors)

# 验证 Av = λv
for i in range(2):
    v = eigenvectors[:, i]
    lam = eigenvalues[i]
    print(f"\n验证特征向量{i+1}:")
    print(f"  A @ v = {A @ v}")
    print(f"  λ * v = {lam * v}")
    print(f"  相等: {np.allclose(A @ v, lam * v)}")

# 对称矩阵的特征值全实数
S = np.array([[1, 4], [4, 2]])
print(f"\n对称矩阵 S 的特征值: {np.linalg.eigvals(S)}(全实数)")
特征值: [2. 1.]
特征向量 (列):
 [[1. 0.]
 [0. 1.]]
验证特征向量1: A@v=[2. 0.], λv=[2. 0.], 相等: True
对称矩阵 S 的特征值: [ 5. -2.](全实数)

交互式特征向量演示

拖动蓝色向量 v,观察矩阵 A = [[2,0],[0,1]] 对其的变换 Av(红色虚线)。

当 v 在水平或垂直方向时,Av 与 v 共线——这就是特征向量方向:


AI 中的应用场景

PCA 降维

计算数据协方差矩阵的特征值和特征向量。最大的 k 个特征值对应的特征向量就是数据方差最大的 k 个方向(主成分)。将数据投影到这些方向上,方差小的方向被丢弃,实现降维。从 784 维的 MNIST 图像降到 50 维,仍能保留约 90% 的信息。

谱归一化(Spectral Normalization)

在 GAN 训练中,判别器的权重矩阵每步做谱归一化:W ← W / \sigma_{max}(W),其中 \sigma_{max} 是最大的奇异值(方阵时 = 最大特征值的绝对值)。这确保判别器是 1-Lipschitz 的,稳定训练、减少模式崩塌。

图神经网络的谱方法

图拉普拉斯矩阵 L = D - A(D 是度对角矩阵,A 是邻接矩阵)的特征值和特征向量定义了图上的傅里叶变换。GCN(图卷积网络)就是在这个谱域上做卷积——虽然现代 GCN 更多用空间域方法,但谱方法是理论基础。