矩阵运算与线性变换
矩阵乘法不是一堆乘法再相加,而是整个空间被一次性改写
定义
矩阵是一个按行列排列的数字表格,它表示一次线性变换:输入向量经过这次变换得到输出向量,而这次变换恰好就是“矩阵乘法”。矩阵乘法把两个变换首尾相接,形状规则 (m×n)(n×p)=(m×p) 规定了它何时合法。特征值与奇异值分解则把一个复杂变换拆解成“旋转—拉伸—旋转”这样的基本动作。
直观理解
把一张印着方格纸的橡皮膜放在桌上,捏住它拉伸、旋转、倾斜——方格线会跟着变形,但始终保持笔直、平行线保持平行、原点不动。这类“不弯曲”的形变就是线性变换,而矩阵是这台形变机器的操作说明书:把它的每一列读出来,就是“原来朝东的那根箭头,如今指向哪里”。
同一个线性变换可以从两个方向理解:作为一次几何形变,或作为一次矩阵乘法
一组正态数据的协方差矩阵:对角线是各特征的方差,非对角线是两两相关。相关强的特征在降维时高度冗余(悬停看数值)
工作原理
- 01
形状规则:先问能不能乘
乘法的唯一硬性条件,是左矩阵的列数等于右矩阵的行数:(m×n)·(n×p) → (m×p)。深度学习里大量报错都源于“这一步形状对不上”。广播机制会在维度为 1 的地方悄悄复制数据——它让代码能跑,却也可能让结果悄悄错。
- 02
乘法即复合:先做一次变换,再做一次
C = A·B 的含义是“先施加 B,再施加 A”。正因为变换有先后顺序,矩阵乘法不可交换:A·B 与 B·A 通常不同,正如先旋转再平移与先平移再旋转,结果并不一样。
- 03
特征值与 SVD:找到变换的“骨架”
特征向量是变换后方向不变、只被拉伸的向量,拉伸倍数就是特征值;它只对方阵有定义。对任意矩阵,奇异值分解更进一步:把变换拆成“旋转 · 沿轴拉伸 · 再旋转”,拉伸量就是奇异值。按大小保留前面几项,就得到最佳的低秩近似——这正是降维、压缩与推荐的数学根据。
- 04
为什么 GPU 为矩阵乘法而生
一个 n×n 的矩阵乘法包含约 2n³ 次浮点运算,且每个输出元素彼此独立——这正是并行硬件的理想任务。GPU 用成千上万个简单核心同时执行同样的乘加,把原本要几分钟的运算压到毫秒级。张量核心把这一步进一步固化进电路,因此“矩阵乘法跑多快”几乎决定了训练与推理的成本。
对一幅图像数据集做主成分分析:前几个主方向就解释了大部分“能量”,这正是低秩近似的依据
应用场景
- 神经网络的一层:输入向量乘权重矩阵,就是一次线性变换
- 降维与压缩:对数据矩阵做 SVD,只留前几个奇异值即可近似还原
- 推荐系统:用户—商品评分矩阵的低秩分解补全缺失项
- 计算机图形学:平移、旋转、缩放、投影都写成矩阵,链式相乘即可叠加
常见误区
- 矩阵乘法不满足交换律。A·B 通常不等于 B·A,交换顺序往往代表完全不同的变换,代码与数学推导里都必须盯住次序。
- 特征值只对方阵有定义,而现实中的矩阵多半不是方阵。要理解任意形状的变换,需要用奇异值而不是特征值。
- 广播会把形状不符的运算“顺过去”,但它补的是大小为 1 的那一维,未必是你想要的那一维;因此静默的错误结果比直接报错更危险。
关键术语
- 转置
- 把矩阵沿对角线翻面,行变列、列变行
- 特征向量 / 特征值
- 变换后方向不变、只被缩放的向量及其缩放倍数
- 奇异值分解 SVD
- 把任意矩阵写成“旋转·拉伸·旋转”的乘积
- 秩
- 变换实际展开的独立方向数目,不超过行数与列数