反向传播算法

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


这里写图片描述

  这里要求 Etotalw1 ∂ E t o t a l ∂ w 1 ,即最后神经网络输出的损失函数值对当前 w1 w 1 的偏导数,下面对它展开:
Etotalw1=Etotal(hi+1vout)(hi+1vout)(hi+1vnet)(hi+1vnet)w1 ∂ E t o t a l ∂ w 1 = ∂ E t o t a l ∂ ( h v i + 1 o u t ) ⋅ ∂ ( h v i + 1 o u t ) ∂ ( h v i + 1 n e t ) ⋅ ∂ ( h v i + 1 n e t ) ∂ w 1

这里,上面的 w1 w 1 即为图中的 w1 w 1 hi+1vnet h v i + 1 n e t 表示 hi+1v h v i + 1 结点中线性加权后的结果, hi+1vout h v i + 1 o u t 表示 hi+1v h v i + 1 结点的最终输出, hi+1vnet h v i + 1 n e t 在经过激励函数后变成 hi+1vout h v i + 1 o u t 。通常而言,展开后的第一项 Etotalhout ∂ E t o t a l ∂ h o u t 就是 error e r r o r 项(误差项),而前两项的乘积 Etotalhnet ∂ E t o t a l ∂ h n e t 就可以记为 δ δ 。下同。下面开始推导。
   第一项:
Etotal(hi+1vout)=(Ei+2t+Ei+2t+1)(hi+1vout)=δi+2tw4+δi+2t+1w5=δi+2twvt ∂ E t o t a l ∂ ( h v i + 1 o u t ) = ∂ ( E t i + 2 + E t + 1 i + 2 ) ∂ ( h v i + 1 o u t ) = δ t i + 2 w 4 + δ t + 1 i + 2 w 5 = ∑ δ t i + 2 w v − t

(由于 Ei+2t(hi+1vout)=Etotal(hi+2tnet)(hi+2tnet)(hi+1vout)=δi+2tw4 ∂ E t i + 2 ∂ ( h v i + 1 o u t ) = ∂ E t o t a l ∂ ( h t i + 2 n e t ) ⋅ ∂ ( h t i + 2 n e t ) ∂ ( h v i + 1 o u t ) = δ t i + 2 w 4

这里, Ei+2t E t i + 2 表示 hi+1v h v i + 1 结点来自 hi+2t h t i + 2 的损失值, Ei+2t+1 E t + 1 i + 2 表示它来自 hi+2t+1 h t + 1 i + 2 的损失值。注意, Etotal(hi+2tnet) ∂ E t o t a l ∂ ( h t i + 2 n e t ) 在误差反向传播到 i+1 i + 1 层的时候,就已经被计算出来并且保存为 δi+2t δ t i + 2 了。
   第二项:
(hi+1vout)(hi+1vnet)=f(hi+1v) ∂ ( h v i + 1 o u t ) ∂ ( h v i + 1 n e t ) = f ′ ( h v i + 1 )

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

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

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值