大家好,今天我们学习【马上学tensorflow 2.0】之 神经网络的“齿轮”:张量运算。
我们 马上学三点 ,
- 张量运算介绍
- 张量点积和几何意义
- 深度学习几何意义
大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。
张量运算介绍
齿轮用来传递两相交轴之间的运动和动力, 张量运算在深度学习中就像机械的齿轮一样重要。
我们的计算机程序最终都会简化为二进制运算(AND、OR、NOR 等), 与此类似, 深度神经网络学到的所有变换可以简化为张量运算, 例如加上张量、乘以张量,张量点积等。
上一节,我们通过叠加 Dense 层来构建网络:
tf.keras.layers.Dense(128, activation='relu'),
这个层其实是一个函数,效果如这个公式:
output = relu(dot(W, input) + b)
我们将它拆开来看, 这里有三个张量运算:
- input输入张量和张量 W 之间的点积运算(dot)
- 得到的 2D 张量与向量 b 之间的加法运算(+)
- 最后的 relu 运算,relu(x) 是 max(x, 0), 把所有的负值都变为0,而正值不变。
接下来, 我会用简短的python代码, 而不是数学公式来讲数学概念, 这个对于程序员更容易掌握。
张量点积
我们这里重点讲常见也最有用的张量运算, 点积运算,也叫张量积。
在线性代数中,我们学习过很重要的矩阵乘法, 也是张量点积的一种情况。
点积与逐元素运算的点乘不同, 它将输入张量的元素合并在一起。
以矩阵举例:
- 点乘,就是矩阵各个对应元素相乘, 要求矩阵必须维数相等;
- 点积,就是矩阵的乘法操作, 要求左矩阵的列和右矩阵的行数要一样。
接下来,我们看两个矩阵之间的点积, 如图是点积的形状匹配:
x 的行和 y 的列必须大小相同:
x中的第一行和y中的第一列对应元素相乘:
(1, 2, 3) • (7, 9, 11) = 1×7 + 2×9 + 3×11 = 58
依次类推,行列对应相乘。
张量运算的几何解释
对于张量运算所操作的张量, 其元素可以被解释为某种几何空间内点的坐标, 因此所有的张量运算都有几何解释。
举个例子,我们来看加法,如图:
向量A和向量B相加, 从几何上来看, 这相当于将两个向量箭头连在一起。
通常来说, 旋转、缩放等基本的几何操作都可以表示为张量运算。 比如,要将一个二维向量旋转, 可以通过与一个2×2矩阵做点积来实现。
深度学习的几何解释
前面讲过, 神经网络完全由一系列张量运算组成, 而这些张量运算都只是输入数据的几何变换。
因此, 你可以将神经网络解释为高维空间中非常复杂的几何变换, 这种变换可以通过许多简单的步骤来实现。
举一个比较形象的例子, 想象有两张彩纸:一张红色,一张蓝色, 现在将两张纸一起揉成小球。
这个皱巴巴的纸球就是你的输入数据, 每张纸对应于分类问题中的一个类别。
神经网络要做的就是找到可以让纸球恢复平整的变换, 让两个类别明确可分,也就是分开红蓝两张纸, 通过深度学习, 这一过程可以用一系列简单的变换来实现。
为什么深度学习特别擅长这一点: 它将复杂的几何变换逐步分解为 一长串基本的几何变换, 这与人类展开纸球所采取的策略大致相同。
深度网络的每一层都通过变换使数据解开一点点, 许多层堆叠在一起,可以实现非常复杂的解开过程。
总结
- 深度神经网络学到的所有变换可以简化为张量运算;
- 点积与逐元素运算的点乘不同,它将输入张量的元素合并在一起;
- 旋转、缩放等基本的几何操作都可以表示为张量运算;
- 深度学习特别擅长将复杂的几何变换逐步分解为一长串基本的几何变换;
这里讲了三点,关键词有哪几个?
问题:你知道哪些张量运算?
欢迎回复评论!
马上学,很简单!