标量向量和张量的区别
标量、向量、张量:深度学习中的“数据基石”
写在前面:
学习深度学习时,我们常听到“张量”这个词——PyTorch 的tensor、TensorFlow 的Tensor……但你是否曾疑惑:
标量是张量吗?向量和矩阵有什么本质区别?为什么神经网络总说“输入是一个张量”?
本文将从数学本质出发,用直观语言厘清标量、向量、张量的区别与联系,并揭示它们在深度学习中的实际意义。
一、从“一个数”说起:什么是标量?
标量(Scalar) 是最简单的数学对象——它只是一个数值,没有方向,也没有结构。
- ✅ 数学定义:属于实数集或复数集的单个元素,如 $ a = 3.14 $,$ b = -2 $。
- 🌰 生活例子:室温 25°C、模型损失值
loss = 0.68、学习率lr = 0.001。 - 🔍 关键特性:在坐标变换下保持不变。
比如你把坐标系旋转 90°,温度不会因此改变——它不依赖于“方向”。
在深度学习中,标量常作为超参数、标量输出或归约结果出现:
1 | loss = torch.mean((y_pred - y_true)**2) # loss 是一个标量(0阶张量) |
💡 小知识:在 PyTorch 中,
torch.tensor(5.0)的.ndim为 0,.shape为()—— 它就是 0 阶张量。
二、带方向的“一维数组”:向量
当你需要描述有大小又有方向的量时,就引入了向量(Vector)。
-
✅ 数学定义:有序的数列,属于 $ \mathbb{R}^n $ 空间,如 $ \mathbf{v} = [v_1, v_2, …, v_n]^T $。
-
🌰 深度学习例子:
- 词嵌入:
word_vec ∈ ℝ^{300} - 网络偏置项:
b ∈ ℝ^{64} - 梯度:
∇_w L ∈ ℝ^{d}(对权重的导数)
- 词嵌入:
-
🔍 关键特性:
- 是 1 阶张量(rank-1 tensor);
- 在坐标变换下按线性规则变化(例如旋转后分量重新组合);
- 可进行点积、叉积、范数等运算。
1 | import torch |
⚠️ 注意:向量 ≠ 列表!它的数学结构赋予其几何与代数意义——这也是神经网络能“理解方向性”的基础。
三、多维世界的通用语言:张量
张量(Tensor) 是标量与向量的自然推广——它是任意维度的数组,也是现代深度学习的“数据通用格式”。
3.1 什么是“阶”(Rank / Order)?
张量的阶(也称秩) = 维度个数(不是元素总数!):
| 阶数 | 名称 | 形状示例 | 深度学习典型场景 |
|---|---|---|---|
| 0 | 标量 | () |
损失值、学习率 |
| 1 | 向量 | (n,) |
特征、嵌入、梯度 |
| 2 | 矩阵 | (m, n) |
全连接层权重 W ∈ ℝ^{m×n} |
| 3 | 三维张量 | (N, T, D) |
RNN 输入序列(batch × time × dim) |
| 4 | 四维张量 | (N, C, H, W) |
CNN 图像 batch(样本 × 通道 × 高 × 宽) |
✅ 重要结论:所有标量、向量、矩阵都是张量的特例。
3.2 张量 ≠ 多维数组?(数学 vs 工程视角)
- 数学上:张量是定义在向量空间上的多重线性映射,强调其在坐标变换下的协变/逆变行为(比如应力张量、黎曼曲率张量)。
- 工程/深度学习中:张量 ≈ “支持自动微分的多维数组”(如 PyTorch Tensor),我们更关注其形状、广播、计算图等实用属性。
这并不矛盾——就像“函数”在数学中是映射关系,在编程中是代码块;语境决定含义。
1 | # PyTorch 示例:构建不同阶张量 |
四、为什么深度学习“离不开张量”?
因为神经网络的本质是高维空间中的函数拟合:
- 输入是张量:一张图是
(H, W, C),一个句子是(T, D); - 参数是张量:卷积核是
(K, K, Cin, Cout),Embedding 表是(V, D); - 运算基于张量代数:矩阵乘法(2阶×2阶→2阶)、广播(低阶→高阶)、逐元素操作;
- 自动微分作用于张量:梯度反传时,每个张量节点都需计算局部导数。
🌟 换句话说:张量是深度学习的“原子”——网络结构是骨架,张量数据是血肉。
五、常见误区澄清
| 误区 | 正确理解 |
|---|---|
| ❌ “张量就是高维数组” | ✅ 在 DL 框架中近似成立;严格数学中强调变换性质 |
| ❌ “向量必须是列向量” | ✅ 行/列只是表示习惯;本质是 1 阶张量 |
| ❌ “矩阵和张量是并列概念” | ✅ 矩阵是 2 阶张量的特例 |
| ❌ “batch size 越大张量阶数越高” | ✅ batch 是第 0 维,不影响阶数本质(仍是 4 阶) |
六、小结:一张表速查
| 类型 | 阶数 | 形状示例 | 是否张量? | DL 中典型角色 |
|---|---|---|---|---|
| 标量 | 0 | () |
✅ 是(0阶) | loss, lr, count |
| 向量 | 1 | (5,) |
✅ 是(1阶) | embedding, bias, grad |
| 矩阵 | 2 | (4,6) |
✅ 是(2阶) | weight, attention Q/K/V |
| 张量 | ≥3 | (32,3,224,224) |
✅ 是(n阶) | input, feature map, hidden state |
写在最后:从“知道”到“用好”
理解标量→向量→张量的演进,不只是为了应付面试题,更是为了:
- 读懂论文中的公式维度(比如
X ∈ ℝ^{N×D}); - 调试 Shape Error 时快速定位问题(是少了一维?还是广播失败?);
- 设计自定义 Layer 时合理组织输入/输出结构。
本文部分内容参考动手学深度学习,遵循 Apache 2.0 协议。