本文参考deeplearningbook.org一书第六章  6.5 Back-Propagation and Other Differentiation

Algorithms

反向传播算法分为两篇来讲,第一篇讲概念理解,第二篇用RNN简单推导。

第一篇就是本文 (一)反向传播算法理解 (Back-Propagation)

第二篇的链接(二)RNN 的 反向传播算法详细推导

下面我们就开始吧~

首先明确反向传播算法用来做什么:求梯度。

一、前向传播 foward propagation

“反向传播算法”,其中 反向 两个字顾名思义,先有一个前向的过程,才有反向一说。所以要搞懂反向传播之前,需先把前向传播弄清楚。简易地画了一个流程图如下:(图中的LOSS是一个实数值)。

上图中,前向传播路径是从输入到LOSS ,反向传播路径是从LOSS到参数(因为我们求梯度只要求参数的梯度就好了)。

前向和反向有两点不同的地方,一是方向相反,二是计算的内容不同,它两也有一样的地方,那就是一步步的向前走/向后走。反向传播求梯度就是一步步的求,而不是一步到位。

二、为什么要用反向传播算法求梯度

首先,我们可用数值法求得梯度(根据导数的定义来求解梯度),但是有个缺点,那就是参数多时,特别费时间,很慢。此方法排除。

再者,从输入到LOSS会有一个完整的函数表达式,直接根据这个函数式推导得到参数的导数表达式,再代入数值计算得到导数不就好了嘛。推导参数的导数表达式有两种方式,一是化简直接求导,二是链式求导。

假设  并且  ,我们求 z 对 x 的导数:

直接求导:     (式一)

链式求导:    (式二)

对于直接求导方式, 式一 中要先求出 h 函数,即对 f(g(x)) 进行化简,当嵌套的函数较多或者函数复杂的时候,化简会比较复杂,并且化简得到的表达式也较难简单到很容易求导的地步,感觉没必要多走这么一步。此方法排除。

因此我们现在只讨论式二,即运用链式求导法,但是在实际应用中会涉及到在前向传播过程中是否保存中间计算结果的问题,如下图所示标明了两者的区别:

图中前向1在进行过程中不保存中间结果 y,那么在反向计算时需要先把 y 算出来。也就是在前向传播过程中要 ,然后计 ,算完之后把y占用的内存释放掉。在反向计算梯度的时候要,然后,然后。如此说来是计算了两遍的。

图中前向2在进行过程中保存中间结果 y ,那么在反向求梯度的时候就不会再计算。也就是 在前向传播过程中要 ,然后计 ,保存 y 的数据。在反向计算梯度的时候要,然后。如此说来只计算了一遍。

类似 g 函数这种中间函数越多,重复计算的函数就越多。比如一个函数,求导表达式如下:

如果在前向中不保存中间结果,前向传播时要计,然后紧接着释放w占用内存,然后紧接着释放 v 占用内存,然后紧接着释放 y 占用内存。在反向计算梯度时要算,,, ,,, (此时反向计算时也没保存中间结果)。我们可以算一下在反向传播的时候要计算3次,要计算2次,要计算1次,其实这些在前向传播时已经算过一遍了。如果将, 保存起来,反向传播的时候只需要计算就好了。

但是保存中间数据的代价就是会消耗内存资源。不保存中间数据就消耗计算资源。

反向传播算法是一种保存中间数据的运用链式求导的求梯度算法,是一种以空间换取时间的算法。

三、计算图

上文已经讲过如果在前向计算中存储中间结果,那么在反向计算中只需要求  就好了,那求这几个有没有顺序呢?是有的。我们上式都是在求最终结果 z 对最底层变量 x 的梯度,其实在深度学习中,中间层有很多的参数,每一层的参数都不一样,我们想要求的是 z 对中间层各个参数的梯度,那么我们在反向传播的时候要先计算,然后,然后,然后,按照这个顺序,可以把中间层各个变量的梯度都求出来。下边解释。

上文说反向传播和前向传播一样是一步步算的,这个一步步就体现在计算顺序上这就要涉及计算图。

我们拿这个式子举例子。

计算图以变量为结点,以操作为边。我们可以把上式的计算图画出来:

然后反向传播的时候计算梯度的顺序如下:

先算,并且保存;然后算 ,紧接着和保存起来的相乘,就算得了,并且保存;

然后算,紧接着和保存起来的相乘,就算得了,并且保存;

然后算, 紧接着和保存起来的相乘,就算得了,并且保存。

也就是说从后往前依次算,可以算得  z (LOSS) 对中间各个变量的梯度。

四、总结

总结来讲反向传播算法就是以空间换时间,运用链式求导一步步从后往前求梯度的算法。

