来源
1. 定义
设 A 为 n 阶方阵,k 为正整数,则 A 的 k 次幂定义为
Ak=k 个 AA⋅A⋯A.
特别规定
A0=In.
只有方阵才能反复与自身相乘,因此课程中谈“矩阵的幂”时,默认底数是方阵。
对应截图:01-方阵幂的定义.png
2. 同底数幂的性质
设 A 为方阵,k1,k2 为非负整数,则
Ak1Ak2=Ak1+k2,
(Ak1)k2=Ak1k2.
若 λ 为常数,k 为正整数,则
(λA)k=λkAk.
这些结论成立的关键是所有因子都是同一个 A,可以利用矩阵乘法的结合律重新分组。
对应截图:03-方阵幂的性质.png
3. 乘积、和差的幂不能随意套公式
矩阵乘法一般不满足交换律,所以通常
(AB)k=AkBk.
以平方为例:
(AB)2=ABAB,
而
A2B2=AABB.
把 ABAB 改排成 AABB 需要交换中间的 A 与 B。只有在 AB=BA 时,才可以推出
(AB)k=AkBk.
同理,一般情况下
(A+B)2=A2+AB+BA+B2,
其中 AB+BA 不能直接合并为 2AB。只有 AB=BA 时,才有
(A+B)2=A2+2AB+B2,
A2−B2=(A+B)(A−B)=(A−B)(A+B),
以及常见的立方和、立方差公式。
一个重要特例是单位矩阵 I:它和所有同阶方阵都可交换。因此关于
A±I 的平方、立方公式可以像普通多项式那样展开。
对应截图:
4. 方阵多项式
若
f(x)=amxm+am−1xm−1+⋯+a1x+a0,
则把方阵 A 代入后定义
f(A)=amAm+am−1Am−1+⋯+a1A+a0I.
常数项必须写成 a0I,这样它才是与其他项同阶的方阵。例如
f(x)=x3−x2+2x−3
对应
f(A)=A3−A2+2A−3I.
对应截图:08-方阵多项式定义.png
5. 计算高次幂的常见突破口
5.1 观察简单递推关系
若算出 A2=cA,则对 n≥1 有
An=cn−1A.
因此先算 A2 往往比直接连乘更重要。
5.2 写成列向量乘行向量
若 A=uvT,那么
A2=u(vTu)vT=(vTu)A,
进而
An=(vTu)n−1A.
这类矩阵通常每一行或每一列彼此成比例,秩至多为 1。
5.3 拆成 I+N
若 A=I+N 且 N2=O,因为 I 与 N 可交换,
An=(I+N)n=I+nN.
课堂例 1 就属于这一类。
对应截图:
6. NumPy / PyTorch 对照
NumPy
import numpy as np
A = np.array([[1, 1],
[0, 1]])
A3 = np.linalg.matrix_power(A, 3)
print(A3)
# [[1 3]
# [0 1]]
PyTorch
import torch
A = torch.tensor([[1., 1.],
[0., 1.]])
A3 = torch.linalg.matrix_power(A, 3)
编程时要特别区分:
np.linalg.matrix_power(A, k)、torch.linalg.matrix_power(A, k):矩阵的 k 次幂;
A ** k:通常是每个元素分别做 k 次方,不是矩阵幂;
A @ A:矩阵乘法,可用于手工构造 A2;
np.linalg.matrix_power 和 torch.linalg.matrix_power 还允许负指数,但这时 A 必须可逆。这是课程正整数幂定义的自然扩展。
库函数通常使用比顺序连乘更高效的算法。例如计算 A16 时,可以连续平方,而不必做 15 次普通连乘。
7. 与大模型的联系
矩阵幂表示“同一个线性变换重复执行”。若状态更新为
ht+1=Aht,
那么重复 k 次后
hk=Akh0.
这可用来理解循环网络、状态空间模型以及深层网络中的重复变换。实际 Transformer 各层权重通常不同,因此整个网络一般不是某一个矩阵的简单幂;但在权重共享或线性化分析中,矩阵幂仍然会出现。
矩阵幂也能解释数值稳定性:若某些方向在每次乘法中都被放大,Ak 可能迅速增大;若不断缩小,则可能趋近于零。这与深层网络中的梯度爆炸、梯度消失有相似的数学结构。
残差连接可粗略写成
ht+1=(I+F)ht.
重复相同线性残差块时,会得到 (I+F)k。其中的单位矩阵 I 为信息提供了直接传递路径。
本节易错点
- 非方阵不能定义通常意义下的 Ak。
- A0 是与 A 同阶的单位矩阵,不是零矩阵。
A ** k 在 NumPy 和 PyTorch 中通常是逐元素幂。
- 直接写 (AB)k=AkBk,忽略矩阵乘法不满足交换律。
- 直接把 AB+BA 合并成 2AB;只有在 AB=BA 时才可以。
- 在方阵多项式中把常数项 a0 写成一个数;正确写法是 a0I。
- 把 Am+An 误写成 Am+n;指数相加只对应乘法 AmAn。
本节自检
- 为什么只有方阵才能定义通常意义下的矩阵幂?
- A0 等于什么?它的阶数怎样确定?
- (A3)4 与 A3A4 分别等于什么?
- 在什么条件下可以写 (AB)k=AkBk?
- NumPy 中为什么不能用
A ** 3 代替矩阵三次幂?
- 为什么方阵多项式的常数项要写成 a0I?
- 若 A=uvT,如何把 An 化成 A 的倍数?