bp神经网络_BP神经网络推导过程

BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的。

一、多层神经网络结构及其描述

下图为一典型的多层神经网络。

0854b536da8b349370eec1629008bcfd.png

通常一个多层神经网络由L层神经元组成,其中:第1层称为输入层,最后一层(第L层)被称为输出层,其它各层均被称为隐含层(第2层~第L-1层)。

令输入向量为:

x =[x1x2…xi…xm],i=1,2,…,mx→=[x1x2…xi…xm],i=1,2,…,m

输出向量为:
y =[y1y2…yk…yn],k=1,2,…,ny→=[y1y2…yk…yn],k=1,2,…,n

第l隐含层各神经元的输出为:

h(l)=[h(l)1h(l)2…h(l)j…h(l)sl],j=1,2,…,slh(l)=[h1(l)h2(l)…hj(l)…hsl(l)],j=1,2,…,sl

其中,slsl为第l层神经元的个数。

设W(l)ijWij(l)为从l-1层第j个神经元与l层第i个神经元之间的连接权重;b(l)ibi(l)为第l层第i个神经元的偏置,那么:

h(l)i=f(net(l)i)hi(l)=f(neti(l))

net(l)i=∑j=1sl−1W(l)ijh(l−1)j+b(l)ineti(l)=∑j=1sl−1Wij(l)hj(l−1)+bi(l)

其中,net(l)ineti(l)为l层第i个神经元的输入,f(⋅)f(⋅)为神经元的激活函数。通常在多层神经网络中采用非线性激活函数,而不是用线性激活函数,因为采用基于线性激活函数的多层神经网络本质上还是多个线性函数的叠加,其结果仍然为一个线性函数。

二、激活函数

BP神经网络通常使用下面两种非线性激活函数:

f(x)=11+e−xf(x)=11+e−x

f(x)=1−e−x1+e−xf(x)=1−e−x1+e−x

第一种称为sigmod函数或者logistics函数,第二种为双曲正切函数。

Sigmod函数的图像如下图所示,它的变化范围为(0, 1),其导数为f′=f(1−f)f′=f(1−f)。

97dac0fb147dc02e5387cbdf7331b00b.png

双曲正切函数的图像如下图所示,它的变化范围为(-1, 1),其导数为f′=1−f2f′=1−f2。

6894b5f3b41b208e00c96fd1f7fc3749.png

三、BP算法推导过程

假定我们有m个训练样本{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))}{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},其中d(i)d(i)为对应输入x(i)x(i)的期望输出。BP算法通过最优化各层神经元的输入权值以及偏置,使得神经网络的输出尽可能地接近期望输出,以达到训练(或者学习)的目的。

采用批量更新方法,对于给定的m个训练样本,定义误差函数为:

E=1m∑i=1mE(i)E=1m∑i=1mE(i)

其中,E(i)为单个样本的训练误差:

E(i)=12∑k=1n(dk(i)−yk(i))2E(i)=12∑k=1n(dk(i)−yk(i))2

因此,

E=12m∑i=1m∑k=1n(dk(i)−yk(i))2E=12m∑i=1m∑k=1n(dk(i)−yk(i))2

BP算法每一次迭代按照以下方式对权值以及偏置进行更新:

W(l)ij=W(l)ij−α∂E∂W(l)ijWij(l)=Wij(l)−α∂E∂Wij(l)

b(l)i=b(l)i−α∂E∂b(l)ibi(l)=bi(l)−α∂E∂bi(l)

其中,αα为学习速率,它的取值范围为(0, 1)。BP算法的关键在于如何求解W(l)ijWij(l)和b(l)ibi(l)的偏导数。

对于单个训练样本,输出层的权值偏导数计算过程:

∂E(i)∂W(L)kj=∂∂W(L)kj(12∑k=1n(dk(i)−yk(i))2)=∂∂W(L)kj(12(dk(i)−yk(i))2)=−(dk(i)−yk(i))∂yk(i)∂W(L)kj=−(dk(i)−yk(i))∂yk(i)∂net(L)k∂net(L)k∂W(L)kj=−(dk(i)−yk(i))f(x)′|x=net(L)k∂net(L)k∂W(L)kj=−(dk(i)−yk(i))f(x)′|x=net(L)kh(L−1)j∂E(i)∂Wkj(L)=∂∂Wkj(L)(12∑k=1n(dk(i)−yk(i))2)=∂∂Wkj(L)(12(dk(i)−yk(i))2)=−(dk(i)−yk(i))∂yk(i)∂Wkj(L)=−(dk(i)−yk(i))∂yk(i)∂netk(L)∂netk(L)∂Wkj(L)=−(dk(i)−yk(i))f(x)′|x=netk(L)∂netk(L)∂Wkj(L)=−(dk(i)−yk(i))f(x)′|x=netk(L)hj(L−1)

即:

∂E(i)∂W(L)kj=−(dk(i)−yk(i))f(x)′|x=net(L)kh(L−1)j∂E(i)∂Wkj(L)=−(dk(i)−yk(i))f(x)′|x=netk(L)hj(L−1)

同理可得,

∂E(i)∂b(L)k=−(dk(i)−yk(i))f(x)′|x=net(L)k∂E(i)∂bk(L)=−(dk(i)−yk(i))f(x)′|x=netk(L)

令:

δ(L)k=−(dk(i)−yk(i))f(x)′|x=net(L)kδk(L)=−(dk(i)−yk(i))f(x)′|x=netk(L)

则:

∂E(i)∂W(L)kj=δ(L)kh(L)j∂E(i)∂Wkj(L)=δk(L)hj(L)

∂E(i)∂b(L)k=δ(L)k∂E(i)∂bk(L)=δk(L)

对隐含层L-1层:

