1.1 标量、向量、张量
标量:只有数值大小,没有方向的量。
向量:数学中指具有大小和方向的量;计算机编程语言中是一个存放数据的地方,类似于一维数组和链表。
一维数组:数组中每一个元素都有且仅有一个下标时,这样的数组称为一维数组,数组中每个变量的数据类型是相同的。
链表:物理存储单元上,非连续、非顺序的存储结构。链表由一系列结点组成(链表中每一个元素称为结点),结点可以在运行时动态生成。
张量:是向量的推广,向量是一阶张量,标量是零阶张量,矩阵是二阶张量。张量的维数叫做它的秩。
1.2 张量和矩阵的区别
1 从代数的角度,矩阵是向量的推广。张量的严格定义是利用线性映射来描述。
2 从几何的角度,矩阵是一个真正的几何量,即不随参考系的坐标变化而变化。张量是动态的,服从一个相关的变换规则。
3 任何秩为2的张量都可以表示为一个矩阵,但不是每个矩阵都是秩为2的张量。张量矩阵表示的数值取决于整个系统应用了什么规则。
在深度学习中:
假设神经网络中有3个节点的隐藏层L1,输入流入该层,通过ReLU,得到2.5,4,1.2。将这些节点的输出表示为向量:
假设还存在有3个节点的隐藏层L2,L1的三个节点中的每个节点都有一个权重,每个权重与L2的三个节点关联。故可将权重写为3x3的矩阵。这里假设我们已经对网络进行了多次更新,并得到了权重(这里半随机选择)。
关于数据的流动,如下:
以上都是矩阵和向量的操作。
假设,我们想对每个神经元进行干预并使用自定义激活函数。其中一种方法是,从第一层重新缩放每个ReLU函数。本例中,假设我们将第一个节点向上扩展2倍,保留第二个节点,将第三个节点向下扩展1/5。原来的结果如下所示:
修改后的效果是,将第一层生成的值分别乘以2、1和1/5。相当于乘以一个矩阵A:
ReLU函数变化如下:
现在,这些更新后的值,通过原来的权值网络,得到完全不同的输出值,如下:
如果神经网络之前运作正常,输入更新后,就破坏了网络运作,必须重新进行训练以恢复正确的数量。
第一个节点的值是之前的2倍。如果我们将所有输出权值减少1/2,则它对下一层的净贡献不变。
第二个节点未做任何处理,故不考虑权值,不需要改变。
第三个节点是之前的1/5倍,故将输出权值扩大5倍,以补偿该节点上的1/5因子。
从数学上来说,这相当于使用一组新的权值,我们通过将原权值矩阵乘以A的逆矩阵得到:
这里网络可以重新运作。
总结:
当我们把节点的输入、输出和权值看作固定的量时,我们称它们为向量和矩阵,并用它们完成网络运行。
但,一旦我们开始用其中一个向量进行修复,以常规方式对其进行转换,就必须通过相反的方式转换权值来进行补偿。这个附加的、集成的结构将单纯的数字矩阵提升为一个真正的张量对象。
进一步描述它的张量性质。如果我们把对节点的变化称为协变(即,将节点乘以矩阵A),那么权值就变成了一个逆变张量(即,针对节点的变化,乘以A的倒数,矩阵A的逆矩阵)。张量可以在一个维度上是协变的,在另一个维度上是逆变的,但那是另外的事了。