📜  计算图

📅  最后修改于: 2020-12-13 14:27:08             🧑  作者: Mango


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

什么是计算图

计算图被定义为有向图,其中节点对应于数学运算。计算图是表达和评估数学表达式的一种方式。

例如,这是一个简单的数学方程式-

$$ p = x + y $$

我们可以如下绘制上述方程的计算图。

计算图方程1

上面的计算图包含一个带有两个输入变量x和y和一个输出q的加法节点(带有“ +”号的节点)。

让我们再举一个例子,稍微复杂一点。我们有以下等式。

$$ g = \ left(x + y \ right)\ ast z $$

上式由以下计算图表示。

计算图方程2

计算图和反向传播

计算图和反向传播都是深度学习中训练神经网络的重要核心概念。

前进通行证

前向传递是评估由计算图表示的数学表达式的值的过程。进行正向传递意味着我们将变量的值沿正向从左(输入)传递到输出所处的右侧。

让我们考虑一个示例,它为所有输入提供一些价值。假设以下值被赋予所有输入。

$$ x = 1,y = 3,z = -3 $$

通过将这些值提供给输入,我们可以执行前向传递,并在每个节点上获得输出的以下值。

首先,我们使用x = 1和y = 3的值得到p = 4。

前进通行证

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

正向传递方程

后退通行证的目的

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

例如,我们需要以下渐变。

所需的渐变

$$ \ frac {\ partial x} {\ partial f},\ frac {\ partial y} {\ partial f},\ frac {\ partial z} {\ partial f} $$

向后传播(反向传播)

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

$$ \ frac {\ partial g} {\ partial g} = 1 $$

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

后退通行证

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

$$ \ frac {\ partial g} {\ partial z} = p $$

$$ \ frac {\ partial g} {\ partial p} = z $$

我们已经从向前传递中知道了z和p的值。因此,我们得到-

$$ \ frac {\ partial g} {\ partial z} = p = 4 $$

$$ \ frac {\ partial g} {\ partial p} = z = -3 $$

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

$$ \ frac {\ partial g} {\ partial x},\ frac {\ partial g} {\ partial y} $$

但是,我们希望有效地做到这一点(尽管x和g在此图中仅相距两跳,想象它们之间确实距离很远)。为了有效地计算这些值,我们将使用微分的链式规则。根据链式规则,我们有-

$$ \ frac {\ partial g} {\ partial x} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} $$

$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} $$

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

$$ p = x + y \ Rightarrow \ frac {\ partial x} {\ partial p} = 1,\ frac {\ partial y} {\ partial p} = 1 $$

因此,我们得到-

$$ \ frac {\ partial g} {\ partial f} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} = \ left(-3 \ right) .1 = -3 $$

另外,对于输入y-

$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} = \ left(-3 \ right) .1 = -3 $$

向后进行此操作的主要原因是,当我们必须计算x处的梯度时,我们仅使用已经计算出的值和dq / dx(节点输出相对于同一节点输入的导数)。我们使用本地信息来计算全球价值。

训练神经网络的步骤

请按照以下步骤训练神经网络-

  • 对于数据集中的数据点x,我们将x作为输入进行正向传递,并计算成本c作为输出。

  • 我们从c开始进行反向传递,并计算图中所有节点的梯度。这包括代表神经网络权重的节点。

  • 然后,我们通过执行W = W-学习率*梯度来更新权重。

  • 我们重复此过程,直到满足停止条件。