BP算法和数学原理

本文详细介绍了BP神经网络的工作原理及算法实现,包括网络结构、正向传播与反向传播过程,以及权重更新策略等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络上有很多,不过公式很多不太清楚,这里重新整理一下。这样以后开发程序就可以直接翻译过去了。 BP网络输入层隐层(中间层)输出层 坐标初始化(-3,3,-3,3) //坐标(2, 1, "labels", 1) 线条颜色 = "green" strokewidth = "2" 线([-2,2], [0,2],"点箭头") 线([-2,2], [0,0],"点箭头") 线([-2,2], [0,-2],"点箭头") 线([-2,0], [0,2],"点箭头") 线([-2,0], [0,0],"点箭头") 线([-2,0], [0,-2],"点箭头") 线([-2,-2], [0,2],"点箭头") 线([-2,-2], [0,0],"点箭头") 线([-2,-2], [0,-2],"点箭头") 线([0,2], [2,2],"点箭头") 线([0,2], [2,0],"点箭头") 线([0,2], [2,-2],"点箭头") 线([0,0], [2,2],"点箭头") 线([0,0], [2,0],"点箭头") 线([0,0], [2,-2],"点箭头") 线([0,-2], [2,2],"点箭头") 线([0,-2], [2,0],"点箭头") 线([0,-2], [2,-2],"点箭头") 线([2,2], [2,2],"点箭头") 线([2,0], [2,0],"点箭头") 线([2,-2], [2,-2],"点箭头") 点([-2,-0.5], "open") 点([-2,-1], "open") 点([-2,-1.5], "open") 点([0,-0.5], "open") 点([0,-1], "open") 点([0,-1.5], "open") 文字([-1,2.5], "BP网络") 文字([-2.5,-2.5], "输入层") 文字([0,-2.5], "隐层(中间层)") 文字([2.5,-2.5], "输出层") BP网络原理
设有一个m层的神经网络,并在输入层加有样本X;设第k层的i神经元的输入总和表示为Uik,输出Xik;从第k-1层的第j个神经元到第k层的第i个神经元的权系数为Wij各个神经元的激发函数为f,则各个变量的关系可用下面有关数学式表示:
Xik=f(Uik)
Uik=∑jWijXjk-1

反向传播算法分二步进行,即正向传播和反向传播。这两个过程的工作简述如下。

1.正向传播

输入的样本从输入层经过隐单元一层一层进行处理,通过所有的隐层之后,则传向输出层;在逐层处理的过程中,每一层神经元的状态只对下一层神经元的状态产生影响。在输出层把现行输出和期望输出进行比较,如果现行输出不等于期望输出,则进入反向传播过程。

2.反向传播

反向传播时,把误差信号按原来正向传播的通路反向传回,并对每个隐层的各个神经元的权系数进行修改,以望误差信号趋向最小。

BP算法

BP算法实质是求取误差函数的最小值问题。这种算法采用非线性规划中的最速下降方法,按误差函数的负梯度方向修改权系数。

为了说明BP算法,首先定义误差函数e。取期望输出和实际输出之差的平方和为误差函数,则有:


e=12∑i(Xim+Yi)2 ------- (1)

其中:Yi是输出单元的期望值;它也在这里用作教师信号;
Xim是实际输出;因为第m层是输出层。


由于BP算法按误差函数e的负梯度方向修改权系数,故权系数Wij的修改量ΔWij,和e

ΔWij≅-∂e∂Wij
也可以写为: ΔWij≅-η∂e∂Wij 其中 η为学习速率,即步长
接下来我们算∂e∂Wij


∂e∂Wij=∂e∂Uik⋅Uik∂Wij

由于
Uik∂Wij=∑lWilXlk-1∂Wij=Xjk-1
所以
∂e∂Wij=∂e∂Uik⋅Xjk-1
从而有
ΔWij=-η∂e∂Wij=-η∂e∂Uik⋅Xjk-1


令 dik=∂e∂Uik
则学习公式为: ΔWij=-ηdik⋅Xjk-1 其中: η 为学习速率,即步长,一般取0-1间的数。
从上面可知,dik 实际仍末给出明显的算法公式
下面求 dik 的计算公式。
dik=∂e∂Uik=∂e∂Xik⋅∂Xik∂Uik
由前面可以知 ∂Xik∂Uik=f'(Uik)
为了方便进行求导,取f为连续函数。一般取非线性连续函数,例如Sigmoid函数。当取f为非对称Sigmoid函数时,有:
f(Uik)=11+exp(-Uik)
则有:
f'(Uik)=f(Uik)(1-f(Uik))=Xik(1-Xik)

