反向传播算法

本文详细介绍了BP神经网络中的反向传播算法原理及计算流程。通过具体实例,逐步推导了权重更新所需的梯度计算方法,展示了如何避免重复计算以提高效率。

  在神经网络中,为了最小化损失函数loss(w)loss(w),我们会逐一对各个wiwi进行求偏导,然后沿着梯度方向更新各个wiwi的值。但是直接求导的话这整个过程会产生重复计算。
  例如z=f(g(x))=f(y)z=f(g(x))=f(y),则dzdx=dzdydydxdzdx=dzdydydx,假设xx是第i层权值,yy是第i+1层的权值,如果依次求zz对于x,y的导数需要计算两次dzdydzdy和一次dydxdydx。而这时我们可以利用动态规划的思想先计算dzdydzdy并保存下来记为tt,这时候再计算dzdx=tdydx,这样就不会出现导数的重复计算。
  以上就是Backpropagation算法的思想。
  这里举一个具体例子(假设我们现在处于反向传播过程中,现在要更新w1w1):


这里写图片描述

  这里要求Etotalw1∂Etotal∂w1,即最后神经网络输出的损失函数值对当前w1w1的偏导数,下面对它展开:
Etotalw1=Etotal(hi+1vout)(hi+1vout)(hi+1vnet)(hi+1vnet)w1∂Etotal∂w1=∂Etotal∂(hvi+1out)⋅∂(hvi+1out)∂(hvi+1net)⋅∂(hvi+1net)∂w1

这里,上面的w1w1即为图中的w1w1hi+1vnethvi+1net表示hi+1vhvi+1结点中线性加权后的结果,hi+1vouthvi+1out表示hi+1vhvi+1结点的最终输出,hi+1vnethvi+1net在经过激励函数后变成hi+1vouthvi+1out。通常而言,展开后的第一项Etotalhout∂Etotal∂hout就是errorerror项(误差项),而前两项的乘积Etotalhnet∂Etotal∂hnet就可以记为δδ。下同。下面开始推导。
  第一项:
Etotal(hi+1vout)=(Ei+2t+Ei+2t+1)(hi+1vout)=δi+2tw4+δi+2t+1w5=δi+2twvt∂Etotal∂(hvi+1out)=∂(Eti+2+Et+1i+2)∂(hvi+1out)=δti+2w4+δt+1i+2w5=∑δti+2wv−t

(由于Ei+2t(hi+1vout)=Etotal(hi+2tnet)(hi+2tnet)(hi+1vout)=δi+2tw4∂Eti+2∂(hvi+1out)=∂Etotal∂(hti+2net)⋅∂(hti+2net)∂(hvi+1out)=δti+2w4

这里, Ei+2tEti+2表示hi+1vhvi+1结点来自hi+2thti+2的损失值, Ei+2t+1Et+1i+2表示它来自hi+2t+1ht+1i+2的损失值。注意,Etotal(hi+2tnet)∂Etotal∂(hti+2net)在误差反向传播到i+1i+1层的时候,就已经被计算出来并且保存为δi+2tδti+2了。
  第二项:
(hi+1vout)(hi+1vnet)=f(hi+1v)∂(hvi+1out)∂(hvi+1net)=f′(hvi+1)

这里,对于一个结点而言,它的净输入(线性加权总和)经过激励函数ff后即可以得到它的输出,于是这个导函数即为激励函数的导数。综合上述的第一项和第二项,我们可以看到相邻两层的δ值有如下关系式:δi+1v=(δi+2twvt)f(hi+1v)δvi+1=(∑δti+2wv−t)⋅f′(hvi+1),这里的(δi+2twvt)(∑δti+2wv−t)也就是我们所谓的errori+2terrorti+2。神经网络输出层的errorerror值就是真实值和预测值的误差。
  第三项:
(hi+1vnet)w1=(hiuoutw1+hiu+1outw1+bi)w1=hiuout∂(hvi+1net)∂w1=∂(huiout⋅w1+hu+1iout⋅w1+bi)∂w1=huiout

这里,一个结点的线性加权总和对于它某个参数ww的导数值为上层某一个结点的输出,而这个输出在前向传播过程就被计算出来了。
  综上所述:
Etotalw1=(δti+2wvt)f(hvi+1)huiout=δvi+1huiout
小结一下,Etotalw1∂Etotal∂w1,也就等于i+2i+2层结点的errori+2terrorti+2,乘以,当前i+1i+1层激励函数的导数,乘以,它前面第ii层对应结点的输出huiout的总乘积。
  至此,w1w1的梯度方向的导数就算出来了,我们再加上学习速率后,就可以更新w1w1
w1=w1+ηEtotalw1w1′=w1+η∂Etotal∂w1

  最后,我们就可以根据这个将最基本的BP神经网络推导一翻啦~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值