标量、向量、张量:深度学习中的“数据基石”

写在前面
学习深度学习时,我们常听到“张量”这个词——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
2
3
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),我们更关注其形状、广播、计算图等实用属性。

这并不矛盾——就像“函数”在数学中是映射关系,在编程中是代码块;语境决定含义

1
2
3
4
5
# 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 输入)

四、为什么深度学习“离不开张量”?

因为神经网络的本质是高维空间中的函数拟合

  1. 输入是张量:一张图是 (H, W, C),一个句子是 (T, D)
  2. 参数是张量:卷积核是 (K, K, Cin, Cout),Embedding 表是 (V, D)
  3. 运算基于张量代数:矩阵乘法(2阶×2阶→2阶)、广播(低阶→高阶)、逐元素操作;
  4. 自动微分作用于张量:梯度反传时,每个张量节点都需计算局部导数。

🌟 换句话说:张量是深度学习的“原子”——网络结构是骨架,张量数据是血肉。


五、常见误区澄清

误区 正确理解
❌ “张量就是高维数组” ✅ 在 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 协议。