反向传播算法和计算图详细介绍及其原理详解

相关文章

  1. 梯度下降算法、随机梯度下降算法、动量随机梯度下降算法、AdaGrad算法、RMSProp算法、Adam算法详细介绍及其原理详解
  2. 反向传播算法和计算图详细介绍及其原理详解
  3. 激活函数、Sigmoid激活函数、tanh激活函数、ReLU激活函数、Leaky ReLU激活函数、Parametric ReLU激活函数详细介绍及其原理详解
  4. Xavier参数初始化方法和Kaiming参数初始化方法详细介绍及其原理详解

文章目录

  • 相关文章
  • 前言
  • 一、反向传播算法
    • 1.1 什么是反向传播算法?
    • 1.2 更泛化的例子
  • 二、计算图
    • 2.1 什么是传播图?
    • 2.2 一个简单的例子
  • 总结

前言

  本文总结了关于反向传播算法以及计算图的相关内容以及原理,并通过举例说明整个运算过程。下面就是本篇博客的全部内容!


一、反向传播算法

1.1 什么是反向传播算法?

  假设现在有如下图的一个过程:

请添加图片描述

图1:只有一个神经元的前向传播过程

  使用直线反向传播算法和计算图详细介绍及其原理详解去拟合数据,初始输入值为反向传播算法和计算图详细介绍及其原理详解,参数为反向传播算法和计算图详细介绍及其原理详解,得到预测值反向传播算法和计算图详细介绍及其原理详解,其真实值为反向传播算法和计算图详细介绍及其原理详解,那么可以得到损失函数为:
反向传播算法和计算图详细介绍及其原理详解
  现在我们的目的是通过更新参数反向传播算法和计算图详细介绍及其原理详解使得损失值最小,为了更直观的演示,我们先给参数赋值,其中反向传播算法和计算图详细介绍及其原理详解表示学习率:

  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解

  假设真实值反向传播算法和计算图详细介绍及其原理详解,那么通过赋的初始值,可以得到:

  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解

  此时就要利用之前学过的梯度下降算法来更新参数,首先要求出损失函数反向传播算法和计算图详细介绍及其原理详解对参数反向传播算法和计算图详细介绍及其原理详解的偏导数:
反向传播算法和计算图详细介绍及其原理详解
  然后更新参数反向传播算法和计算图详细介绍及其原理详解
反向传播算法和计算图详细介绍及其原理详解
  另一个参数反向传播算法和计算图详细介绍及其原理详解也是一样的过程,首先计算损失函数反向传播算法和计算图详细介绍及其原理详解对参数反向传播算法和计算图详细介绍及其原理详解的偏导数:
反向传播算法和计算图详细介绍及其原理详解
  然后更新参数反向传播算法和计算图详细介绍及其原理详解
反向传播算法和计算图详细介绍及其原理详解
  上面的过程看似很简单,但是如何求得反向传播算法和计算图详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解呢?以参数反向传播算法和计算图详细介绍及其原理详解为例,很明显损失函数反向传播算法和计算图详细介绍及其原理详解是关于参数反向传播算法和计算图详细介绍及其原理详解的函数,而反向传播算法和计算图详细介绍及其原理详解又是关于参数反向传播算法和计算图详细介绍及其原理详解的偏导,所以根据高等数学中学过的链式求导法则可以得到:
反向传播算法和计算图详细介绍及其原理详解
  所以首先我们要求出损失函数反向传播算法和计算图详细介绍及其原理详解对参数反向传播算法和计算图详细介绍及其原理详解的偏导:
反向传播算法和计算图详细介绍及其原理详解
  然后再求出反向传播算法和计算图详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解的偏导:
反向传播算法和计算图详细介绍及其原理详解
  再将其代入可以得到:
反向传播算法和计算图详细介绍及其原理详解
  同理我们也可以求出反向传播算法和计算图详细介绍及其原理详解
