反向传播算法BP的基本介绍

  机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合。深度学习同样也是为了这个目的,只不过此时,样本点不再限定为(x, y)点对,而可以是由向量、矩阵等等组成的广义点对(X,Y)。
  而此时,(X,Y)之间的关系也变得十分复杂,不太可能用一个简单函数表示。然而,人们发现可以用多层神经网络来表示这样的关系,而多层神经网络的本质就是一个多层复合的函数。

神经网络示意图

神经网络示意图

相应的表达式

相应的表达式
  Wij就是相邻两层神经元之间的权值,它们就是深度学习需要学习的参数,也就相当于直线拟合y=k*x+b中的待求参数k和b。
  
  cost函数也可以看成是由所有待求权值Wij为自变量的复合函数,而且基本上是非凸的,即含有许多局部最小值。但实际中发现,采用我们常用的梯度下降法就可以有效的求解最小化cost函数的问题。
  
  梯度下降法需要给定一个初始点,并求出该点的梯度向量,然后以负梯度方向为搜索方向(若偏导数为负的,则往自变量增大方向,若偏导数为正的,则往自变量减小的方向),以一定的步长进行搜索,从而确定下一个迭代点,再计算该新的梯度方向,如此重复直到cost收敛。
  

  假设cost函数为: H(n)=(W11,W12,...,W21,W22,...,Wij,...Wmn
  则其梯度向量为: Δ(H)=HW11e11+...+HWmnemn
   e 是正交单位向量
  BP算法正是用来求解这种多层复合函数的所有变量的偏导数的利器,也就是求H(n)
  我们以求e=(a+b)*(b+1)的偏导为例。其中c=a+b,d=b+1,为中间变量,e为输出,求a=2, b=1时的梯度。
  为了求出e的梯度,可以先利用偏导数的定义求出不同层之间相邻节点的偏导关系,接着用链式法则求出e的梯度。
  例子的复合关系图
  
  例子的复合关系图
  求导过程
  
  求导过程
  
  若采用传统的链式求导法则,对于上层节点e和下层节点a,要求得偏导,需要找到从a节点到e节点的所有路径,并且对每条路径,求得该路径上的所有偏导数之积,然后将所有路径的 “乘积” 累加起来。记 ca 为CA,则
  EA=CA*EC
  EB=CB*EC+DB*ED
  共需搜索六步。a-c,c-e,b-c,c-e,b-d,d-e。这样做是十分冗余,在本例中,a-c-e和b-c-e就都走了路径c-e。对于权值动则数万的深度模型中的神经网络,这样的冗余所导致的计算量是相当大的。


  同样是利用链式法则,BP算法则巧妙地避开了这种冗余,它对于每一个路径只访问一次,就能求顶点对所有下层节点的偏导值。


  反向传播(BP)算法是反向(自上往下)寻找路径的。
  从最上层的节点e开始,初始值为1,以层为单位进行处理。对于e的下一层的所有子节点,将1乘以e到某个节点路径上的偏导值,并将结果“堆放”在该子节点中。
  
  以上图为例,节点c接受e的 ec =2*1并堆放起来,节点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。
即只需要走e-c,e-d,c-a,c-b,d-b就好。

参考链接-知乎匿名用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值