计算图

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

什么是计算图

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

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

$$ p = x + y $$

我们可以如下绘制上述等式的计算图.

计算图公式1

上面的计算图有一个加法节点(带有"+"符号的节点),带有两个输入变量x和y和一个输出q.

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

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

上述等式由以下计算图表示.

Computational Graph Equation2

计算图和反向传播

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

前向传递

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

让我们通过给所有值一些值来考虑一个例子的输入.假设,所有输入都给出以下值.

$$ 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} $$

向后传球(反向传播)

我们通过查找衍生物来开始向后传球关于最终输出的最终输出(本身!).因此,它将导致身份派生,并且该值等于1.

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

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

Backward Pass

接下来,我们将执行向后传递"*"操作.我们将计算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  - 学习率*渐变来更新权重.

  • 我们重复此过程,直到达到停止标准.