BackPropagation(BP, 误差反向传播)的一些理解

在现代神经网络中, 使用最多的算法当是反向传播(BP). 虽然BP有着收敛慢, 容易陷入局部最小等缺陷, 但其易用性, 准确度却是其他算法无可比拟的.

在本文中,  wji 为连接前一层 uniti 和后一层 unitj 的权值.


在MLP中, 对于输出层神经元 unitj unitj, 它的输入 xj 按下式进行计算(忽略偏置):

xj=iyiwji

可以看到它的输入等于前一层所有神经元的输出 yi yi和对应连接的加权和, 如上图

unitj unitj的输出按下式计算:

yj=11+exj . 这就是一个非线性变换sigmoid,

对于有监督训练, 期望输出 d d和实际输出 y y现在都是已知的, 定义误差为:

E=12cj(yj,cdj,c)2

其中的 c c是输入-输出样本对的标号,  j j是输出层神经元的标号.

为求出 E/wji ,

我们先求 E/yj (之后就知道为何如此):

E/yj=yjdj , 此为误差 E 对神经元 unitj 输出的偏导.

由链式法则:

E/xj=E/yjdyj/dxj , 及上面的输入输出的关系式

dyj/dxj=(11+exj)=exj(1+exj)2=yj(1yj)

我们可以求出误差 E E unitj unitj的输入 xj xj的偏导:

E/xj=E/yjyj(1yj)

至此, 我们得到了误差 E E对于 unitj 输入 xj 的偏导, 但网络训练的是权值(偏置), 所以我们必须知道 E 对于 wji 的偏导表达式.

同样由链式法则:

E/wji=E/xjxj/wji , 及本层输入和权值的关系式:

xj=iyiwji , 可得  xj/wji=yi , 即:

E/wji=E/xjyi

其中 yi yi为前一层神经元 uniti 的输出,  yj 为后一层神经元 unitj 的输出.

为了处理中间层, 我们同样是按照链式法则, 对于第i个神经元, 我们可以求得误差 E 对其输出 yi 的梯度(注意这里是 yi , 不是 yj ):

E/yi=E/xjxj/yi=E/xjwji

考虑到第i个神经元的所有连接, 可以得到:

E/yi=jE/xjwji  (1)

这里的 E/xj 为误差对于后一层的神经元 unitj 输入 xj 的偏导.


我们梳理一下:

对于连接神经元 i i和神经元 j j的权值 wji , 主要有3个偏导分子, 输入 xj , 输出 yj 和权值 wji , 他们的关系如下:

E/xj=E/yjyj(1yj)  (2)[基于 yj xj 的非线性转换关系式];

E/wji=E/xjyi (3)[基于 xj yi 的加权求和公式].

为求得上面的式(3), 我们需要求得 E/xj , 而为求得 E/xj , 需要求得 E/yj .

对于输出层(最后一层),  E/yj=yjdj ;

对于中间层,  E/yi 按式(1)进行计算, 而式(1)中的 E/xj 是由 E/yj=yjdj 算出来的. 当我们算出中间层的 E/yi 之后, 把式(2)中的 yj 全部替换成 yi 就可以计算出 E/xi 从而计算出式(3), 注意此时的式(3)中的 yi 应该变为第i个神经元的前一层的对应神经元.

如此迭代, 我们就可以更新所有的权值啦.

权值调整的公式如下:

δw=ϵE/w

 


 

总结:

BP的精髓: 如何通过链式法则求出 E/wji

求法: 

注意, 以下推导, 统一使用 i  作为当前层前一层的神经元下标,  j 作为当前层的神经元下标,  k  作为后一层神经元下标.

对于最后一层:

E/wji=E/xjxj/wji  (1)

其中,

E/xj=E/yjyj/xj  (2)

xj/wji=yi (3, 已求出, 谢谢背锅侠指正)

式(2)中,

E/yj=yjdj  (已求出)

yj/xj=yj(1yj)  (已求出)

从而计算出误差对[最后一层到倒数第二层的权值]的梯度.

E/wji=(yjdj)yj(1yj)yi

对于倒数第二层:

唯一变化的只有  E/yj 的求法. 同样适用链式法则展开:

E/yj=E/ykyk/yj , 其中  yk  为后一层(最后一层)的第
k
个神经元输出.

由于 E/yk=ykdk (非固定, 每层表达式取前一层计算结果),

yk/yj=yk/xkxk/yj ,

其中  yk/xk=yk(1yk)  (固定的, 每层表达式都一样)

xk/yj=wkj  (固定的, 每层表达式都一样)

yk/yj=yk(1yk)wkj  (固定的, 每层表达式都一样)

从而有  E/yj=E/ykyk(1yk)wkj  (非固定, 用于下一层的误差梯度计算)

最终:  E/wji=E/yjyj(1yj)yi

倒数第三层

可将倒数第二层求出的的 E/yj 作为本层的 E/yk , 可计算出  E/yj , 从而计算出  E/wji .


相关文章:点击打开链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值