宋浩数学题库
学习计划章节题库

线性代数资料库

章节目录

2 章 · 17 节 · 40 份资料

46 道例题与练习
第 1 章 行列式7
1.2 排列与逆序
练习题2答案与解析
1.3 n阶行列式
练习题答案与解析
1.4 行列式的性质
练习题答案与解析
1.5 行列式按一行列展开
练习题答案与解析
1.6 行列式按多行列展开
练习题答案与解析
1.7 行列式的计算
练习题答案与解析
1.8 克莱姆法则
练习题答案与解析
第 2 章 矩阵10
2.1 矩阵的概念
视频截图笔记课堂例题2
2.2 矩阵的加减法与数乘
视频截图笔记课堂例题5
2.3 矩阵的乘法
视频截图笔记课堂例题7
2.4 方阵的幂
视频截图笔记课堂例题7
2.5 矩阵的转置
视频截图笔记课堂例题答案与解析
2.6 方阵的行列式
视频截图笔记课堂例题答案与解析
2.7 方阵的伴随矩阵
视频截图笔记练习题3答案与解析
2.8 矩阵方程
视频截图笔记练习题6答案与解析
2.8 逆矩阵
视频截图笔记练习题7答案与解析
2.8 逆矩阵2
视频截图笔记练习题7答案与解析
第 2 章 矩阵/2.3 矩阵的乘法

视频截图笔记

2.3 矩阵的乘法

笔记.md

课堂例题
视频截图笔记课堂例题

来源

  • 课程:宋浩老师《线性代数》教学视频 2.0 版
  • 分集:第 12 个分集,2.3 矩阵的乘法
  • 视频:BV1h7pteyEww,P12
  • 原始材料:截图目录
  • 课堂例题:例题.md

1. 能不能乘、结果多大

设

A=(aij)m×n,B=(bij)n×s,A=(a_{ij})_{m\times n},\qquad B=(b_{ij})_{n\times s},A=(aij​)m×n​,B=(bij​)n×s​,

则 AAA 的列数等于 BBB 的行数,乘积 ABABAB 有意义,并且

AB=C=(cij)m×s.AB=C=(c_{ij})_{m\times s}.AB=C=(cij​)m×s​.

口诀:中间相等可以相乘,结果的形状取两头。

写成 shape 就是

(m×n)⏟A(n×s)⏟B⟶(m×s)⏟AB.\underbrace{(m\times n)}_A\underbrace{(n\times s)}_B \longrightarrow \underbrace{(m\times s)}_{AB}.A(m×n)​​B(n×s)​​⟶AB(m×s)​​.
  • 中间的两个 nnn 相等:说明可以相乘;
  • 外面的 m,sm,sm,s:决定结果是 m×sm\times sm×s。

例如

A3×2B2×4=(AB)3×4.A_{3\times2}B_{2\times4}=(AB)_{3\times4}.A3×2​B2×4​=(AB)3×4​.

这个口诀只判断“能否相乘”和“结果 shape”,还没有计算结果中的元素。

2. 怎样计算:左行乘右列

乘积 C=ABC=ABC=AB 的第 iii 行第 jjj 列元素为

cij=ai1b1j+ai2b2j+⋯+ainbnj=∑k=1naikbkj.c_{ij}=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdots+a_{in}b_{nj} =\sum_{k=1}^{n}a_{ik}b_{kj}.cij​=ai1​b1j​+ai2​b2j​+⋯+ain​bnj​=k=1∑n​aik​bkj​.

也就是:

ABABAB 的第 (i,j)(i,j)(i,j) 个元素 = AAA 的第 iii 行与 BBB 的第 jjj 列做点积。

计算步骤:

  1. 从左矩阵取一行;
  2. 从右矩阵取一列;
  3. 对应位置相乘;
  4. 把所有乘积相加。

矩阵乘法不是对应元素相乘。对应元素相乘叫 Hadamard 积,在 NumPy/PyTorch 中通常由 A * B 表示。

3. 为什么顺序重要

即使 ABABAB 与 BABABA 都有意义,也通常有

AB≠BA.AB\ne BA.AB=BA.

原因是:

  • ABABAB 用 AAA 的行乘 BBB 的列;
  • BABABA 用 BBB 的行乘 AAA 的列;
  • 两者甚至可能具有不同 shape。

另外,ABABAB 有意义并不能保证 BABABA 有意义。每次调换顺序后,都要重新检查中间维度。

从“线性变换的复合”看,ABx=A(Bx)ABx=A(Bx)ABx=A(Bx),表示先执行 BBB,再执行 AAA。改变顺序通常就改变了运算过程和结果。

4. 矩阵乘法不满足的规律

4.1 一般不满足交换律

AB≠BA.AB\ne BA.AB=BA.

只有满足 AB=BAAB=BAAB=BA 的特定方阵,才称 A,BA,BA,B 可交换。

4.2 一般不满足消去律

即使

AB=AC,A≠O,AB=AC,\qquad A\ne O,AB=AC,A=O,

