线性代数:矩阵乘法与求逆全解析
1. 矩阵乘法基础
矩阵乘法是线性代数中的核心操作之一。对于两个矩阵 (A \in R^{m×n}) 和 (B \in R^{n×p}),它们的乘积 (C = AB \in R^{m×p}),其中 (C_{ij} = \sum_{k=1}^{n} A_{ik}B_{kj})。需要注意的是,为了使矩阵乘积存在,矩阵 (A) 的列数必须等于矩阵 (B) 的行数。
矩阵乘法通常需要 (O(mnp)) 的时间复杂度,不过也存在更快的方法。此外,像 GPU 和 TPU 这样的专用硬件可以通过并行执行行(或列)操作来显著加速矩阵乘法。
矩阵乘法具有以下基本性质:
-
结合律
:((AB)C = A(BC))
-
分配律
:(A(B + C) = AB + AC)
-
一般情况下不满足交换律
:即 (AB) 可能不等于 (BA)
1.1 向量 - 向量乘积
- 内积 :对于两个向量 (x, y \in R^{n}),内积(也称为点积或标量积)(\langle x, y \rangle \triangleq x^Ty = \sum_{i=1}^{n} x_iy_i),且 (x^Ty = y^Tx)。
-
外积
:对于向量 (x \in R^{m}) 和 (y \in R^{n}),外积 (xy^T) 是一个矩阵,其元素为 ((xy^T)_{ij} = x_iy_j),即
[
xy^T \in R^{m×n} =
\begin{bmatrix}
x_1y_1 & x_1y_2 & \cdots & x_1y_n \
x_2y_1 & x_2y_2 & \cdots & x_2y_n \
\vdots & \vdots & \ddots & \vdots \
x_my_1 & x_my_2 & \cdots & x_my_n
\end{bmatrix}
]
1.2 矩阵 - 向量乘积
给定矩阵 (A \in R^{m×n}) 和向量 (x \in R^{n}),它们的乘积 (y = Ax \in R^{m})。可以从以下两种方式理解矩阵 - 向量乘法:
-
按行表示
:
[
y = Ax =
\begin{bmatrix}
— & a_1^T & — \
— & a_2^T & — \
\vdots & \vdots & \vdots \
— & a_m^T & —
\end{bmatrix}
x =
\begin{bmatrix}
a_1^T x \
a_2^T x \
\vdots \
a_m^T x
\end{bmatrix}
]
即 (y) 的第 (i) 个元素等于矩阵 (A) 的第 (i) 行与向量 (x) 的内积,(y_i = a_i^T x)。
-
按列表示
:
[
y = Ax =
\begin{bmatrix}
| & | & | \
a_1 & a_2 & \cdots & a_n \
| & | & |
\end{bmatrix}
\begin{bmatrix}
x_1 \
x_2 \
\vdots \
x_n
\end{bmatrix} =
\begin{bmatrix}
| \
a_1 \
|
\end{bmatrix}
x_1 +
\begin{bmatrix}
| \
a_2 \
|
\end{bmatrix}
x_2 + \cdots +
\begin{bmatrix}
| \
a_n \
|
\end{bmatrix}
x_n
]
即 (y) 是矩阵 (A) 的列向量的线性组合,组合系数由向量 (x) 的元素给出。
1.3 矩阵 - 矩阵乘积
矩阵 - 矩阵乘法 (C = AB) 可以从以下四种不同但等价的方式来理解:
-
向量 - 向量内积视角
:(C) 的第 (i, j) 个元素等于矩阵 (A) 的第 (i) 行与矩阵 (B) 的第 (j) 列的内积。
[
C = AB =
\begin{bmatrix}
— & a_1^T & — \
— & a_2^T & — \
\vdots & \vdots & \vdots \
— & a_m^T & —
\end{bmatrix}
\begin{bmatrix}
| & | & | \
b_1 & b_2 & \cdots & b_p \
| & | & |
\end{bmatrix} =
\begin{bmatrix}
a_1^T b_1 & a_1^T b_2 & \cdots & a_1^T b_p \
a_2^T b_1 & a_2^T b_2 & \cdots & a_2^T b_p \
\vdots & \vdots & \ddots & \vdots \
a_m^T b_1 & a_m^T b_2 & \cdots & a_m^T b_p
\end{bmatrix}
]
-
外积求和视角
:将矩阵 (A) 按列表示,矩阵 (B) 按行表示,(AB) 等于所有 (i) 的矩阵 (A) 的第 (i) 列与矩阵 (B) 的第 (i) 行的外积之和。
[
C = AB =
\begin{bmatrix}
| & | & | \
a_1 & a_2 & \cdots & a_n \
| & | & |
\end{bmatrix}
\begin{bmatrix}
— & b_1^T & — \
— & b_2^T & — \
\vdots & \vdots & \vdots \
— & b_n^T & —
\end{bmatrix} = \sum_{i=1}^{n} a_ib_i^T
]
-
矩阵 - 向量乘积视角(列表示)
:将矩阵 (B) 按列表示,矩阵 (C) 的每一列是矩阵 (A) 与矩阵 (B) 对应列的矩阵 - 向量乘积。
[
C = AB = A
\begin{bmatrix}
| & | & | \
b_1 & b_2 & \cdots & b_p \
| & | & |
\end{bmatrix} =
\begin{bmatrix}
| & | & | \
Ab_1 & Ab_2 & \cdots & Ab_p \
| & | & |
\end{bmatrix}
]
-
矩阵 - 向量乘积视角(行表示)
:将矩阵 (A) 按行表示,矩阵 (C) 的每一行是矩阵 (A) 对应行与矩阵 (B) 的矩阵 - 向量乘积。
[
C = AB =
\begin{bmatrix}
— & a_1^T & — \
— & a_2^T & — \
\vdots & \vdots & \vdots \
— & a_m^T & —
\end{bmatrix}
B =
\begin{bmatrix}
— & a_1^T B & — \
— & a_2^T B & — \
\vdots & \vdots & \vdots \
— & a_m^T B & —
\end{bmatrix}
]
1.4 矩阵乘法符号说明
- (A^2) 表示 (AA),即矩阵乘积。
- (A^{\odot 2} = [A_{ij}^2]) 表示矩阵元素的逐元素平方。(如果 (A) 是对角矩阵,则 (A^2 = A^{\odot 2}))
- 若 (A^2 = M),则 (A = \sqrt{M}) 表示矩阵的平方根。
- ([\sqrt{M_{ij}}]) 表示矩阵元素的逐元素平方根。
2. 矩阵乘法的应用:数据矩阵操作
2.1 矩阵切片求和
设 (X) 是一个 (N×D) 的矩阵:
-
按行求和
:通过左乘一个 (1×N) 的全 1 矩阵得到一个 (1×D) 的矩阵,(1_N^T X = (\sum_{n} x_{n1}, \cdots, \sum_{n} x_{nD})),数据向量的均值为 (\bar{x} = \frac{1}{N} 1_N^T X)。
-
按列求和
:通过右乘一个 (D×1) 的全 1 矩阵得到一个 (N×1) 的矩阵,(X 1_D = (\sum_{d} x_{1d}, \cdots, \sum_{d} x_{Nd})^T)。
-
所有元素求和
:通过左乘和右乘全 1 向量得到矩阵所有元素的和,(1_N^T X 1_D = \sum_{ij} X_{ij}),总体均值为 (\bar{x} = \frac{1}{ND} 1_N^T X 1_D)。
2.2 矩阵行和列缩放
-
行缩放
:若左乘一个对角矩阵 (S = diag(s))(其中 (s) 是一个 (N) 维向量),则矩阵 (X) 的每一行将按 (s) 中的对应比例因子进行缩放。
[
diag(s) X =
\begin{bmatrix}
s_1 & \cdots & 0 \
\vdots & \ddots & \vdots \
0 & \cdots & s_N
\end{bmatrix}
\begin{bmatrix}
x_{1,1} & \cdots & x_{1,D} \
\vdots & \ddots & \vdots \
x_{N,1} & \cdots & x_{N,D}
\end{bmatrix} =
\begin{bmatrix}
s_1 x_{1,1} & \cdots & s_1 x_{N,1} \
\vdots & \ddots & \vdots \
s_N x_{1,D} & \cdots & s_N x_{N,D}
\end{bmatrix}
] -
列缩放
:若右乘一个对角矩阵 (S = diag(s))(其中 (s) 是一个 (D) 维向量),则矩阵 (X) 的每一列将按 (s) 中的对应元素进行缩放。
[
X diag(s) =
\begin{bmatrix}
x_{1,1} & \cdots & x_{1,D} \
\vdots & \ddots & \vdots \
x_{N,1} & \cdots & x_{N,D}
\end{bmatrix}
\begin{bmatrix}
s_1 & \cdots & 0 \
\vdots & \ddots & \vdots \
0 & \cdots & s_D
\end{bmatrix} =
\begin{bmatrix}
s_1 x_{1,1} & \cdots & s_D x_{1,D} \
\vdots & \ddots & \vdots \
s_1 x_{N,1} & \cdots & s_D x_{N,D}
\end{bmatrix}
] - 标准化操作 :可以将标准化操作写成矩阵形式 (standardize(X) = (X - 1_N \mu^T) diag(\sigma)^{-1}),其中 (\mu = \bar{x}) 是经验均值,(\sigma) 是经验标准差向量。
2.3 平方和矩阵与散布矩阵
-
平方和矩阵
:(S_0 \triangleq X^T X = \sum_{n=1}^{N} x_n x_n^T = \sum_{n=1}^{N}
\begin{bmatrix}
x_{n,1}^2 & \cdots & x_{n,1} x_{n,D} \
\vdots & \ddots & \vdots \
x_{n,D} x_{n,1} & \cdots & x_{n,D}^2
\end{bmatrix}
) -
散布矩阵
:(S_x \triangleq \sum_{n=1}^{N} (x_n - \bar{x})(x_n - \bar{x})^T = \sum_{n} x_n x_n^T - N \bar{x} \bar{x}^T)。
定义 (\tilde{X}) 为 (X) 的每一行减去均值 (\bar{x} = \frac{1}{N} X^T 1_N) 后的矩阵,即 (\tilde{X} = X - 1 \bar{x}^T = X - \frac{1}{N} 1_N 1_N^T X = C_N X),其中 (C_N \triangleq I_N - \frac{1}{N} 1_N 1_N^T) 是中心化矩阵。散布矩阵可以计算为 (S_x = \tilde{X}^T \tilde{X} = X^T C_N^T C_N X = X^T C_N X)。
2.4 格拉姆矩阵
(N×N) 的矩阵 (XX^T) 称为格拉姆矩阵,(K \triangleq XX^T =
\begin{bmatrix}
x_1^T x_1 & \cdots & x_1^T x_N \
\vdots & \ddots & \vdots \
x_N^T x_1 & \cdots & x_N^T x_N
\end{bmatrix}
)。
有时需要计算均值中心化后数据向量的内积 (\tilde{K} = \tilde{X} \tilde{X}^T)。如果只能访问特征相似性矩阵 (K) 而不是原始特征矩阵 (X),可以使用双重中心化技巧计算 (\tilde{K}):
(\tilde{K} = \tilde{X} \tilde{X}^T = C_N K C_N = K - \frac{1}{N} 1_N K - K \frac{1}{N} 1_N^T + \frac{1}{N^2} 1_N K 1_N^T)
2.5 距离矩阵
设 (X) 是一个 (N_x×D) 的数据矩阵,(Y) 是另一个 (N_y×D) 的数据矩阵。可以计算它们之间的平方成对距离:
(D_{ij} = (x_i - y_j)^T (x_i - y_j) = |x_i|^2 - 2 x_i^T y_j + |y_j|^2)
用矩阵形式表示为:设 (\hat{x} = [|x_1|^2; \cdots; |x_{N_x}|^2] = diag(XX^T)) 是一个向量,其每个元素是 (X) 中样本的平方范数,类似地定义 (\hat{y})。则 (D = \hat{x} 1_{N_y}^T - 2 XY^T + 1_{N_x} \hat{y}^T)。当 (X = Y) 时,(D = \hat{x} 1_N^T - 2 XX^T + 1_N \hat{x}^T)。这种向量化计算通常比使用循环快得多。
2.6 克罗内克积
如果 (A) 是一个 (m×n) 的矩阵,(B) 是一个 (p×q) 的矩阵,那么克罗内克积 (A \otimes B) 是一个 (mp×nq) 的分块矩阵:
[
A \otimes B =
\begin{bmatrix}
a_{11} B & \cdots & a_{1n} B \
\vdots & \ddots & \vdots \
a_{m1} B & \cdots & a_{mn} B
\end{bmatrix}
]
例如:
[
\begin{bmatrix}
a_{11} & a_{12} \
a_{21} & a_{22} \
a_{31} & a_{32}
\end{bmatrix}
\otimes
\begin{bmatrix}
b_{11} & b_{12} & b_{13} \
b_{21} & b_{22} & b_{23}
\end{bmatrix} =
\begin{bmatrix}
a_{11} b_{11} & a_{11} b_{12} & a_{11} b_{13} & a_{12} b_{11} & a_{12} b_{12} & a_{12} b_{13} \
a_{11} b_{21} & a_{11} b_{22} & a_{11} b_{23} & a_{12} b_{21} & a_{12} b_{22} & a_{12} b_{23} \
a_{21} b_{11} & a_{21} b_{12} & a_{21} b_{13} & a_{22} b_{11} & a_{22} b_{12} & a_{22} b_{13} \
a_{21} b_{21} & a_{21} b_{22} & a_{21} b_{23} & a_{22} b_{21} & a_{22} b_{22} & a_{22} b_{23} \
a_{31} b_{11} & a_{31} b_{12} & a_{31} b_{13} & a_{32} b_{11} & a_{32} b_{12} & a_{32} b_{13} \
a_{31} b_{21} & a_{31} b_{22} & a_{31} b_{23} & a_{32} b_{21} & a_{32} b_{22} & a_{32} b_{23}
\end{bmatrix}
]
克罗内克积有以下有用的恒等式:
- ((A \otimes B)^{-1} = A^{-1} \otimes B^{-1})
- ((A \otimes B) vec(C) = vec(BCA^T))
2.7 爱因斯坦求和约定
爱因斯坦求和约定(简称 einsum)是一种用于处理张量的符号捷径。例如,矩阵乘法 (C_{ij} = \sum_{k} A_{ik} B_{kj}) 可以简写成 (C_{ij} = A_{ik} B_{kj}),省略了求和符号 (\sum_{k})。
更复杂的例子:假设有一个三维张量 (S_{ntk}),其中 (n) 表示批次中的样本,(t) 表示序列中的位置,(k) 表示独热表示中的单词。设 (W_{kd}) 是一个嵌入矩阵,将稀疏的独热向量 (R^k) 映射到 (R^d) 中的稠密向量。可以将一批独热序列转换为一批嵌入序列:
(E_{ntd} = \sum_{k} S_{ntk} W_{kd})
可以计算每个序列的嵌入向量之和(以获得每个词袋的全局表示):
(E_{nd} = \sum_{k} \sum_{t} S_{ntk} W_{kd})
最后,可以将每个序列的向量表示通过另一个线性变换 (V_{dc}) 映射到具有 (c) 个标签的分类器的对数几率:
(L_{nc} = \sum_{d} E_{nd} V_{dc} = \sum_{d} \sum_{k} \sum_{t} S_{ntk} W_{kd} V_{dc})
在 einsum 符号中,写成 (L_{nc} = S_{ntk} W_{kd} V_{dc})。因为 (k) 和 (d) 在等式右边出现了两次,所以对它们求和;因为 (t) 在等式左边没有出现,所以也对它求和。
einsum 在 NumPy、TensorFlow、PyTorch 等库中都有实现。它的优势在于可以以最优顺序执行复杂表达式中的张量乘法,从而最小化时间和中间内存分配。einsum 的速度取决于操作执行的顺序,而这又取决于相关参数的形状。最优排序可以最小化计算图的树宽,但计算最优排序的时间通常与参数数量呈指数关系,因此通常使用贪心近似算法。如果预计多次使用相同形状但内容可能不同的张量进行相同的计算,可以预先计算一次最优排序并多次重用。
下面是一个简单的 mermaid 流程图,展示矩阵乘法的基本流程:
graph TD;
A[矩阵 A] -->|满足列数等于 B 的行数| M[矩阵乘法];
B[矩阵 B] -->|满足行数等于 A 的列数| M;
M --> C[结果矩阵 C];
表格总结矩阵乘法的不同视角:
| 视角 | 描述 |
| — | — |
| 向量 - 向量内积 | (C_{ij}) 等于 (A) 的第 (i) 行与 (B) 的第 (j) 列的内积 |
| 外积求和 | (AB) 等于 (A) 的列与 (B) 的行的外积之和 |
| 矩阵 - 向量乘积(列表示) | (C) 的列是 (A) 与 (B) 对应列的矩阵 - 向量乘积 |
| 矩阵 - 向量乘积(行表示) | (C) 的行是 (A) 对应行与 (B) 的矩阵 - 向量乘积 |
3. 矩阵求逆
3.1 方阵的逆
对于一个 (n×n) 的方阵 (A),其逆矩阵记为 (A^{-1}),满足 (A^{-1}A = I = AA^{-1}),其中 (I) 是单位矩阵。需要注意的是,矩阵 (A) 的逆存在的充要条件是其行列式 (det(A) \neq 0),若 (det(A) = 0),则称 (A) 为奇异矩阵。
方阵的逆具有以下性质(假设 (A, B \in R^{n×n}) 为非奇异矩阵):
- ((A^{-1})^{-1} = A)
- ((AB)^{-1} = B^{-1}A^{-1})
- ((A^{-1})^T = (A^T)^{-1} \triangleq A^{-T})
对于 (2×2) 的矩阵 (A =
\begin{bmatrix}
a & b \
c & d
\end{bmatrix}
),其逆矩阵为 (A^{-1} = \frac{1}{|A|}
\begin{bmatrix}
d & -b \
-c & a
\end{bmatrix}
),其中 (|A|) 是矩阵 (A) 的行列式。
对于分块对角矩阵,其逆矩阵可以通过分别求每个子块的逆得到,例如 (
\begin{bmatrix}
A & 0 \
0 & B
\end{bmatrix}^{-1}
=
\begin{bmatrix}
A^{-1} & 0 \
0 & B^{-1}
\end{bmatrix}
)。
3.2 舒尔补
考虑一个一般的分块矩阵 (M =
\begin{bmatrix}
E & F \
G & H
\end{bmatrix}
),假设 (E) 和 (H) 是可逆的。
舒尔补的定义如下:
- (M/H \triangleq E - FH^{-1}G),称为 (M) 关于 (H) 的舒尔补。
- (M/E \triangleq H - GE^{-1}F),称为 (M) 关于 (E) 的舒尔补。
分块矩阵 (M) 的逆矩阵可以通过以下两种等价的公式计算:
- (M^{-1} =
\begin{bmatrix}
(M/H)^{-1} & -(M/H)^{-1}FH^{-1} \
-H^{-1}G(M/H)^{-1} & H^{-1} + H^{-1}G(M/H)^{-1}FH^{-1}
\end{bmatrix}
)
- (M^{-1} =
\begin{bmatrix}
E^{-1} + E^{-1}F(M/E)^{-1}GE^{-1} & -E^{-1}F(M/E)^{-1} \
-(M/E)^{-1}GE^{-1} & (M/E)^{-1}
\end{bmatrix}
)
下面是证明分块矩阵求逆公式的步骤:
1. 为了将分块矩阵 (M) 对角化以便求逆,先左乘一个矩阵使右上角元素变为零:
[
\begin{bmatrix}
I & -FH^{-1} \
0 & I
\end{bmatrix}
\begin{bmatrix}
E & F \
G & H
\end{bmatrix}
=
\begin{bmatrix}
E - FH^{-1}G & 0 \
G & H
\end{bmatrix}
]
2. 再右乘一个矩阵使左下角元素变为零:
[
\begin{bmatrix}
E - FH^{-1}G & 0 \
G & H
\end{bmatrix}
\begin{bmatrix}
I & 0 \
-H^{-1}G & I
\end{bmatrix}
=
\begin{bmatrix}
E - FH^{-1}G & 0 \
0 & H
\end{bmatrix}
]
3. 综合上述两步可得:
[
\begin{bmatrix}
I & -FH^{-1} \
0 & I
\end{bmatrix}
M
\begin{bmatrix}
I & 0 \
-H^{-1}G & I
\end{bmatrix}
=
\begin{bmatrix}
E - FH^{-1}G & 0 \
0 & H
\end{bmatrix}
]
4. 对等式两边取逆:
[
\begin{bmatrix}
I & 0 \
-H^{-1}G & I
\end{bmatrix}^{-1}
M^{-1}
\begin{bmatrix}
I & -FH^{-1} \
0 & I
\end{bmatrix}^{-1}
=
\begin{bmatrix}
E - FH^{-1}G & 0 \
0 & H
\end{bmatrix}^{-1}
]
5. 计算各矩阵的逆并代入可得:
[
\begin{bmatrix}
E & F \
G & H
\end{bmatrix}^{-1}
=
\begin{bmatrix}
I & 0 \
-H^{-1}G & I
\end{bmatrix}
\begin{bmatrix}
(M/H)^{-1} & 0 \
0 & H^{-1}
\end{bmatrix}
\begin{bmatrix}
I & -FH^{-1} \
0 & I
\end{bmatrix}
]
6. 经过矩阵乘法运算得到最终结果:
[
\begin{bmatrix}
E & F \
G & H
\end{bmatrix}^{-1}
=
\begin{bmatrix}
(M/H)^{-1} & -(M/H)^{-1}FH^{-1} \
-H^{-1}G(M/H)^{-1} & H^{-1} + H^{-1}G(M/H)^{-1}FH^{-1}
\end{bmatrix}
]
下面是一个 mermaid 流程图,展示分块矩阵求逆的过程:
graph TD;
M[分块矩阵 M] -->|左乘矩阵| M1[变换后的矩阵 1];
M1 -->|右乘矩阵| M2[变换后的矩阵 2];
M2 -->|取逆| M_inv[分块矩阵 M 的逆矩阵];
表格总结方阵求逆的相关内容:
| 矩阵类型 | 逆矩阵计算方法 |
| — | — |
| (2×2) 矩阵 (A =
\begin{bmatrix}
a & b \
c & d
\end{bmatrix}
) | (A^{-1} = \frac{1}{|A|}
\begin{bmatrix}
d & -b \
-c & a
\end{bmatrix}
) |
| 分块对角矩阵 (
\begin{bmatrix}
A & 0 \
0 & B
\end{bmatrix}
) | (
\begin{bmatrix}
A^{-1} & 0 \
0 & B^{-1}
\end{bmatrix}
) |
| 分块矩阵 (M =
\begin{bmatrix}
E & F \
G & H
\end{bmatrix}
) | 见分块矩阵求逆公式 |
综上所述,矩阵乘法和求逆是线性代数中的重要操作,在数据处理、机器学习等领域有着广泛的应用。通过深入理解矩阵乘法的不同视角和矩阵求逆的方法,我们可以更高效地处理和分析数据。同时,利用爱因斯坦求和约定等工具可以简化张量运算,提高计算效率。在实际应用中,我们可以根据具体问题选择合适的矩阵操作方法,以达到最优的效果。
超级会员免费看
1832

被折叠的 条评论
为什么被折叠?



