矩阵加法、乘法、转置与分块
层级:A|必学
1. 矩阵运算不是逐元素运算的别名
矩阵加法确实逐元素进行,但矩阵乘法表示线性变换的复合,规则与逐元素乘完全不同。深度学习的全连接层、批量线性回归、协方差、注意力和反向传播都依赖形状正确的矩阵乘法。
2. 矩阵加法与数乘
只有同形状矩阵可以相加:
(A+B)ij=aij+bij.
标量乘矩阵逐元素缩放:
(cA)ij=caij.
它们满足交换律、结合律和分配律。若形状不同,数学上不能直接相加;程序广播是额外约定。
3. 矩阵—向量乘法
若 A∈Rm×n、x∈Rn,则
y=Ax∈Rm,
第 i 个分量为
yi=j=1∑naijxj.
可以从两种角度理解:
- 按行:yi 是第 i 行与 x 的内积;
- 按列:输出是 A 各列按 xj 加权的线性组合。
例:
[1324][56]=[1⋅5+2⋅63⋅5+4⋅6]=[1739].
4. 矩阵乘法
若
A∈Rm×n,B∈Rn×p,
则
C=AB∈Rm×p,
且
cik=j=1∑naijbjk.
口诀“内部维度相等,输出保留外部维度”:
(m×n)(n×p)=m×p.
cik 是 A 第 i 行与 B 第 k 列的内积。
5. 为什么这样定义乘法
假设先做线性变换 z=Bx,再做 y=Az:
y=A(Bx)=(AB)x.
因此矩阵乘法精确表示线性变换的复合。运算次序从右向左:AB 表示先应用 B,再应用 A。
6. 乘法性质与不交换性
矩阵乘法满足:
(AB)C=A(BC),
A(B+C)=AB+AC.
但一般
AB=BA.
有时 AB 有定义而 BA 无定义;即使都存在,形状和数值也可能不同。不能像标量代数那样随意调换矩阵顺序。
7. 单位矩阵与零矩阵
只要形状匹配:
ImA=A,AIn=A,
0A=0,A0=0.
但矩阵存在“零因子”:可能 A=0、B=0,却 AB=0。因此不能总从 AB=AC 消去 A,除非 A 具有足够的可逆性。
8. 转置
转置交换行与列:
(AT)ij=aji.
若 A 是 m×n,则 AT 是 n×m。常用规则:
(AT)T=A,
(A+B)T=AT+BT,
(AB)T=BTAT.
最后一条必须反转顺序,可理解为复合变换反向展开。
9. 逐元素乘法
Hadamard 乘积记为
A⊙B,(A⊙B)ij=aijbij.
要求两矩阵同形状。它与矩阵乘法不同。深度学习中的门控、掩码和逐元素激活导数常用 Hadamard 乘。代码里的 * 是逐元素还是矩阵乘,取决于语言与类型;必须查清。
10. 外积与 Gram 矩阵
列向量 x∈Rm、y∈Rn 的外积
xyT∈Rm×n,
第 (i,j) 项为 xiyj。外积常用于协方差、秩一更新和梯度。
对数据矩阵 X∈Rn×d:
- XTX 是 d×d,比较特征与特征;
- XXT 是 n×n,比较样本与样本。
两者不可混淆。
11. 分块矩阵
大矩阵可按兼容形状分块:
A=[A11A21A12A22].
只要块的边界匹配,就能像标量一样做块乘法,但每个“乘法”仍是矩阵乘法。例如
[AB][xy]=Ax+By.
分块有助于理解多组特征、偏置合并和多任务参数。
12. 批量神经网络层
若每行一个样本,输入 X∈Rn×d,权重 W∈Rd×h,偏置 b∈Rh:
Z=XW+1nbT∈Rn×h.
它一次为 n 个样本计算 h 个隐藏单元。程序里的广播省略了 1n。
易错点
- 矩阵乘法不是逐元素乘法。
- AB 一般不等于 BA。
- (AB)T=BTAT,顺序反转。
- XTX 与 XXT 形状、语义不同。
- 能相乘不代表能相加;相加要求整体形状相同。
常见问答
Q1:矩阵乘法为什么不能交换?
因为它表示函数复合。先旋转再拉伸通常不同于先拉伸再旋转,正如两个非交换的程序步骤。
Q2:矩阵乘法结合律允许随便加括号吗?
数学结果相同,但计算成本可能差别巨大。例如链式乘法应选择中间矩阵较小的顺序。
Q3:X @ W + b 为什么能运行?
@ 做矩阵乘法;b 按框架的广播规则复制到每一行。数学上等价于加 1bT。
练习
- 判断 (3×4)(4×2) 的输出形状。
- 计算 [102−1][34]。
- 若 A 为 2×3、B 为 3×5,BA 是否有定义?
- 写出 (ABC)T。
- X 为 100×20,求 XTX 与 XXT 的形状。
- 给出两个非零 2×2 矩阵,使其乘积为零矩阵。
答案与提示
- 3×2。
- (11,−4)T。
- 无定义,因为 (3×5)(2×3) 的内部维度不匹配。
- CTBTAT。
- 20×20 与 100×100。
- 例如 A=[1000],B=[0001]。