反向传播算法和计算图详细介绍及其原理详解
  然后再将预设好的数据值代入,就可以得到损失函数反向传播算法和计算图详细介绍及其原理详解关于参数反向传播算法和计算图详细介绍及其原理详解的偏导值:
反向传播算法和计算图详细介绍及其原理详解

反向传播算法和计算图详细介绍及其原理详解

  当我们所有的参数都计算出后,代入更新参数反向传播算法和计算图详细介绍及其原理详解的公式,就可以根据梯度下降算法更新参数得到:

  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解
  • 反向传播算法和计算图详细介绍及其原理详解

  可以看到,预测值越来越接近真实值,并且损失值也变小了。可以发现,我们要更新参数反向传播算法和计算图详细介绍及其原理详解,就要从后向前依次求偏导才能得到结果,这种利用梯度从后向前更新参数的方法,也被称为反向传播算法(Back-Propagation,BR)。

1.2 更泛化的例子

  刚才介绍的例子参数比较少,计算过程也比较简单,那如果我们的情况更泛化,也更复杂呢?假设有如下图的一种情况:

请添加图片描述

图2:有两个神经元的前向传播过程

  此时我们要更新的参数为反向传播算法和计算图详细介绍及其原理详解,第一次计算的结果反向传播算法和计算图详细介绍及其原理详解又当作参数传入下一个神经元,经过与参数反向传播算法和计算图详细介绍及其原理详解的计算得到最终的结果反向传播算法和计算图详细介绍及其原理详解,然后用反向传播算法和计算图详细介绍及其原理详解表示经过两次拟合后的结果与真实值的误差。

  更新参数反向传播算法和计算图详细介绍及其原理详解最重要的就是求出反向传播算法和计算图详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解,我们先计算反向传播算法和计算图详细介绍及其原理详解,根据函数关系,我们可以得到如下链式求导公式:
反向传播算法和计算图详细介绍及其原理详解
  可以看到,整个计算过程是从后向前依次计算的,这也符合反向传播算法对此过程的描 述。当我们得到反向传播算法和计算图详细介绍及其原理详解后,就可以利用参数更新公式来更新参数:
反向传播算法和计算图详细介绍及其原理详解
  同理,我们也可以得到关于参数反向传播算法和计算图详细介绍及其原理详解的链式求导公式:
反向传播算法和计算图详细介绍及其原理详解
  然后再使用参数更新公式来更新参数即可:
反向传播算法和计算图详细介绍及其原理详解
  以上过程就是反向传播算法的全部过程,当然,在深度学习的应用中,反向传播算法需要计算的神经元个数是非常多的,但是原理与此无异,就是链式求导法则的一个应用。而在链式求导公式中的许多参数已经在上一步计算好了,所以不需要重复计算,这就使在神经网络训练过程中,节省很多不必要的计算,故反向传播算法就是神经网络中加速计算参数梯度值的方法。

二、计算图

2.1 什么是传播图?

  还是刚才的例子,输入数据经过两个神经元的运算得到最终的输出数据反向传播算法和计算图详细介绍及其原理详解,通过与真实值的比较得到损失函数反向传播算法和计算图详细介绍及其原理详解,整个过程如下图所示:

请添加图片描述

图3:有两个神经元的前向传播过程

  从左往右的计算过程也叫前向传播,这个很好理解,就是一级一级的向下计算传播。那么计算机中如何表示这个过程呢?计算机会将每个运算小步骤保存下来,记录为一个参数,等待下次运算,具体的运算过程可见下图:

请添加图片描述

