作者:胡逸夫
链接:https://www.zhihu.com/question/27239198/answer/89853077
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

BackPropagation算法是多层神经网络的训练中举足轻重的算法。
简单的理解,它的确就是复合函数的链式法则,但其在实际运算中的意义比链式法则要大的多。
要回答题主这个问题“如何直观的解释back propagation算法?” 需要先直观理解多层神经网络的训练。

机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合,也就是给定一些样本点,用合适的曲线揭示这些样本点随着自变量的变化关系。

深度学习同样也是为了这个目的,只不过此时,样本点不再限定为(x, y)点对,而可以是由向量、矩阵等等组成的广义点对(X,Y)。而此时,(X,Y)之间的关系也变得十分复杂,不太可能用一个简单函数表示。然而,人们发现可以用多层神经网络来表示这样的关系,而多层神经网络的本质就是一个多层复合的函数。借用网上找到的一幅图[1],来直观描绘一下这种复合关系。

其对应的表达式如下:

上面式中的Wij就是相邻两层神经元之间的权值,它们就是深度学习需要学习的参数,也就相当于直线拟合y=k*x+b中的待求参数k和b。

和直线拟合一样,深度学习的训练也有一个目标函数,这个目标函数定义了什么样的参数才算一组“好参数”,不过在机器学习中,一般是采用成本函数(cost function),然后,训练目标就是通过调整每一个权值Wij来使得cost达到最小。cost函数也可以看成是由所有待求权值Wij为自变量的复合函数,而且基本上是非凸的,即含有许多局部最小值。但实际中发现,采用我们常用的梯度下降法就可以有效的求解最小化cost函数的问题。

梯度下降法需要给定一个初始点,并求出该点的梯度向量,然后以负梯度方向为搜索方向,以一定的步长进行搜索,从而确定下一个迭代点,再计算该新的梯度方向,如此重复直到cost收敛。那么如何计算梯度呢?

假设我们把cost函数表示为, 那么它的梯度向量[2]就等于, 其中表示正交单位向量。为此,我们需求出cost函数H对每一个权值Wij的偏导数。而BP算法正是用来求解这种多层复合函数的所有变量的偏导数的利器。

我们以求e=(a+b)*(b+1)的偏导[3]为例。
它的复合关系画出图可以表示如下:
在图中,引入了中间变量c,d。

为了求出a=2, b=1时,e的梯度,我们可以先利用偏导数的定义求出不同层之间相邻节点的偏导关系,如下图所示。
利用链式法则我们知道:
以及

链式法则在上图中的意义是什么呢?其实不难发现,的值等于从a到e的路径上的偏导值的乘积,而的值等于从b到e的路径1(b-c-e)上的偏导值的乘积加上路径2(b-d-e)上的偏导值的乘积。也就是说,对于上层节点p和下层节点q,要求得,需要找到从q节点到p节点的所有路径,并且对每条路径,求得该路径上的所有偏导数之乘积,然后将所有路径的 “乘积” 累加起来才能得到的值。

大家也许已经注意到,这样做是十分冗余的,因为很多路径被重复访问了。比如上图中,a-c-e和b-c-e就都走了路径c-e。对于权值动则数万的深度模型中的神经网络,这样的冗余所导致的计算量是相当大的。

同样是利用链式法则,BP算法则机智地避开了这种冗余,它对于每一个路径只访问一次就能求顶点对所有下层节点的偏导值。
正如反向传播(BP)算法的名字说的那样,BP算法是反向(自上往下)来寻找路径的。

从最上层的节点e开始,初始值为1,以层为单位进行处理。对于e的下一层的所有子节点,将1乘以e到某个节点路径上的偏导值,并将结果“堆放”在该子节点中。等e所在的层按照这样传播完毕后,第二层的每一个节点都“堆放"些值,然后我们针对每个节点,把它里面所有“堆放”的值求和,就得到了顶点e对该节点的偏导。然后将这些第二层的节点各自作为起始顶点,初始值设为顶点e对它们的偏导值,以"层"为单位重复上述传播过程,即可求出顶点e对每一层节点的偏导数。

以上图为例,节点c接受e发送的1*2并堆放起来,节点d接受e发送的1*3并堆放起来,至此第二层完毕,求出各节点总堆放量并继续向下一层发送。节点c向a发送2*1并对堆放起来,节点c向b发送2*1并堆放起来,节点d向b发送3*1并堆放起来,至此第三层完毕,节点a堆放起来的量为2,节点b堆放起来的量为2*1+3*1=5, 即顶点e对b的偏导数为5.

举个不太恰当的例子,如果把上图中的箭头表示欠钱的关系,即c→e表示e欠c的钱。以a, b为例,直接计算e对它们俩的偏导相当于a, b各自去讨薪。a向c讨薪,c说e欠我钱,你向他要。于是a又跨过c去找e。b先向c讨薪,同样又转向e,b又向d讨薪,再次转向e。可以看到,追款之路,充满艰辛,而且还有重复,即a, b 都从c转向e。

