BP算法是训练神经网络的一种算法,其是一种计算神经网络可训练参数的梯度的高效算法,正是因为BP算法的提出和在工程上的实现,使得深度神经网络模型可以比较轻易的训练。

BP算法是建立在梯度下降的优化算法基础之上的,正是因为我们使用了梯度下降的方法来优化我们的模型,我们才有计算参数梯度的需求。当然,神经网络已经给了我们目标函数的表达方式,因此,计算梯度其实是一件很显而易见的事情,问题在于,如何更加高效简单的计算,而且具有通用性,这才是这个优化问题的核心所在,BP算法的特点就是高效简单,而且具有通用性。

BP算法并不需要什么高深的数学,只要对梯度和chain rule有比较好的理解,那么BP算法就是显而易见的。对于梯度的理解,可以参考博主这篇文章《如何直观理解梯度下降算法》。对于chain rule,可以直接看如下推导:

 ,如果x变化了,那么,由于,所以.

所以,只要g(x)和f(g(x))在x处是可导的,明显可以得到

.

上面的推导的目的是为了理解chain rule这个过程,而不是死记硬背。基本的变量对于最终函数值的影响是可以这样分解为多步的,所以我们要分析一个变量对函数值最终的影响,同时如果这个函数关系比较复杂导致影响过程也比较复杂的话,那么这样逐步的分解去进行分析是一种很好的方式,这基本就是BP算法的分析和推导过程。

对于DNN,我们随意分析其中的几层,以如下的网络结构为例。假设第k层有5个神经元,k+1层有3个神经元,第k+2层只有1个神经元,并且k+2层是最后一层。同时设当前状态下,每个神经元激活后的值为,激活函数设为f。

现在我们要分析第k层第一个神经元对应的权重的偏导数。即假设发生了微小的变化,那么该变化最终对输出造成的影响是多少,这也是单变量导数的含义。的变化是通过中间k+1层的三个神经元传递对最终输出的影响的,即的变化先影响k+1层的三个神经元,然后k+1层的三个神经元再对最终k+2层的输出产生影响,从而实现对最终输出的影响。对此,我们只需要依次分析和计算,就可以计算出对最终输出的影响,从而也就计算出了的偏导数。

首先,对k+1层的三个神经元的影响是很容易计算的,比如对于k+1层第一个神经元的影响就是k层第一个神经元的值和k+1层第一个神经元的导数的乘积;我们知道 对下一层的影响后,接下来可以再分析下一层神经元的变化 对最终输出造成的影响,同样可以用简单的求导法则计算出来。具体如下所示。

可以看到, 的偏导就等于和其每条相连路径上所有导数值和函数值乘积之和,这个就类似值前向传播过程的一个逆过程,只是神经元的值变成了神经元对应的导数值,这个导数值和激活函数有关。并且在计算不同变量的偏导时,发现路径很多是重合的,所以实际上网络中每个神经元对应的导数值只需要计算一遍即可,所以只需要反向传播一遍就可以计算所有参数的偏导。

实际上,上述分析中,我们采用的分析思路是前向传播,最终得到的参数偏导却是一个逆过程,这个逆过程的重要性体现在,在计算梯度时,网络中每个神经元导数只需要计算一次即可,但是如果使用前向分析和计算,那么每个参数都需要前向计算一遍,这个会导致有很多的重复计算。因此,本文的反向传播是通过参数前向分析导出的一种结果,而且在算法实现上可以极大的精简计算。

上面的分析只是针对简单的DNN而言的,实际上,对于其他的网络结构,比如RNN,或者加入了Attention机制的网络等,分析的思路都是一样的,只是需要记住一个技巧性的地方:对于同一个参数在网络的不同地方多次出现,可以将其看成不同的参数独立使用多变量分析方式,然后再汇总即可,比如RNN。这一技巧的理解,可以参考博主这篇文章《理解两个函数乘积的导数的一种视角》。