反向传播算法的大体理解就讲完啦,有不正确的地方欢迎各位大佬指正~

(一)反向传播算法理解 (Back-Propagation)相关推荐

  1. 深度神经网络(DNN)反向传播算法(BP)

    在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结. 1. DNN反向 ...

  2. 花书+吴恩达深度学习(三)反向传播算法 Back Propagation

    目录 0. 前言 1. 从 Logistic Regression 中理解反向传播 2. 两层神经网络中单个样本的反向传播 3. 两层神经网络中多个样本的反向传播 如果这篇文章对你有一点小小的帮助,请 ...

  3. 前向传播算法(Forward propagation)与反向传播算法(Back propagation)

    虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解.因此特意先对深度学习中的相关基础概念做一下总结.先看看前向传播算法(Forward propagation)与 ...

  4. BP反向传播算法的思考和直观理解 -卷积小白的随机世界

    https://www.toutiao.com/a6690831921246634504/ 2019-05-14 18:47:24 本篇文章,本来计划再进一步完善对CNN卷积神经网络的理解,但在对卷积 ...

  5. 反向传播算法_9.3 反向传播算法的直观理解 Backpropagation Intuition

    在上一节中,我们介绍了反向传播算法,对很多人来说,当第一次看到这种算法时,第一印象通常是,这个算法需要那么多繁杂的步骤,简直是太复杂了,实在不知道这些步骤,到底应该如何合在一起使用.就好像一个黑箱,里 ...

  6. 对反向传播算法(Back-Propagation)的推导与一点理解

    最近在对卷积神经网络(CNN)进行学习的过程中,发现自己之前对反向传播算法的理解不够透彻,所以今天专门写篇博客记录一下反向传播算法的推导过程,算是一份备忘录吧,有需要的朋友也可以看一下这篇文章,写的挺 ...

  7. ​通俗理解神经网络BP反向传播算法

    转载自  ​通俗理解神经网络BP反向传播算法 通俗理解神经网络BP反向传播算法 在学习深度学习相关知识,无疑都是从神经网络开始入手,在神经网络对参数的学习算法bp算法,接触了很多次,每一次查找资料学习 ...

  8. 梯度的直观理解_BP反向传播算法的思考和直观理解 -卷积小白的随机世界

    本篇文章,本来计划再进一步完善对CNN卷积神经网络的理解,但在对卷积层反向传播算法的理解中,越发觉得之前对于BP反向传播算法的理解是不到位的.小白近日觉得,对于深度神经网络,"反向传播&qu ...

  9. 100天搞定机器学习|day37 无公式理解反向传播算法之精髓

     100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...

最新文章

  1. 湖北省武汉市电信IDC机房
  2. 去除VisualStudio中拼写错误检测的红色波浪线
  3. FFmpeg编译出错_img_convert 找不到
  4. 第02课:简单好用的中文分词利器 jieba 和 HanLP
  5. linux安装mysql遇到的问题_Linux下安装MySQL5.7及遇到的问题解决方法
  6. docker容器运行mysql持久化_OS x下使用Docker 持久化Mysql 数据出现问题
  7. 一个基于POP3协议进行邮箱账号验证的类
  8. 辽宁省大学生计算机系统与程序设计竞赛,2019CCF大学生计算机系统与程序设计竞赛(华东分赛区)在我校顺利举办...
  9. Java SSM框架学习之Mybatis篇
  10. win7下安装tomcat
  11. Scala的模式匹配和条件类
  12. ADF实现主副控件联动的方法
  13. 通过IP地址获取对方MAC地址的命令
  14. PJSIP视频通话客户端
  15. 《2022数字藏品研究报告》首发,读懂NFT中西方价值捕获的分化之路
  16. PS 把两张图片融合为一张
  17. windows功能_Windows可选功能介绍
  18. Oracle HR 样例用户的建立 10g,11g均可
  19. 获取Excel单元格存储日期格式数据
  20. 平方根和立方根怎么用计算机,用计算器探究平方根和立方根

热门文章

  1. centos7 yum redis安装及使用
  2. MATLAB 利用YALMIP+Gurobi 求解线性规划 -多无人机扫描覆盖
  3. 怎么查mysql数据库版本信息查询_mysql 查询版本(mysql查询数据库版本信息)
  4. 一个让全球人沉迷的游戏背后需要怎样的团队?
  5. BUG——Windows10任务栏无响应问题
  6. 用R studio读取excel的数据画散点图
  7. 云计算技术与应用 - 实验三
  8. C day13内存管理,存储类别,链接(二)
  9. TO B销售员需要学习的销售经验
  10. 南卡和明基护眼灯哪个比较好,两款旗舰级护眼台灯对比测评