也不能直接推出 B=CB=CB=C。同理,BA=CABA=CABA=CA 且 A≠OA\ne OA=O 也不能直接推出 B=CB=CB=C。

以后学习可逆矩阵后会看到:只有当公共因子可逆时,才能在正确的一侧乘逆矩阵完成消去。

4.3 非零矩阵的乘积可能为零矩阵

A≠O,B≠OA\ne O,\qquad B\ne OA=O,B=O

并不能保证 AB≠OAB\ne OAB=O。矩阵存在“零因子”,这与普通实数乘法不同。

5. 矩阵乘法满足的规律

在各乘积都有意义的前提下:

  1. 结合律

    (AB)C=A(BC).(AB)C=A(BC).(AB)C=A(BC).
  2. 分配律

    (A+B)C=AC+BC,(A+B)C=AC+BC,(A+B)C=AC+BC, C(A+B)=CA+CB.C(A+B)=CA+CB.C(A+B)=CA+CB.

    注意公共因子在左边还是右边,不能随意换位置。

  3. 数乘结合

    k(AB)=(kA)B=A(kB).k(AB)=(kA)B=A(kB).k(AB)=(kA)B=A(kB).
  4. 单位矩阵

    AI=IA=A.AI=IA=A.AI=IA=A.

    单位矩阵在矩阵乘法中的作用类似数字 111。

  5. 数量矩阵

    若 D=aID=aID=aI,则

    DB=BD=aBDB=BD=aBDB=BD=aB

    (矩阵阶数匹配时)。

  6. 同阶对角矩阵

    diag⁡(a1,…,an)diag⁡(b1,…,bn)=diag⁡(a1b1,…,anbn).\operatorname{diag}(a_1,\ldots,a_n) \operatorname{diag}(b_1,\ldots,b_n) =\operatorname{diag}(a_1b_1,\ldots,a_nb_n).diag(a1​,…,an​)diag(b1​,…,bn​)=diag(a1​b1​,…,an​bn​).

    所以任意两个同阶对角矩阵可交换。

6. 可交换矩阵

若同阶方阵 A,BA,BA,B 满足

AB=BA,AB=BA,AB=BA,

则称 AAA 与 BBB 可交换。

常见结论:

  • 可交换矩阵一定是同阶方阵;
  • 单位矩阵与任意同阶方阵可交换;
  • 数量矩阵 aIaIaI 与任意同阶方阵可交换;
  • 任意两个同阶对角矩阵可交换;
  • 若计算得到 AB≠BAAB\ne BAAB=BA,则一定不可交换。

“都是方阵”或“同阶”只是必要的 shape 条件,不足以保证可交换。

7. NumPy / PyTorch 对照

NumPy

import numpy as np

A = np.array([[-1, 1, 2],
              [ 3, 0, 1]])       # (2, 3)
B = np.array([[ 1, 2],
              [ 0, 3],
              [-1, 1]])          # (3, 2)

AB = A @ B                       # (2, 2)
BA = B @ A                       # (3, 3)

print(A.shape, B.shape, AB.shape, BA.shape)
print(np.matmul(A, B))            # 等价写法

二维矩阵相乘优先使用 @ 或 np.matmul。np.dot 在一维、二维和高维输入时语义不同,阅读复杂代码时不如 @ 直观。

PyTorch

import torch

A = torch.tensor([[-1., 1., 2.],
                  [ 3., 0., 1.]])
B = torch.tensor([[ 1., 2.],
                  [ 0., 3.],
                  [-1., 1.]])

AB = A @ B
AB2 = torch.matmul(A, B)
AB3 = torch.mm(A, B)              # 只用于二维矩阵

torch.matmul 和 @ 还支持批量矩阵乘法,并会处理前面的 batch 维;torch.mm 只接受二维输入。

编程经验

  1. 先打印 shape,再写乘法。

    print(A.shape, B.shape)
    assert A.shape[-1] == B.shape[-2]
    C = A @ B
    
  2. 不要把 * 当矩阵乘法。 A * B 通常是逐元素相乘,并且可能触发广播。

  3. 批量矩阵乘法仍遵守口诀。 对形如 (..., m, n) @ (..., n, s) 的张量,最后两个维度得到 (..., m, s),前面的维度按广播规则处理。

  4. 浮点数下结合顺序会影响性能和微小误差。 数学上 (AB)C=A(BC)(AB)C=A(BC)(AB)C=A(BC),但有限精度计算的舍入顺序不同,结果末位可能有细小差异;库也会选择更高效的内核与计算顺序。

  5. nn.Linear 的权重存储顺序容易迷惑。 若输入 X 的 shape 是 (batch, in_features),PyTorch 的 weight 存为 (out_features, in_features),实际计算相当于:

    Y = X @ weight.T + bias
    

8. 与大模型的联系

8.1 线性投影

设一批 token 表示为

XB×din,X_{B\times d_{\text{in}}},XB×din​​,

权重为

Wdin×dout,W_{d_{\text{in}}\times d_{\text{out}}},Wdin​×dout​​,