如果 k=m ,则是输出层,这时有 Yi 是输出期望值,它是常数。由(1)可以知

∂e∂Xik=∂e∂Xim=(Xim-Yi)

从而有 dim=Xim(1-Xim)(Xim-Yi)


2.如果 k<m ,则该层是隐层.这时应考虑上一层对它的作用,故有:
∂eXik=∑l⋅∂e∂Ulk+1⋅∂Ulk+1Xik

由于 ∂e∂Ulk+1=dlk+1
而且 ∂Ulk+1∂Xik=∂∑WljXjk∂Xik=Wli
故而有 ∂e∂Xik=∑l⋅Wl,i⋅dlk+1
最后有 ∂e∂Xik=∑lWl,i⋅dlk+1 dik=∑l∂e∂Xik⋅∂Xik∂Uik=Xik(1-Xik)∑lWli⋅dlk+1

从上述过程可知:多层网络的训练方法是把一个样本加到输入层,并根据向前传播的规则:
xik=f(Uik)
不断一层一层向输出层传递,最终在输出层可以得到输出Xim。
把 Xim 和期望输出 Yi 进行比较.如果两者不等,则产生误差信号 e ,接着则按下面公式反向传播修改权系数:
ΔWij=-ηdikXjk-1
其中
dim=Xim(1-Xim)(Xim-Yi)
dik=Xik(1-Xik)∑lWl,idlk+1

上面公式中,求取本层dik时,要用到高一层的dik+1;可见,误差函数的求取是从输出层开始,到输入层的反向传播过程。在这个过程中不断进行递归求误差。

通过多个样本的反复训练,同时向误差渐渐减小的方向对权系数进行修正,以达最终消除误差。从上面公式也可以知道,如果网络的层数较多时,所用的计算量就相当可观,故而收敛速度不快。

为了加快收敛速度,一般考虑上一次的权系数,并以它作为本次修正的依据之一,故而有修正公式:
ΔWij(t+1)=-ηdik⋅Xjk+1+αΔWij(t)


三、BP算法的执行步骤

在反向传播算法应用于前馈多层网络时,采用Sigmoid为激发函数时,可用下列步骤对网络的权系数 Wij 进行递归求取。注意对于每层有n个神经元的时候,即有i=1,2,…,n;j=1,2,…,n。对于第k层的第i个神经元,则有n个权系数 Wi,1,Wi,2,...,Wi,n,另外取多—个 Wi,n+1用于表示阀值θi;并且在输入样本X时,取 X=(X1,X2,...,Xn,1) 。

算法的执行的步骤如下:

1.对权系数 Wi,j 置初值。
对各层的权系数 Wi,j 置一个较小的非零随机数,但其中 Wi,n+1=-θ。

2.输入一个样本 X=(Xl,X2,...,Xn,1) ,以及对应期望输出 Y=(Y1,Y2,...,Yn) 。

3.计算各层的输出

对于第k层第i个神经元的输出 Xik,有:
Uik=∑jn+1WijXjk-1,Xn+1k-1=1,Wi,n+1=-θ
Xik=f(Uik)

4.求各层的学习误差 dik
对于输出层有 k=m,有
dim=Xim(1-Xim)(Xim-Yi)
对于其他各层,有
dik=Xik(1-Xik)∑lWl,idlk+1

5.修正权系数 Wi,j 和阀值 θ
由前面知:
Wi,j(t+1)=Wi,j(t)-η⋅dik⋅Xjk-1
增加动量项有:
Wi,j(t+1)=Wi,j(t)-η⋅dik⋅Xjk-1+αΔWij(t)
其中:
ΔWi,j(t)=-ηdik⋅Xjk+1+αΔWi,j(t-1)=Wi,j(t)-Wi,j(t-1)

6.当求出了各层各个权系数之后,可按给定品质指标判别是否满足要求。如果满足要求,则算法结束;如果未满足要求,则返回(3)执行。

这个学习过程,对于任一给定的样本 Xp=(X1p,X2p,...,Xnp,1) 和期望输出 Yp=(Y1p,Y2p,...,Ynp) 都要执行,直到满足所有输入输出要求为止

转载地址:http://www.mathfan.com/CMS/BP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzj0470

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值