矩阵的转置与逆矩阵
转置在注意力机制中频繁出现,逆矩阵帮助我们理解「可逆变换」——比如 PCA 中的坐标变换。
转置:行列互换
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
原来 (i, j) 位置的值,经过转置后到了 (j, i) 位置。 形状从 m×n 变成 n×m。
逆矩阵:撤销变换
矩阵 A 代表一个线性变换。\( A^{-1} \) 代表「撤销 A 的效果」。
数学表达:\( AA^{-1} = A^{-1}A = I \)(I 是单位矩阵,相当于数字 1)。
只有 方阵且满秩 的矩阵才有逆矩阵。
非方阵或不满秩的方阵是「奇异矩阵」,没有逆——相当于一个不可逆的操作。
关键性质
- 乘积转置反转顺序:\( (\mathbf{AB})^T = \mathbf{B}^T\mathbf{A}^T \)
- 乘积逆也反转顺序:\( (\mathbf{AB})^{-1} = \mathbf{B}^{-1}\mathbf{A}^{-1} \)
生活例子
转置:Excel 表格的行列互换
你把一张「姓名在行、月份在列」的销售表转置后,变成「姓名在列、月份在行」。
数据没变,只是排列方式变了——这就是转置。
逆矩阵:Ctrl+Z 撤销
你做了一个旋转 + 缩放操作(矩阵 A),想还原回去(A^{-1})。
两次操作复合 = 什么都没变(AA^{-1} = I,恒等变换)。
数学定义
转置
\[ (\mathbf{A}^T)_{ij} = \mathbf{A}_{ji} \]逆矩阵
对于 n×n 方阵 A,如果存在 B 使得 \( \mathbf{AB} = \mathbf{BA} = \mathbf{I}_n \),则 B = A^{-1}。
Python 动手实践
实例
A = np.array([[1, 2, 3], [4, 5, 6]])
print("A (2x3):\n", A)
print("A.T (3x2):\n", A.T)
print()
# 验证 (AB)^T = B^T @ A^T
B = np.array([[1,2],[3,4],[5,6]]) # 3x2
AB = A @ B # (2,3) @ (3,2) = (2,2)
print("(AB)^T:\n", AB.T)
print("B^T @ A^T:\n", B.T @ A.T)
print("相等:", np.allclose(AB.T, B.T @ A.T))
print()
# 逆矩阵
C = np.array([[2, 1], [5, 3]]) # 2x2 方阵
C_inv = np.linalg.inv(C)
print("C:\n", C)
print("C^{-1}:\n", C_inv)
print("C @ C^{-1} = I:\n", C @ C_inv)
# 奇异矩阵没有逆
D = np.array([[1, 2], [2, 4]]) # 第2行是第1行的2倍
try:
np.linalg.inv(D)
except np.linalg.LinAlgError:
print("\n奇异矩阵 D 没有逆矩阵(第2行=2×第1行)")
A (2x3):
[[1 2 3]
[4 5 6]]
A.T (3x2):
[[1 4]
[2 5]
[3 6]]
C @ C^{-1} = I:
[[1. 0.]
[0. 1.]]
奇异矩阵 D 没有逆矩阵(第2行=2×第1行)
AI 中的应用场景
注意力机制的 K^T 操作
\( QK^T \) 中 Key 矩阵的转置让 (seq_len, d_k) 的 Q 能与 (seq_len, d_k) 的 K 做矩阵乘法——转置将 K 变为 (d_k, seq_len),使内维匹配。这个 K^T 是所有 Transformer 模型注意力计算中最关键的维度变换。
线性回归的闭式解
\( \hat{\beta} = (X^TX)^{-1}X^Ty \)——转置和逆矩阵同时出现。X^T X 保证结果是对称正定矩阵(可逆),然后求逆得到解析解。sklearn 的 LinearRegression 在不加正则化时底层就算这个。
梯度下降中的参数更新
在反向传播中,权重梯度矩阵的形状必须与权重矩阵匹配才能做减法更新。例如 W 是 (d_out, d_in),它的梯度 \nabla_W L 也是 (d_out, d_in)——转置在中间层帮助梯度在计算图中正确传导维度。
