前置知识:(笔记待上传)
线性变换与矩阵
$$ y=Ax+b\quad\mathrm{where} \ A\in\mathbb{R}^{m\times n},x\in\mathbb{R}^n,y\in\mathbb{R}^m,b\in\mathbb{R}^m $$
- 该方程表示通过矩阵 $A$ 和偏差 $b$ 将输入 $x$ 线性映射到输出 $y$
Python 实现:
import numpy as np
A = np.array([[2, 1], [1, 3]])
x = np.array([1, 2])
b = np.array([0, 1])
y = A @ x + b print(y)
# Output: [4 7]
实际应用:是线性回归和神经网络的基础
矩阵基本运算
- 矩阵加法/减法/常量乘法,逐元素相加/相减/相乘
- 矩阵乘法,如 $C=AB$ ,则 $c_{ij} = \sum_{k=1}^{n} a_{ik} \cdot b_{kj}$
- 单位矩阵,主对角线上的元素全为 1,其余元素全为 0
- Hadamard 乘积,两个相同结构的矩阵中对应位置的元素直接相乘
Python 实现:
import numpy as np
# 初始化两个矩阵 A 和 B(3x3)
A = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
B = np.array([[9, 8, 7],
[6, 5, 4],
[3, 2, 1]])
add_result = A + B # 矩阵加法
sub_result = A - B # 矩阵减法
scalar_mul_result = 2 * A # 常量乘法
dot_result = np.dot(A, B) # 矩阵乘法
identity_matrix = np.eye(3) # 单位矩阵
hadamard_result = A * B # Hadamard 乘积
特征值与特征向量
$$ Av=\lambda v\quad\mathrm{where} \ \lambda\in\mathbb{R},v\in\mathbb{R}^n,v\neq0 $$
- 特征值 $\lambda$ 和特征向量 $v$ 描述了矩阵 $A$ 对空间进行缩放和旋转的方式
Python 实现:
import numpy as np
A = np.array([[4, 2], [1, 3]])
eigenvalues, eigenvectors = np.linalg.eig(A)
print(f"Eigenvalues: {eigenvalues}")
print(f"Eigenvectors:\n{eigenvectors}")
实际应用:主成分分析 PCA
奇异值分解 SVD
$$ A=U\Sigma V^T $$
- 奇异值分解(SVD)将矩阵 $A$ 分解为正交矩阵 $U$、$V$ 和一个对角线矩阵 $\Sigma$ (奇异值)
Python 实现:
import numpy as np
A = np.array([[1, 2], [3, 4], [5, 6]])
U, S, Vt = np.linalg.svd(A)
print(f"U:\n{U}\nS: {S}\nVt:\n{Vt}")
实际应用:应用于降维和推荐系统
Kronecker 乘积
两个矩阵的 Kronecker 乘积 kron(X,Y) 为 X 的元素与 Y 的元素的所有可能乘积构成的较大矩阵。如果 X 为 m×n 且 Y 为 p×q,则 kron(X,Y) 为 mp×nq。元素以特定方式排列,呈现 X 的每个元素分别与整个矩阵 Y 相乘的结果。
X = [1 2; 3 4];
I = eye(2,2);
kron(X,I)
% result
ans =
1 0 2 0
0 1 0 2
3 0 4 0
0 3 0 4
海森矩阵 Hessian
海森(Hessian)矩阵,多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率
对于关于向量$x$的函数$f(x)$,可以根据各分量构建二阶偏导矩阵$H(f)$,即: $$H(f)=\begin{bmatrix} \frac{\partial^2{f}}{\partial{x^{(0)}}\partial{x^{(0)}}} & \frac{\partial^2{f}}{\partial{x^{(0)}}\partial{x^{(1)}}} & \cdots & \frac{\partial^2{f}}{\partial{x^{(0)}}\partial{x^{(n)}}} \\ \frac{\partial^2{f}}{\partial{x^{(1)}}\partial{x^{(0)}}} & \frac{\partial^2{f}}{\partial{x^{(1)}}\partial{x^{(1)}}} & \cdots & \frac{\partial^2{f}}{\partial{x^{(1)}}\partial{x^{(n)}}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^2{f}}{\partial{x^{(n)}}\partial{x^{(0)}}} & \frac{\partial^2{f}}{\partial{x^{(n)}}\partial{x^{(1)}}} & \cdots & \frac{\partial^2{f}}{\partial{x^{(n)}}\partial{x^{(n)}}} \\ \end{bmatrix}$$ 海森矩阵的理解:
- 作为二阶偏导构成的方阵$H$,每一行/列都对应着参数$w$在一个维度上的偏导
- 方阵$H$中的第$i$行第$j$列元素$h_{ij}$,表示函数关于该参数在第$i$轴和第$j$轴的二阶偏导
- 方阵对角线上的元素值描述了参数值在某一维度的变化,对函数关于该参数对应维度的梯度的影响
- 方阵非对角线上的元素值描述了参数值在某一维度的变化,对函数关于该参数其他维度的梯度的影响
- 方阵非对角线上的元素值对应着函数关于该梯度在不同维度上的”纠缠(twist)“,如果不同维度上的梯度不存在这种相关性,则对应非对角线的元素值为0
在统计学中,Hessian 矩阵的期望值称为 Fisher 信息矩阵 $I(\theta)$;而 Fisher 信息矩阵的逆 $I(\theta)^{-1}$ 被称为渐近协方差矩阵,它描述了参数估计的方差和协方差: $$ I(\theta)^{-1}=Cov(\theta) $$ 因此,Hessian 逆矩阵的对角线元素直接表示了参数估计的方差:
- 较小的对角线元素:表示方差较小,即该参数估计更精确,参数更重要
- 较大的对角线元素:表示方差较大,即该参数估计不太精确,参数不太重要