张量运算

所有的计算机程序最终都可以简化为二进制运算,而深度神经网络对于数据的的所有变换也都可以简化为数值数据张量上的张量运算。常见的张量运算有以下这些。

  • 逐元素运算:逐元素运算独立的应用于张量中的每一个元素,这些运算非常适合大规模并行实现。在处理Numpy数组时,逐元素运算都是优化好的Numpy内置函数。
  • 广播:广播曾经在前面章节介绍过,逐元素运算仅支持形状相同的张量计算,如果将不同形状的张量进行计算,就会产生广播。广播会包含以下两个步骤。
    1. 形状比较小的张量会被添加广播轴,使其ndim与较大的张量相同。
    2. 形状比较小的张量会按照新轴重复,使其形状与较大的张量相同。
  • 点积:又称为张量积运算。与逐元素运算不同,它可以将输入张量的元素合并在一起。两个张量在作点积时,如果其中有一个的ndim大于1,那么点积运算将不会是对称的,即\(dot(x, y) \neq dot(y, x)\)。
  • 张量变形:张量变形是指改变张量的行和列,以得到所需要的形状,变形后的张量的元素个数与初始张量相同。例如矩阵的转置。

对于张量来说,其元素可以被解释为在几何空间内点的坐标,因此所有的张量运算都有几何解释。神经网络完全由一系列张量运算完成,而张量运算都只是输入数据的几何变换,所以神经网络也可以被解释为高维空间中复杂的几何变换。