线性代数速览
📚 线性代数速览:从标量到张量,为深度学习打基础
“没有线性代数,就没有现代深度学习。”
本文用最直观的方式,带你快速掌握深度学习中必备的线性代数核心概念。
🔢 1. 基本数学对象:标量 → 向量 → 矩阵 → 张量
| 类型 | 数学表示 | 形状(shape) | 例子 |
|---|---|---|---|
| 标量 | $x \in \mathbb{R}$ | 0 维 | 3.0, -2 |
| 向量 | $\mathbf{x} \in \mathbb{R}^n$ | 1 维(长度 = $n$) | [1, 2, 3, 4] |
| 矩阵 | $\mathbf{A} \in \mathbb{R}^{m \times n}$ | 2 维($m$ 行 × $n$ 列) | [[1,2],[3,4]] |
| 张量 | $\mathsf{X}$ | ≥3 维(如图像:H×W×C) | (2,3,4) 的三维数组 |
✅ 关键点:
- 标量是“单个数字”;
- 向量是“一串数字”,默认是列向量;
- 矩阵是“表格”,行×列;
- 张量是高维推广——深度学习中图像、批量数据都用它表示
🧮 2. 常见运算(附代码)
✅ 按元素运算(Element-wise)
两个同形状张量可直接加减乘除(广播也支持):
1 | A = np.array([[1, 2], [3, 4]]) |
✅ 求和与均值(降维)
1 | x = np.arange(4) # [0, 1, 2, 3] |
keepdims=True可保留轴(方便后续广播计算)。
✅ 点积(Dot Product)
两个向量的加权和:
1 | x, y = np.array([1, 2, 3]), np.ones(3) |
✅ 矩阵-向量积
将矩阵看作“一组行向量”,每行与向量做点积:
1 | A.shape # (5, 4) |
✅ 矩阵-矩阵乘法
⚠️ 注意:不是按元素乘!而是经典线性代数乘法:
1 | A = np.arange(20).reshape(5, 4) # (5,4) |
这是神经网络前向传播的核心操作!
📏 3. 范数(Norms):衡量“大小”的工具
范数是向量/矩阵的“长度”度量,在优化目标中至关重要。
| 范数 | 公式 | 特点 |
|---|---|---|
| $L_1$ | $\sum \lvert x_i \rvert$ | 对异常值鲁棒(稀疏性诱导) |
| $L_2$ | $\sqrt{\sum x_i^2}$ | 欧氏距离;最常用 |
| Frobenius(矩阵) | $\sqrt{\sum_{i,j} x_{ij}^2}$ | 矩阵的“欧氏长度” |
1 | u = np.array([3, -4]) |
💡 深度学习中常最小化 $L_2$ 范数平方(避免开方,梯度更友好)。
🔄 4. 转置与对称性
- 转置:行 ↔ 列
A.T或tf.transpose(A) - 对称矩阵:$\mathbf{A} = \mathbf{A}^\top$
1
2B = np.array([[1,2,3],[2,0,4],[3,4,5]])
np.allclose(B, B.T) # True → 是对称矩阵
✅ 小练习:
- $(\mathbf{A}^\top)^\top = \mathbf{A}$? ✔️
- $(\mathbf{A}+\mathbf{B})^\top = \mathbf{A}^\top + \mathbf{B}^\top$? ✔️
- $\mathbf{A} + \mathbf{A}^\top$ 总是对称? ✔️(因为转置后不变)
🧠 为什么这很重要?
- 数据表示:每个样本 = 向量;一批样本 = 矩阵;图像 = 3D张量。
- 模型计算:全连接层 = 矩阵-向量积;卷积本质也是张量运算。
- 损失函数:MSE = $L_2$ 范数平方;L1正则 = $L_1$ 范数。
- 优化基础:梯度下降依赖向量空间中的方向与距离。
📌 小结
| 概念 | 关键词 |
|---|---|
| 标量 | 0维,单个数 |
| 向量 | 1维,列表/列 |
| 矩阵 | 2维,表格;乘法 ≠ Hadamard |
| 张量 | N维,通用容器 |
| 范数 | 衡量大小;$L_1$, $L_2$, Frobenius |
| 转置 | 行列互换;对称矩阵自等于其转置 |
推荐视频
本文部分内容参考动手学深度学习,遵循 Apache 2.0 协议。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 From Zero to Hero!