来源
- 课程:宋浩老师《线性代数》教学视频 2.0 版
- 分集:第 11 个分集,2.2 矩阵的加法、减法、数乘
- 视频:BV1h7pteyEww,P11
- 原始材料:截图目录
- 课堂例题:例题.md
1. 矩阵加法
只有同型矩阵才能相加。设
则矩阵之和就是对应位置元素相加:
结果仍然是一个 矩阵。
矩阵加法的第一步不是计算,而是检查 shape。若 与 不同型,则 在本节定义下没有意义。
2. 矩阵减法
矩阵减法定义为加上负矩阵:
因此同样要求 与 同型,并且
3. 加减法的运算规律
以下矩阵都应当同型:
-
交换律
-
结合律
-
零矩阵是加法单位元
-
负矩阵是加法逆元
-
减法可改写为加法
-
矩阵方程可以移项
“移项变号”来自等式两边同时加上 ,不是一条独立的神秘规则。
4. 矩阵的数乘
数 乘矩阵 ,就是用 乘 的每一个元素。若
则
数乘不会改变矩阵的 shape。
特别地:
5. 数乘的运算规律
设 为常数, 为同型矩阵,则:
-
数对矩阵加法的分配律
-
常数加法的分配律
-
数乘的结合律
-
单位数与负单位数
6. 线性组合
像
这样的表达式称为矩阵 的线性组合。要进行相加,这些矩阵必须同型。
本节的 就是最简单的矩阵线性组合。后面学习向量的线性组合、神经网络的加权求和时,会不断出现同样的结构。
7. 简单矩阵方程
矩阵加减法方程可以像普通代数方程一样移项,但每一步都必须保证矩阵同型。
例如:
更一般地,若 ,则
这里的 是数乘,不是矩阵除法。
8. NumPy / PyTorch 对照
NumPy
import numpy as np
A = np.array([[3, 0, 1], [-2, -1, 4]])
B = np.array([[1, 2, 3], [0, 5, 1]])
print(A.shape, B.shape) # (2, 3) (2, 3)
print(A + B) # 对应元素相加
print(A - B) # 对应元素相减
print(3 * A) # 数乘
print(3 * A + 2 * B) # 线性组合
PyTorch
import torch
A = torch.tensor([[3.0, 0.0, 1.0], [-2.0, -1.0, 4.0]])
B = torch.tensor([[1.0, 2.0, 3.0], [0.0, 5.0, 1.0]])
C = A + B
D = A - B
E = 3 * A + 2 * B
实际编程中的三个重要区别
-
广播(broadcasting)可能让不同 shape 的数组也能相加。
A = np.zeros((2, 3)) b = np.array([1, 2, 3]) print(A + b) # NumPy 把 b 自动扩展到每一行这属于数组库的广播规则,不是本节“两个同型矩阵相加”的基本定义。代码没有报错不等于数学含义一定正确。
-
A * B在 NumPy 和 PyTorch 中表示对应元素相乘。 本节的k * A是数乘;矩阵乘法将在 2.3 学习,代码通常使用A @ B。 -
A += B会原地修改A。 写训练代码时要留意数据是否还会被其他计算使用;PyTorch 自动求导对某些原地修改也会报错。
9. 与大模型的联系
梯度下降更新
模型参数 与梯度 具有相同 shape,一次最基本的更新是
其中 是学习率。这正是“矩阵数乘 + 矩阵减法”。
残差连接
Transformer 中常见
为了相加, 与 的 shape 必须兼容。若隐藏维度不同,通常先通过投影把形状调整一致。
权重衰减与模型融合
以及
也都是矩阵的线性组合。实际模型虽然使用高维张量,逐元素加减与数乘的思想完全相同。
本节易错点
- 不检查 shape 就直接相加。
- 把矩阵加法误写成行与行、列与列交叉组合;正确做法只是对应元素相加。
- 数乘时只乘一行或一部分元素;正确做法是乘每一个元素。
- 把 写成 ;正确结果是 。
- 在 NumPy 中误把广播成功当成数学推导正确。
- 把
A * B当成矩阵乘法。
本节自检
- 两个什么条件的矩阵才能相加?
- 为什么矩阵减法可以改写成加上负矩阵?
- 数乘会不会改变矩阵的 shape?
- 如何从 解出 ?
- 梯度更新 分别用了本节哪两种运算?
- NumPy 广播与数学课中的矩阵加法有什么区别?