∂E(i)∂W(L−1)ji=∂∂W(L−1)ji(12∑k=1n(dk(i)−yk(i))2)=∂∂W(L−1)ji(12∑k=1n(dk(i)−f(∑j=1sL−1W(L)kjh(L−1)j+b(L)k))2)=∂∂W(L−1)ji(12∑k=1n(dk(i)−f(∑j=1sL−1W(L)kjf(∑i=1sL−2W(L−2)jih(L−2)i+b(L−1)j)+b(L)k))2)=−∑k=1n(dk(i)−yk(i))f(x)′|x=net(L)k∂net(L)k∂W(L−1)ji∂E(i)∂Wji(L−1)=∂∂Wji(L−1)(12∑k=1n(dk(i)−yk(i))2)=∂∂Wji(L−1)(12∑k=1n(dk(i)−f(∑j=1sL−1Wkj(L)hj(L−1)+bk(L)))2)=∂∂Wji(L−1)(12∑k=1n(dk(i)−f(∑j=1sL−1Wkj(L)f(∑i=1sL−2Wji(L−2)hi(L−2)+bj(L−1))+bk(L)))2)=−∑k=1n(dk(i)−yk(i))f(x)′|x=netk(L)∂netk(L)∂Wji(L−1)

因为,

net(L)k=∑j=1sL−1W(L)kjh(L−1)j+b(L)k=∑j=1sL−1W(L)kjf(∑i=1sL−2W(L−2)jih(L−2)i+b(L−1)j)+b(L)k=∑j=1sL−1W(L)kjf(net(L−1)j)netk(L)=∑j=1sL−1Wkj(L)hj(L−1)+bk(L)=∑j=1sL−1Wkj(L)f(∑i=1sL−2Wji(L−2)hi(L−2)+bj(L−1))+bk(L)=∑j=1sL−1Wkj(L)f(netj(L−1))

所以,

∂E(i)∂W(L−1)ji=∑k=1n(dk(i)−yk(i))f(x)′|x=net(L)k∂net(L)k∂W(L−1)ji=∑k=1n(dk(i)−yk(i))f(x)′|x=net(L)k∂net(L)k∂f(net(L−1)j)∂f(net(L−1)j)∂net(L−1)j∂net(L−1)j∂W(L−1)ji=∑k=1n(dk(i)−yk(i))f(x)′|x=net(L)kW(L)kjf(x)′|x=net(L−1)jh(L−2)i∂E(i)∂Wji(L−1)=∑k=1n(dk(i)−yk(i))f(x)′|x=netk(L)∂netk(L)∂Wji(L−1)=∑k=1n(dk(i)−yk(i))f(x)′|x=netk(L)∂netk(L)∂f(netj(L−1))∂f(netj(L−1))∂netj(L−1)∂netj(L−1)∂Wji(L−1)=∑k=1n(dk(i)−yk(i))f(x)′|x=netk(L)Wkj(L)f(x)′|x=netj(L−1)hi(L−2)

同理,

∂E(i)∂b(L−1)j=∑k=1n(dk(i)−yk(i))f(x)′|x=net(L)kW(L)kjf(x)′|x=net(L−1)j∂E(i)∂bj(L−1)=∑k=1n(dk(i)−yk(i))f(x)′|x=netk(L)Wkj(L)f(x)′|x=netj(L−1)

令:

δ(L−1)j=∑k=1n(dk(i)−yk(i))f(x)′|x=net(L)kW(L)kjf(x)′|x=net(L−1)j=∑k=1nW(L)kjδ(L)kf(x)′|x=net(L−1)jδj(L−1)=∑k=1n(dk(i)−yk(i))f(x)′|x=netk(L)Wkj(L)f(x)′|x=netj(L−1)=∑k=1nWkj(L)δk(L)f(x)′|x=netj(L−1)

∂E(i)∂W(L−1)ji=δ(L−1)jh(L−2)i∂E(i)∂Wji(L−1)=δj(L−1)hi(L−2)

∂E(i)∂b(L−1)j=δ(L−1)j∂E(i)∂bj(L−1)=δj(L−1)

由上可推,第l层(2≤l≤L−12≤l≤L−1)的权值和偏置的偏导可以表示为:

∂E(i)∂W(l)ji=δ(l)jh(l−1)i∂E(i)∂Wji(l)=δj(l)hi(l−1)

∂E(i)∂b(l)j=δ(l)j∂E(i)∂bj(l)=δj(l)

其中,

δ(l)j=∑k=1sl+1W(l+1)kjδ(l+1)kf(x)′|x=net(l)jδj(l)=∑k=1sl+1Wkj(l+1)δk(l+1)f(x)′|x=netj(l)

四、BP算法过程描述

采用批量更新方法对神经网络的权值和偏置进行更新:

  1. 对所有的层2≤l≤L2≤l≤L,设ΔW(l)=0,Δb(l)=0ΔW(l)=0,Δb(l)=0,这里ΔW(l)ΔW(l)和Δb(l)Δb(l)分别为全零矩阵和全零向量;
  2. For i = 1:m,使用反向传播算法,计算各层神经元权值和偏置的梯度矩阵∇W(l)(i)∇W(l)(i)和向量和∇b(l)(i)∇b(l)(i);计算ΔW(l)=∇W(l)(i)ΔW(l)=∇W(l)(i);计算Δb(l)=∇b(l)(i)Δb(l)=∇b(l)(i)。
  3. 更新权值和偏置:计算W(l)=W(l)+1mΔW(l)W(l)=W(l)+1mΔW(l);计算b(l)=b(l)+1mΔb(l)b(l)=b(l)+1mΔb(l)。

作者:Alex Yu
出处:http://www.cnblogs.com/biaoyu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值