Python深度学习计算图 Python深度学习训练神经网络 Python深度学习应用程序 反向传播通过使用计算图形在Tensorflow,Torch,Theano等深度学习框架中实现。更为重要的是,理解计算图上的反向传播结合了几种不同的算法及其变体,如通过时间反向传播和共享权重反向传播。一旦一切都转换成计算图,它们仍然是相同的算法 只是在计算图上反向传播。 什么是计算图 计算图被定义为有向图,其中节点对应于数学运算。计算图是表达和评估数学表达式的一种方式。 例如,这里有一个简单的数学公式 - p=x+y 我们可以绘制上述方程的计算图如下。 上面的计算图具有一个加法节点(具有“+”符号的节点),其具有两个输入变量x和y以及一个输出q。 让我们再举一个例子,稍微复杂些。我们有以下等式。 g=(x+y)∗z 以上等式由以下计算图表示。 计算图和反向传播 计算图和反向传播都是深度学习训练神经网络的重要核心概念。 前进通行证 正向传递是评估由计算图表示的数学表达式的值的过程。进行前向传球意味着我们将变量的值从左侧(输入)向前传递到输出所在的右侧。 让我们考虑一个例子,给所有的投入赋予一些价值。假设给所有输入赋予下列值。 x=1,y=3,z=−3 通过将这些值赋予输入,我们可以执行正向传递并获得每个节点上输出的以下值。 首先,我们使用x = 1和y = 3的值来获得p = 4。 然后我们使用p = 4和z = -3来得到g = -12。我们从左到右前进。 落后目标 在后向传递中,我们的目的是计算每个输入相对于最终输出的梯度。这些梯度对于使用梯度下降训练神经网络至关重要。 例如,我们希望以下渐变。 所需的渐变 ∂X∂F,∂ÿ∂F,∂ž∂F 后退传球(后传) 我们通过查找最终输出相对于最终输出(本身!)的导数来开始反向传递。因此,这将导致身份推导,并且值等于一。 ∂G∂G= 1∂G∂G=1 我们的计算图现在看起来如下所示 - 接下来,我们将通过*操作进行反向传递。我们将计算p和z处的梯度。由于g = p * z,我们知道 - ∂G∂ž= p∂G∂ž=p ∂G∂p= z∂G∂p=ž 我们已经知道正向传球中z和p的值。因此,我们得到 - ∂G∂ž= p = 4∂G∂ž=p=4 和 ∂G∂p= z= - 3∂G∂p=ž= - 3 我们想要计算x和y处的梯度 - ∂G∂X,∂G∂ÿ∂G∂X,∂G∂ÿ 然而,我们想要有效地做到这一点(尽管x和g在图中只有两跳,想象它们彼此之间真的很远)。为了有效计算这些值,我们将使用差异化的链式规则。从连锁规则来看,我们有 ∂G∂X= ∂G∂p ∂p∂X∂G∂X=∂G∂p∂p∂X ∂G∂ÿ= ∂G∂p ∂p∂ÿ∂G∂ÿ=∂G∂p∂p∂ÿ 但是我们已经知道dg / dp = -3,dp / dx和dp / dy很容易,因为p直接取决于x和y。我们有 - p = x + y⇒ ∂X∂p= 1 ,∂ÿ∂p= 1p=X+ÿ⇒∂X∂p=1,∂ÿ∂p=1 因此,我们得到 - ∂G∂F= ∂G∂p ∂p∂X= (- 3) .1 = - 3∂G∂F=∂G∂p∂p∂X=( - 3)0.1= - 3 另外,对于输入y - ∂G∂ÿ= ∂G∂p ∂p∂ÿ= (- 3) .1 = - 3∂G∂ÿ=∂G∂p∂p∂ÿ=( - 3)0.1= - 3 这样做的主要原因是,当我们必须计算x处的梯度时,我们只使用了已计算的值,而dq / dx(节点输出相对于同一节点的输入的导数)。我们使用本地信息来计算全局值。 训练神经网络的步骤 按照这些步骤来训练一个神经网络 - 对于数据集中的数据点x,我们使用x作为输入进行前向传递,并计算成本c作为输出。 我们从c开始向后传递,并为图中的所有节点计算渐变。这包括表示神经网络权重的节点。 然后我们通过W = W - 学习率*梯度来更新权重。 我们重复这个过程,直到满足停止条件。 Python深度学习训练神经网络 Python深度学习应用程序