图4:有两个神经元的前向传播计算图

  引入的变量反向传播算法和计算图详细介绍及其原理详解就是为了存储参数反向传播算法和计算图详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解运算小步骤的结果,然后等待下次运算的时候,直接将其作为参数进行计算即可,后面的参数同理,很明显这样看起来更“舒服”,符合计算机逐步运算的逻辑,经过运算最终可以得到最终的预测值反向传播算法和计算图详细介绍及其原理详解和损失函数反向传播算法和计算图详细介绍及其原理详解,这种模块化的计算过程图就称为计算图(Computation Graphs)。

  现在我们已经知道计算机如何利用计算图通过前向传播得到最终的预测值反向传播算法和计算图详细介绍及其原理详解和损失函数反向传播算法和计算图详细介绍及其原理详解了,那么计算机又如何利用计算图进行反向传播呢?也就是说,计算机如何利用计算图计算出损失函数反向传播算法和计算图详细介绍及其原理详解对于各个参数的梯度呢?对于这个计算过程,可见下图:

请添加图片描述

图5:有两个神经元的反向传播计算图

  可以看到,计算损失函数反向传播算法和计算图详细介绍及其原理详解对于各个参数的梯度仍和之前的计算方法一致,只是由于引入了中间变量反向传播算法和计算图详细介绍及其原理详解,所以每次计算关于损失函数反向传播算法和计算图详细介绍及其原理详解对于反向传播算法和计算图详细介绍及其原理详解中参数的偏导数时,要先计算损失函数反向传播算法和计算图详细介绍及其原理详解对于反向传播算法和计算图详细介绍及其原理详解的偏导数,其余计算过程并没有变化,其中需要注意:

  • 黄色的变量:通过此步骤的之前步骤得到的运算结果
  • 绿色的变量:通过前向传播得到的已知的数据

  最终同样可以得到损失函数反向传播算法和计算图详细介绍及其原理详解关于参数反向传播算法和计算图详细介绍及其原理详解的偏导数,然后就可以利用之前介绍的梯度下降算法进行参数的优化更新了。

2.2 一个简单的例子

  我们现在已经明白什么是计算图了,那么计算机如何利用计算图的原理去进行有关深度学习的计算呢?我们以Pytorch中的乘法运算为例,其运算图如下所示:

请添加图片描述

图6:神经网络中乘法运算的计算图
  1. 前向传播

    Pytorch中乘法运算的前向传播代码如下所示:

    class Multiply(torch.autograd.Function):
    	@staticmethod
    	def forward(ctx, x, y):
    	ctx.save_for_backward(x,y)
    	z = x * y
    	return z
    

    可以看到,整段代码的运算过程恰如乘法运算计算图中绿色所示部分,直接获取到关于反向传播算法和计算图详细介绍及其原理详解反向传播算法和计算图详细介绍及其原理详解的参数,然后进行相乘得到反向传播算法和计算图详细介绍及其原理详解,最后返回反向传播算法和计算图详细介绍及其原理详解即可。

  2. 反向传播

    Pytorch中乘法运算的反向传播代码如下所示:

    class Multiply(torch.autograd.Function):
    	@staticmethod
    	def backward(ctx, grad_z):
    	x, y = ctx.saved_tensors
    	grad_x = grad_z * y
    	grad_y = grad_z * x
    	return grad_x, grad_y
    

    这个就和前向传播的代码有所不同,因为其计算需要求损失函数反向传播算法和计算图详细介绍及其原理详解关于各个参数的偏导数,所以此段代码对应乘法运算计算图中黄色所示部分。其中,反向传播算法和计算图详细介绍及其原理详解,而我们需要求得损失函数反向传播算法和计算图详细介绍及其原理详解分别对反向传播算法和计算图详细介绍及其原理详解的偏导数,其具体表示为:

    • grad_x = grad_z * y对应:

    反向传播算法和计算图详细介绍及其原理详解

    • grad_y = grad_z * x对应:
      反向传播算法和计算图详细介绍及其原理详解

  这样就可以通过计算图利用反向传播算法来更新数以亿计的网络参数了。


总结

  以上就是本篇博客的全部内容了,文章内容不算太长,但是有些地方还是不太好理解的,最好有些高等数学的基础,学起来会更“舒服”。本系列还会一直更新,敬请期待!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年11月28日
下一篇 2023年11月28日

相关推荐