神经网络反向传播(BP)算法推导相关推荐

  1. 神经网络——反向传播BP算法应用案例

    案例应用(一)--20个样本的两层(单隐藏层)神经网络 知识点: 1.tolist() 链接:http://blog.csdn.net/akagi_/article/details/76382918 ...

  2. 神经网络反向传播BP算法举例说明

    0. 前言 上篇博客对BP算法的大致步骤进行了总结,本篇博客将通过一个具体的例子来模拟一下这个算法的实现过程 ! 1. BP算法例子说明 1.1 网络结构 1.2 权重及偏移 w = ( 0.1 , ...

  3. 多层感知机Perceptron反向传播BP算法推导(Back Propagation)

    看了很多BP的推导,都不够简洁直观,这里总结一下.多层Perceptron就是全连接的网络,定义第l层的输入为x(l)x^{(l)}x(l),那么全连接的线性输出z(l)=W(l)x(l)+b(l)z ...

  4. 深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法

    深度学习图像处理目标检测图像分割计算机视觉 04--神经网络与误差反向传播BP算法 摘要 一.神经元 二.前馈网络 2.1 Delta学习规则 2.2 目标函数J(w) 三.误差反向传播算法(BP算法 ...

  5. 反向传播BP 算法之一种直观的解释

    0. 前言 之前上模式识别课程的时候,老师也讲过 MLP 的 BP 算法, 但是 ppt 过得太快,只有一个大概印象.后来课下自己也尝试看了一下 stanford deep learning 的 wi ...

  6. 【机器学习笔记】神经网络反向传播算法 推导

    神经网络反向传播算法 推导 (一) 概念及基本思想 (二)信息的前向传播 (三)误差反向传播 (1)输出层的权重参数更新 (2)隐藏层的权重参数更新 (3)输出层与隐藏层的偏置参数更新 (4)反向传播 ...

  7. 吴恩达机器学习:神经网络 | 反向传播算法

    上一周我们学习了 神经网络 | 多分类问题.我们分别使用 逻辑回归 和 神经网络 来解决多分类问题,并了解到在特征数非常多的情况下,神经网络是更为有效的方法.这周的课程会给出训练 神经网络 所使用的 ...

  8. 神经网络反向传播的作用,双向传播的神经网络

    如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法. 其主要思 ...

  9. 人工神经网络反向传播,神经网络后向传播

    如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法. 其主要思 ...

  10. 神经网络前向传播过程,神经网络反向传播

    正向传播反向传播是什么? 题主问的应该是神经网络中的问题.正向传播是指数据从X传入到神经网络,经过各个隐藏层得到最终损失的过程. 反向传播主要是针对神经网络优化的过程中进行,在L端计算总的损失函数,然 ...

最新文章

  1. css3中实现摘取金币_用css3实现抽奖转盘里的扇形图
  2. Mysql-安装指南
  3. vscode 最好的ui主题
  4. 计算机中加密文件找不见,文件夹保护3000找不到文件夹加密记录怎么办?
  5. python 相对导入_Python相对导入机制详解
  6. 大型天燃气供应商遭勒索攻击、Log4Shell正在突变|12月15日全球网络安全热点
  7. java进制转换的简单方法
  8. 重庆大学计算机学院考研,2021年重庆大学计算机学院考研指南
  9. Win10 使用双宽带和双网卡进行网络叠加、提高网速的设置
  10. ACPI Spec Chapter 10 Power Source And Power Meter Devices
  11. UNIX2DOS/DOS2UNIX for Windows
  12. 赢在云端:VMware跨云架构,让“云”卷“云”舒自由可控!——访VMware公司大中华区高级技术总监李刚
  13. 《数字图像处理(第三版)》 第二章 数字图像基础 笔记3(图像取样和量化)
  14. CY7C68013 USB2.0芯片调试总结
  15. 软件架构设计系列总结
  16. 阿里张勇:针对平台经济的管理非常及时和必要|钛媒体直击乌镇
  17. java如何根据模板填充数据生成word文档
  18. 基于BroadCastSend的短信转发
  19. 雨林木风原班人马打造装机员系统
  20. Web2.0,欢迎进入加密世界 | Props 亚洲峰会

热门文章

  1. 浏览器插件:插件推荐
  2. el-select 默认选中值
  3. 【免费】STEAM下载地址在此,千万别被垃圾网站骗了
  4. STM8S003F3 使用ADC:固件库版本与寄存器版本
  5. matlab语法归纳
  6. CodeMatic动软自动生成Nhibernate
  7. 解决Google浏览器中Flash插件禁用问题
  8. oracle打印awr报告,oracle生成awr报告
  9. 基础的java数据类型长度
  10. 操作 神通数据库_神通数据库-快速入门指南 PDF 下载