写在前面:
学习深度学习时,我们常听到“张量”这个词——PyTorch 的 tensor、TensorFlow 的 Tensor……但你是否曾疑惑:
标量是张量吗?向量和矩阵有什么本质区别?为什么神经网络总说“输入是一个张量”?
本文将从数学本质出发,用直观语言厘清标量、向量、张量的区别与联系,并揭示它们在深度学习中的实际意义。
一、从“一个数”说起:什么是标量?
标量(Scalar) 是最简单的数学对象——它只是一个数值,没有方向,也没有结构。
- ✅ 数学定义:属于实数集或复数集的单个元素,如 $ a = 3.14 ,,, b = -2 $。
- 🌰 生活例子:室温 25°C、模型损失值 loss = 0.68、学习率 lr = 0.001。
- 🔍 关键特性:在坐标变换下保持不变。
比如你把坐标系旋转 90°,温度不会因此改变——它不依赖于“方向”。
在深度学习中,标量常作为超参数、标量输出或归约结果出现:
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);
- 在坐标变换下按线性规则变化(例如旋转后分量重新组合);
- 可进行点积、叉积、范数等运算。
import torch
x = torch.randn(5) # shape=(5,), ndim=1 → 向量(1阶张量)
print(x.shape, x.ndim) # torch.Size([5]) 1
⚠️ 注意:向量 ≠ 列表!它的数学结构赋予其几何与代数意义——这也是神经网络能“理解方向性”的基础。
三、多维世界的通用语言:张量
张量(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),我们更关注其形状、广播、计算图等实用属性。
这并不矛盾——就像“函数”在数学中是映射关系,在编程中是代码块;语境决定含义。
# PyTorch 示例:构建不同阶张量
scalar = torch.tensor(3.14) # rank 0
vector = torch.randn(4) # rank 1
matrix = torch.randn(3, 5) # rank 2
batch_img = torch.randn(16, 3, 224, 224) # rank 4 (CNN 输入)
四、为什么深度学习“离不开张量”?
因为神经网络的本质是高维空间中的函数拟合:
🌟 换句话说:张量是深度学习的“原子”——网络结构是骨架,张量数据是血肉。
五、常见误区澄清
| ❌ “张量就是高维数组” | ✅ 在 DL 框架中近似成立;严格数学中强调变换性质 |
| ❌ “向量必须是列向量” | ✅ 行/列只是表示习惯;本质是 1 阶张量 |
| ❌ “矩阵和张量是并列概念” | ✅ 矩阵是 2 阶张量的特例 |
| ❌ “batch size 越大张量阶数越高” | ✅ batch 是第 0 维,不影响阶数本质(仍是 4 阶) |
六、小结:一张表速查
| 标量 | 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 时合理组织输入/输出结构。


