BP神经网络:误差反向传播公式的简单推导

Original url:

http://blog.csdn.net/sinat_34474705/article/details/54176584


最近看了一下BP神经网络(Backpropagation Neural Networks),发现很多资料对于BP神经网络的讲解注重原理,而对于反向传播公式的推导介绍的比较简略,故自己根据《PATTERN RECOGNITION AND MACHINE LEARNING》这本书的思路推导了一下反向传播的过程,记录在这里,以便以后看。对于BP神经网络的工作原理此处就不再赘述,周志华大牛的《机器学习》中介绍的很详细。

PS: 本人第一次写博客,不足之处还请见谅。

1. BP网络模型及变量说明

1.1 模型简图


BP神经网络模型

1.2 变量说明:

    • mlml:第ll层神经元个数

    • x(1)pxp(1): 输入层第pp个神经元,p=1...m1p=1...m1

    • ykyk : 输出层第kk的神经元的输出,k=1...ml+1k=1...ml+1

    • tktk:输出层第kk的神经元的目标值,k=1...ml+1k=1...ml+1

    • z(l)jzj(l):第ll层的第jj的神经元的输入;

    • a(l)jaj(l):第ll层第jj个神经元的输出;

    • a(l)0a0(l):第ll层的偏置项;

    • w(l)jiwji(l):第l1l−1层第ii个神经元与第ll层第jj个神经元的连接权值;

    • h(.)h(.):激活函数,这里假设每一层各个神经元的激励函数相同(实际中可能不同);

    • EpEp:网络在第pp个样本输入下的偏差,n=1...Nn=1...N

    • NN:样本总数

2. 误差反向传播相关推导

2.1 正向传播(forward-propagation)

正向传播的思想比较直观,最主要的是对于激活函数的理解。对于网络中第ll层的第jj个神经元,它会接受来自第l1l−1层所有神经元的信号,即: 

z(l)j=i=1ml1wjia(l1)i+a(l1)0zj(l)=∑i=1ml−1wjiai(l−1)+a0(l−1)

如果令 wj0=1wj0=1,可以将公式简写为: 
z(l)j=i=0ml1wjia(l1)izj(l)=∑i=0ml−1wjiai(l−1)

则经过该神经元后的输出值为: 
a(l)j=h(z(l)j)aj(l)=h(zj(l))

对于多分类问题,网络输出层第 kk个神经元输出可表示为: 
yk=a(l+1)k=h(zj)=h(j=0mlwkja(l)j)yk=ak(l+1)=h(zj)=h(∑j=0mlwkjaj(l))

这里说明一下,BP神经网络中激活函数通常会取 sigmoidsigmoid函数或 tanhtanh函数,不清楚的可以百度一下这两个函数,这里不再赘述。

2.2 代价函数(cost function)

由2.1节公式可以得到BP网络在一个样本下的输出值,我们定义平方和误差函数(sum-of-square error function)如下: 

Ep=k=1ml+112(yktk)2Ep=∑k=1ml+112(yk−tk)2

所有样本输入下,网络的总误差为: 
EN=p=1NEpEN=∑p=1NEp

2.3 反向传播(back-propagation)

这是BP神经网络最核心的部分,误差从输出层逐层反向传播,各层权值通过梯度下降法(gradient descent algorithm)进行更新,即: 

w:=wηEp(w)w:=w−η▽Ep(w)

上式中, ηη是每次更新的步长, Ep(w)▽Ep(w)是第 pp个样本输入下的输出偏差对某一层权值的偏导数,表示每输入一个样本更新一次参数。

下面我们以w(l)jiwji(l)为例推导梯度项: 

Epw(l)ji==Epz(l)jz(l)jw(l)jiEpz(l)ja(l1)i∂Ep∂wji(l)=∂Ep∂zj(l)∂zj(l)∂wji(l)=∂Ep∂zj(l)ai(l−1)

这里我们定义δ(l)j=Epz(l)jδj(l)=∂Ep∂zj(l),对于输出层,可以得出δ(l+1)k=yktk=a(l+1)ktkδk(l+1)=yk−tk=ak(l+1)−tk,则上式可表示为: 

Epw(l)ji=δ(l)ja(l1)i∂Ep∂wji(l)=δj(l)ai(l−1)

现在问题转换为求解δ(l+1)kδk(l+1)

δ(l)j==Epz(l)jk=1ml+1Epz(l+1)kz(l+1)kz(l)jδj(l)=∂Ep∂zj(l)=∑k=1ml+1∂Ep∂zk(l+1)∂zk(l+1)∂zj(l)

根据δδ的定义可知Epz(l+1)k=δ(l+1)k∂Ep∂zk(l+1)=δk(l+1),代入上式,则: 

δ(l)j==k=1ml+1δ(l+1)kz(l+1)kz(l)jk=1ml+1δ(l+1)kz(l+1)ka(l)ja(l)jz(l)jδj(l)=∑k=1ml+1δk(l+1)∂zk(l+1)∂zj(l)=∑k=1ml+1δk(l+1)∂zk(l+1)∂aj(l)∂aj(l)∂zj(l)

根据z(l+1)kzk(l+1)aljajl的定义可知: 

z(l+1)ka(l)j=w(l+1)kja(l)jz(l)j=h(z(l)j)∂zk(l+1)∂aj(l)=wkj(l+1)∂aj(l)∂zj(l)=h′(zj(l))

代入上式得: 

δ(l)j==k=1ml+1δ(l+1)kw(l+1)kjh(z(l)j)h(z(l)j)k=1ml+1w(l+1)kjδ(l+1)kδj(l)=∑k=1ml+1δk(l+1)wkj(l+1)h′(zj(l))=h′(zj(l))∑k=1ml+1wkj(l+1)δk(l+1)

由此我们得到了误差从输出层向低层反向传播的递推公式,进而可以求出误差对于每一层权值的梯度Ep(w)▽Ep(w)

3. 总结

BP神经网络是应用最多的一种神经网络,其精髓在于误差反向传播。本人在学习这块内容是为了给接下来学习和研究深度学习及caffe做准备,由于个人水平有限,在上述推导中可能存在不合理的地方,还请见谅,同时也欢迎指出内容的不足之处。

4. 参考文献

[1] 周志华,机器学习[M] , 清华大学出版社,2016. 
[2] CHRISTOPHER M.BISHOP. PATTERN RECOGNITION AND MACHINE LEARNING [M], 2006.

版权声明:本文为博主原创文章,转载请注明出处。 http://blog.csdn.net/sinat_34474705/article/details/54176584

猜你喜欢

转载自blog.csdn.net/junmuzi/article/details/79642050