则

Y=XW,(B×din)(din×dout)→B×dout.Y=XW,\qquad (B\times d_{\text{in}})(d_{\text{in}}\times d_{\text{out}}) \to B\times d_{\text{out}}.Y=XW,(B×din​)(din​×dout​)→B×dout​.

这正是“中间相等,形状取两头”。词嵌入投影、Q/K/V 投影、MLP 上投影与下投影都在反复做这件事。

8.2 注意力分数

单个注意力头中,若

Q∈RT×dk,K∈RT×dk,Q\in\mathbb R^{T\times d_k},\qquad K\in\mathbb R^{T\times d_k},Q∈RT×dk​,K∈RT×dk​,

则

QKT:(T×dk)(dk×T)→T×T.QK^\mathsf T:\qquad (T\times d_k)(d_k\times T)\to T\times T.QKT:(T×dk​)(dk​×T)→T×T.

得到每个 token 对所有 token 的注意力分数。再与

V∈RT×dvV\in\mathbb R^{T\times d_v}V∈RT×dv​

相乘:

softmax⁡(QKT)V:(T×T)(T×dv)→T×dv.\operatorname{softmax}(QK^\mathsf T)V:\qquad (T\times T)(T\times d_v)\to T\times d_v.softmax(QKT)V:(T×T)(T×dv​)→T×dv​.

真实实现常使用 (batch, heads, T, d_k),但最后两维仍然遵守同一个口诀。

8.3 顺序就是计算流程

神经网络中的矩阵乘法表示线性变换的复合。ABxABxABx 表示先用 BBB 变换 xxx,再用 AAA;改成 BAxBAxBAx 就改变了模型的计算含义。因此矩阵乘法不满足交换律,不只是考试规则,也是网络结构必须固定顺序的原因。

本节易错点

  • 误以为两个矩阵同型才能相乘;真正要检查的是左矩阵列数与右矩阵行数。
  • 中间维度相等后,把结果 shape 写成中间维度;应当取两头。
  • 计算元素时做“行乘行”或“列乘列”;正确做法是左行乘右列。
  • 用 A * B 代替 A @ B。
  • 默认 AB=BAAB=BAAB=BA,或认为 ABABAB 有意义就必有 BABABA。
  • 从 AB=ACAB=ACAB=AC 且 A≠OA\ne OA=O 直接消去 AAA。
  • 从 AB=OAB=OAB=O 推出 A=OA=OA=O 或 B=OB=OB=O。
  • 把“同阶方阵”误当成“可交换”的充分条件。

本节自检

  1. A4×3B3×7A_{4\times3}B_{3\times7}A4×3​B3×7​ 是否有意义?结果 shape 是什么?
  2. ABABAB 的第 (i,j)(i,j)(i,j) 个元素怎样计算?
  3. 为什么 ABABAB 有意义时,BABABA 仍可能没有意义?
  4. 矩阵乘法不满足哪两条普通数乘法中熟悉的规律?
  5. QT×dkKTQ_{T\times d_k}K^\mathsf TQT×dk​​KT 的结果为什么是 T×TT\times TT×T?

原始课程材料

课堂截图

20 张
2.3 矩阵的乘法课堂截图 1
01-矩阵乘法定义引入.png
2.3 矩阵的乘法课堂截图 2
02-矩阵相乘的条件.png
2.3 矩阵的乘法课堂截图 3
03-乘积矩阵的形状.png
2.3 矩阵的乘法课堂截图 4
04-例01-计算AB与BA题目.png
2.3 矩阵的乘法课堂截图 5
05-例01-计算AB与BA板书.png
2.3 矩阵的乘法课堂截图 6
06-例02-单向可乘.png
2.3 矩阵的乘法课堂截图 7
07-例03-列矩阵与行矩阵相乘.png
2.3 矩阵的乘法课堂截图 8
08-乘法不满足交换律.png
2.3 矩阵的乘法课堂截图 9
09-乘法不满足消去律.png
2.3 矩阵的乘法课堂截图 10
10-例04-消去律反例.png
2.3 矩阵的乘法课堂截图 11
11-非零矩阵乘积可为零.png
2.3 矩阵的乘法课堂截图 12
12-矩阵乘法运算规律.png
2.3 矩阵的乘法课堂截图 13
13-单位矩阵与数量矩阵.png
2.3 矩阵的乘法课堂截图 14
14-对角矩阵相乘.png
2.3 矩阵的乘法课堂截图 15
15-对角矩阵乘法板书.png
2.3 矩阵的乘法课堂截图 16
16-例05-计算ABC.png
2.3 矩阵的乘法课堂截图 17
17-可交换矩阵定义.png
2.3 矩阵的乘法课堂截图 18
18-可交换矩阵结论.png
2.3 矩阵的乘法课堂截图 19
19-例06-判断矩阵是否可交换.png
2.3 矩阵的乘法课堂截图 20
20-例07-求全部可交换矩阵.png
上一份课堂例题下一份课堂例题