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

矩阵的转置与逆矩阵

转置在注意力机制中频繁出现,逆矩阵帮助我们理解「可逆变换」——比如 PCA 中的坐标变换。

转置:行列互换

A (2×3)
123
456
AT (3×2)
14
25
36

原来 (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 动手实践

实例

import numpy as np

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)——转置在中间层帮助梯度在计算图中正确传导维度。