为深度学习引入张量
什么是张量?
神经网络中的输入、输出和转换都是使用张量表示的,因此,神经网络编程大量使用张量。
张量是神经网络使用的主要数据结构。
张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。
张量的具体实例
这些示例都是更一般的张量概念的具体实例:
- 数字
- 标量
- 数组
- 向量
- 二维数组
- 矩阵
让我们将上述张量实例列表组织成两组:
- 数字、数组、二维数组
- 标量、向量、矩阵
第一组的三个术语(数字、数组、二维数组)通常是计算机科学中使用的术语,而第二组(标量、向量、矩阵)通常是数学中使用的术语。
我们经常看到这种情况,不同研究领域对同一概念使用不同的词汇。在深度学习中,我们通常只是将所有这些称为张量。
让我们进一步研究这些术语。每组中的术语在我们从左到右移动时相互对应。为了展示这种对应关系,我们可以重新排列我们的术语列表,得到三组每组两个术语:
- 数字、标量
- 数组、向量
- 二维数组、矩阵
访问元素所需的索引
每对中的关系是,两个元素都需要相同数量的索引来引用数据结构中的特定元素。
访问元素所需的索引 | 计算机科学 | 数学 |
---|---|---|
0 | 数字 | 标量 |
1 | 数组 | 向量 |
2 | 二维数组 | 矩阵 |
例如,假设我们有这样一个数组:
> a = [1,2,3,4]
现在,假设我们想访问(引用)这个数据结构中的数字 3。我们可以使用一个索引像这样来做到:
> a[2]
3
对于向量,这个逻辑也是一样的。
再举一个例子,假设我们有这样一个二维数组:
> dd = [
[1,2,3],
[4,5,6],
[7,8,9]
]
现在,假设我们想访问(引用)这个数据结构中的数字 3。在这种情况下,我们需要两个索引来定位特定元素。
> dd[0][2]
3
对于矩阵,这个逻辑也是一样的。
请注意,如果我们有一个数字或标量,我们不需要索引,我们可以直接引用数字或标量。
这为我们提供了所需的工作知识,因此我们现在准备好进行概括。
张量是概括
让我们看看当我们考虑的这些数据结构需要超过两个索引来访问(引用)特定元素时会发生什么。
当需要超过两个索引来访问特定元素时,我们停止给结构特定名称,并开始使用更一般的语言。
数学
在数学中,我们停止使用标量、向量和矩阵等词,我们开始使用 张量 或 nd-张量这个词。n告诉我们访问结构中特定元素所需的索引数量。
计算机科学
在计算机科学中,我们停止使用数字、数组、二维数组等词,开始使用 多维数组 或 nd-数组这个词。n 告诉我们访问结构中特定元素所需的索引数量。
访问元素所需的索引 | 计算机科学 | 数学 |
---|---|---|
n | nd-数组 | nd-张量 |
让我们澄清一下。对于神经网络编程的实际目的,张量和 nd-数组是一样的。
张量和 nd-数组是同一件事!
因此,张量是多维数组或简称为 nd-数组。我们说张量是概括的原因是我们对所有 \(n\) 的值使用张量这个词,如下所示:
- 标量是 0维张量
- 向量是 1维张量
- 矩阵是 2 维张量
- nd-数组是 n维张量
张量让我们可以丢弃这些具体术语,只用一个 n 来识别我们正在处理的维度数量。
关于张量维度需要注意的一点是,它与我们在向量空间中提到向量的维度时的含义不同。张量的维度并没有告诉我们张量内存在多少个分量。
如果我们有一个来自三维欧几里得空间的三维向量,我们有一个有序三元组,包含三个分量。
然而,三维张量可以有远多于三个分量。例如,我们的二维张量 dd
有九个分量。
> dd = [
[1,2,3],
[4,5,6],
[7,8,9]
]
总结
在下一篇文章中,当我们介绍秩、轴和形状的概念时,我们将看到如何确定张量内包含的分量数量。这些是我们使用的基本张量属性。