计算图

计算图

计算图详细操作教程

反向传播通过使用计算图形在Tensorflow,Torch,Theano等深度学习框架中实现。 更为重要的是,理解计算图上的反向传播结合了几种不同的算法及其变体,如通过时间反向传播和共享权重反向传播。一切转换成计算图,它们仍然是相同的算法 - 只是在计算图上反向传播。

什么是计算图

计算图被定义为有向图,其中节点对应于数学运算。 计算图是表达和评估数学表达式的一种方式。
例如,这里有一个简单的数学公式 -
# Filename : example.py # Copyright : 2020 By Bianchenghao6 # Author by : bianchenghao6.com # Date : 2020-08-26 p = x + y
我们可以绘制上述方程的计算图如下。

计算图_https://bianchenghao6.com_【Python 深度学习】_第1张

上面的计算图具有一个加法节点(具有“+”符号的节点),其具有两个输入变量x和y以及一个输出q。
让我们再举一个例子,稍微复杂些。如下等式。
# Filename : example.py # Copyright : 2020 By Bianchenghao6 # Author by : bianchenghao6.com # Date : 2020-08-26 g = ( x + y ) ∗ z
以上等式由以下计算图表示。

计算图_https://bianchenghao6.com_【Python 深度学习】_第2张

计算图和反向传播

计算图和反向传播都是深度学习训练神经网络的重要核心概念。
前进传递
正向传递是评估由计算图表示的数学表达式的值的过程。 进行前向传递意味着我们将变量的值从左侧(输入)向前传递到输出所在的右侧。
让我们考虑一个例子,给所有的投入赋予一些价值。 假设给所有输入赋予下列值。
# Filename : example.py # Copyright : 2020 By Bianchenghao6 # Author by : bianchenghao6.com # Date : 2020-08-26 x=1, y=3, z=−3
通过将这些值赋予输入,我们可以执行正向传递并获得每个节点上输出的以下值。
首先,使用x = 1和y = 3的值来获得p = 4。

计算图_https://bianchenghao6.com_【Python 深度学习】_第3张

然后使用p = 4和z = -3来得到g = -12。下面从左到右前进。

计算图_https://bianchenghao6.com_【Python 深度学习】_第4张

后向传递目标

在后向传递中,我们的目的是计算每个输入相对于最终输出的梯度。 这些梯度对于使用梯度下降训练神经网络至关重要。
例如,我们希望以下渐变。所需的渐变

计算图_https://bianchenghao6.com_【Python 深度学习】_第5张

后退传递
我们通过查找最终输出相对于最终输出(本身!)的导数来开始反向传递。 因此,这将导致身份推导,并且值等于一。

计算图_https://bianchenghao6.com_【Python 深度学习】_第6张

计算图现在看起来如下所示 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第7张

接下来,我们将通过“*”操作进行反向传递。将计算p和z处的梯度。 由于g = p * z,所以可以知道 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第8张

已经知道正向传递的z和p值。 因此得到 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第9张

我们想要计算x和y处的梯度 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第10张

然而,我们想要有效地做到这一点(尽管x和g在图中只有两跳,想象它们彼此之间真的很远)。 要有效计算这些值,我们将使用差异化的链式规则。 从连锁规则来看,如下 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第11张

但是已经知道dg/dp = -3,dp/dx和dp/dy很容易,因为p直接取决于x和y。如下公式 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第12张

因此,可以得到 -

计算图_https://bianchenghao6.com_【Python 深度学习】_第13张

另外,对于输入y -

计算图_https://bianchenghao6.com_【Python 深度学习】_第14张

这样做的主要原因是,当必须计算x处的梯度时,只使用了已计算的值,而dq/dx(节点输出相对于同一节点的输入的导数)。使用本地信息来计算全局值。

训练神经网络的步骤

按照这些步骤来训练一个神经网络 -

对于数据集中的数据点x,使用x作为输入进行前向传递,并计算成本c作为输出。
从c开始向后传递,并为图中的所有节点计算渐变。 这包括表示神经网络权重的节点。
然后通过 W = W - 学习率*梯度来更新权重。
重复这个过程,直到满足停止条件。