而BP算法就是主动还款。e把所欠之钱还给c,d。c,d收到钱,乐呵地把钱转发给了a,b,皆大欢喜。
------------------------------------------------------------------

BP算法与梯度下降算法相关推荐

  1. 机器学习经典算法笔记——梯度下降算法

    本文推荐一个更好的版本理解 梯度下降,下面的代码选自本文 这大概是我见过最好理解的一个版本 梯度下降的场景假设 梯度 梯度下降算法的数学解释 梯度下降算法的实例 梯度下降算法的实现 Further r ...

  2. 关于BP算法和梯度下降

    最开始学习神经网络,感触最深的就是BP算法,当时只用到却没有好好体会它背后的深意,在RNN中也会用到一个类似的算法(BPTT下面会具体讲).对神经网络有些了解,就会熟悉BP算法由两个部分组成,向前传播 ...

  3. 【算法】梯度下降算法及python实现

    目录 1.概述 2.梯度下降算法 2.1 场景假设 2.1 梯度下降 2.1.1 微分 2.2.2 梯度 2.3 数学解释 2.3.1 α 2.3.2 梯度要乘以一个负号 3. 实例 3.2 多变量函 ...

  4. 全连接神经网络的BP算法(BP神经网络模型)与卷积神经网络的BP算法

    1.神经网络模型 1.1神经网络模型的演变: 神经元模型------->感知机模型------->神经网络模型 神经元模型:1943年,W.S.McCulloch和W.Pitts根据生物学 ...

  5. 从神经网络到BP算法(纯理论推导)

    作者述:之前有学习过一遍,但是一段时间过后,很多细节地方已经模糊.最近重新推导了一遍,为了尽可能保留推导思路,特地写作此博文.一方面供自己日后回忆,另一方面方便跟大家交流学习. 关于本博文,说明如下: ...

  6. 机器学习——梯度下降算法

    文章目录 梯度下降算法 概念 前提条件 目标函数 训练集 训练步骤 代码表示 梯度下降的算法调优 总结 梯度下降算法 最优化算法在机器学习中是一种求解最合适的权重参数的算法,梯度下降算法就是其中的一种 ...

  7. 算法基础--梯度消失的原因

    深度学习训练中梯度消失的原因有哪些?有哪些解决方法? 1.为什么要使用梯度反向传播? 归根结底,深度学习训练中梯度消失的根源在于梯度更新规则的使用.目前更新深度神经网络参数都是基于反向传播的思想,即基 ...

  8. 机器学习周志华5.13式推导以及BP算法理解

    一.5.13式推导 变量符号说明: 推导目标: 推导过程: 二.BP算法的理解 BP算法:误差逆传播算法,又称反向传播算法,是一种非常成功的神经网络学习算法,可以用于神经网络的训练.BP算法基于梯度下 ...

  9. PyTorch深度学习——梯度下降算法

    目录 一.梯度下降算法(batch gradient descend) 二.随机梯度下降算法(stochastic gradient descend) 三. 小批量梯度下降算法(mini-batch ...

最新文章

  1. 网络推广外包——网络推广外包专员浅析移动端网站建设要点
  2. 设计模式=相似模式区别
  3. UDP 组播---你需要了解这些
  4. STM32之串口例程
  5. C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)
  6. 分享:从功能增强说起
  7. JavaScript-面向对象(构造函数,实例成员,静态成员)
  8. OSG仿真案例(7)——osg自动驾驶
  9. 1.Ubuntu Server下搭建LAMP环境
  10. la4080 Warfare And Logistics 罗列+最短
  11. HTML怎么引入字体包中的字体
  12. 【金猿案例展】某大型股份制银行——指标的统一管理和分析平台
  13. 读《春秋》有感之十六:楚共王选谥号
  14. 逃跑吧少年维护服务器,逃跑吧少年11月19日PC端更新公告
  15. Docker镜像下载加速及设置代理
  16. 在破败中崛起,在寂灭中复苏。   沧海成尘,雷电枯竭,那一缕幽雾又一次临近大地,世间的枷锁被打开了,一个全新的世界就此揭开神秘的一角……
  17. 九章量电子计算机诞生于,计算机应用基础统考题
  18. GD32F4xx创建工程
  19. 一个普通211本科生找工作的那些事儿!
  20. fastica去噪matlab_Matlab中FastICA工具箱使用说明.pdf

热门文章

  1. 求一组数的最大公因数和最小公倍数
  2. 类金融监管大放松!多地放宽对商业保理、融资租赁等类金融限制
  3. Android RadioGroup动态加入RadioButton,动态设置选中和未选中的颜色及设置默认选中
  4. flutter图片识别_flutter实现文字识别之图片拖拽选框选取截取文字
  5. 【必看答疑】为什么我的电脑远程连接不上?
  6. 爬虫工程师光头养成路径
  7. 为什么很多人学完了Java,依旧找不到工作?
  8. Android 调用系统原生相机拍照并储存到指定位置
  9. Axure RP8 教程 :基础元件
  10. linux postgresql 容许远程连接