BP神经网络模型与学习算法.docx
- 文档编号:2093990
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:6
- 大小:18.92KB
BP神经网络模型与学习算法.docx
《BP神经网络模型与学习算法.docx》由会员分享,可在线阅读,更多相关《BP神经网络模型与学习算法.docx(6页珍藏版)》请在冰豆网上搜索。
BP神经网络模型与学习算法
BP神经网络模型与学习算法
摘要:
分析了神经网络算法的基本原理,给出了BP神经网络算法的具体实现方法,总结了它的特点,并给出了基本流程。
采用Matlab软件编程实现BP神经网络算法。
将神经网络算法应用于函数逼近问题中,并分析相关参数对算法运行结果的影响,最后对BP神经网络算法进行了展望。
关键词:
BP神经网络;学习算法;函数逼近
1BP神经网络及其原理
BP神经网络是误差反向传播神经网络的简称,它由一个输入层,一个或多个隐含层和一个输出层构成,每一次由一定数量的的神经元构成。
这些神经元如同人的神经细胞一样是互相关联的。
BP神经网络的信息处理方式具有如下特点:
①信息分布存储;②信息并行处理;③具有容错性;④具有自学习、自组织、自适应的能力。
目前,在人工神经网络的实际应用中,绝大部分的神经网络模型都采用BP神经网络及其变化形式。
它也是前向网络的核心部分,体现了人工神经网络的精华。
BP神经网络最主要的优点是具有极强的非线性映射能力。
其次,BP神经网络具有对外界刺激和输入信息进行联想记忆的能力。
再次,BP神经网络对外界输入样本有很强的识别与分类能力。
由于它具有强大的非线性处理能力,因此可以较好地进行非线性分类,解决了神经网络发展史上的非线性分类难题。
另外,BP神经网络具有优化计算能力。
BP神经网络本质上是一个非线性优化问题,它可以在已知的约束条件下,寻找一组参数组合,使该组合确定的目标函数达到最小。
不过,其优化计算存在局部极小问题,必须通过改进完善。
由于BP网络训练中稳定性要求学习效率很小,所以梯度下降法使得训练很慢。
动量法因为学习率的提高通常比单纯的梯度下降法要快一些,但在实际应用中还是速度不够,这两种方法通常只应用于递增训练。
多层神经网络可以应用于线性系统和非线性系统中,对于任意函数模拟逼近。
当然,感知器和线性神经网络能够解决这类网络问题。
但是,虽然理论上是可行的,但实际上BP网络并不一定总能有解。
对于非线性系统,选择合适的学习率是一个重要的问题。
在线性网络中,学习率过大会导致训练过程不稳定。
相反,学习率过小又会造成训练时间过长。
和线性网络不同,对于非线性多层网络很难选择很好的学习率。
对那些快速训练算法,缺省参数值基本上都是最有效的设置。
非线性网络的误差面比线性网络的误差面复杂得多,问题在于多层网络中非线性传递函数有多个局部最优解。
寻优的过程与初始点的选择关系很大,初始点如果更靠近局部最优点,而不是全局最优点,就不会得到正确的结果,这也是多层网络无法得到最优解的一个原因。
为了解决这个问题,在实际训练过程中,应重复选取多个初始点进行训练,以保证训练结果的全局最优性。
网络隐层神经元的数目也对网络有一定的影响。
神经元数目太少会造成网络的不适性,而神经元数目太多又会引起网络的过适性。
2BP网络的标准学习算法
学习的过程:
神经网络在外界输入样本的刺激下不断改变网络的连接权值,以使网络的输出不断地接近期望的输出。
学习的本质:
对各连接权值的动态调整。
学习规则:
权值调整规则,即在学习过程中网络中各神经元的连接权变化所依据的一定的调整规则。
学习的类型:
有导师学习。
核心思想:
将输出误差以某种形式通过隐层向输入层逐层反传。
学习的过程:
由信号的正向传播到误差的反向传播。
正向传播:
输入样本——输入层——各隐层——输出层。
判断是否转入反向传播阶段:
若输出层的实际输出与期望的输出(教师信号)不符。
误差反传误差以某种形式在各层表示——修正各层单元的权值。
网络结构:
输入层有n个神经元,隐含层有p个神经元,输出层有q个神经元。
变量定义:
输入向量:
x=(x1,x2,…,xn)
隐含层输入向量:
hi=(hi1,hi2,…,hip)
隐含层输出向量:
ho=(ho1,ho2,…,hop)
输出层输入向量:
yi=(yi1,yi2,…,yiq)
输出层输出向量:
yo=(yo1,yo2,…,yoq)
期望输出向量:
do=(d1,d2,…,dq)
输入层与中间层的连接权值:
w\{ih\}
隐含层与输出层的连接权值:
w\{ho\}
隐含层各神经元的阈值:
bh
输出层各神经元的阈值:
bo
样本数据个数:
k=1,2,…m
激活函数:
f(•)
误差函数:
e=[SX(]1[]2[SX)]∑[DD(]q[]o=1[DD)](do(k)-yoo(k))2
第一步,网络初始化:
给各连接权值分别赋一个区间(-1,1)内的随机数,设定误差函数e,给定计算精度值ε和最大学习次数M。
第二步,随机选取第k个输入样本及对应期望输出:
x(k)=(x1(k),x2(k),…,xn(k))
do(k)=(d1(k),d2(k),…,dq(k))
第三步,计算隐含层各神经元的输入和输出:
hih(k)=∑[DD(]n[]i=1[DD)]w\{ih\}xi(k)-bhh=1,2,…,p
hoh(k)=f(hih(k))h=1,2,…,p
yio(k)=∑[SX(]p[]h=1[SX)]w\{ho\}hoh(k)-boo=1,2,…,q
yoo(k)=f(yio(k))o=1,2,…,q
第四步,利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数δo(k):
e[]who=e[]yioyio[]who
yio(k)[]who=(∑p[]hwhohoh(k)-bo)[]who=hoh(k)
e[]yio=(1[]2∑q[]o=1(do(k)-yoo(k)))2[]yio=-(do(k)-yoo(k))yo'o(k)=-(do(k)-yoo(k))f'(yio(k))-δo(k)
第五步,利用隐含层到输出层的连接权值、输出层的δo(k)和隐含层的输出计算误差函数对隐含层各神经元的偏导数δh(k):
[SX(]e[]w\{ho\}[SX)]=[SX(]e[]yio[SX)][SX(]yio[]w\{ho\}[SX)]=-δo(k)hoh(k)
[SX(]e[]w\{ih\}[SX)]=[SX(]e[]hih(k)[SX)][SX(]hih(k)[]w\{ih\}
[SX(]hih(k)[]w\{ih\}=[SX(](∑[DD(]n[]i=1[DD)]w\{ih\}xi(k)-bh)[]w\{ih\}[SX)]=xi(k)
[SX(]e[]hih(k)[SX)]=[SX(]([SX(]1[]2[SX)]∑[DD(]q[]o=1[DD)](do(k)-yoo(k))2)[]hoh(k)[SX)][SX(]hoh(k)[]hih(k)
=[SX(]([SX(]1[]2[SX)]∑[DD(]q[]o=1[DD)](do(k)-f(yio(k)))2)[]hoh(k)[SX)][SX(]hoh(k)[]hih(k)
=[SX(]([SX(]1[]2[SX)]∑[DD(]q[]o=1[DD)]((do(k)-f(∑[DD(]p[]h=1[DD)]w\{ho\}hoh(k)-bo)2))[]hoh(k)[SX)][SX(]hoh(k)[]hih(k)
=-∑[DD(]q[]o=1[DD)](do(k)-yoo(k))f′(yio(k))w\{ho\}[SX(]hoh(k)[]hih(k)[SX)]
=-(∑[DD(]q[]o=1[DD)]δo(k)w\{ho\})f′(hih(k))-δh(k)
第六步,利用输出层各神经元的δo(k)和隐含层各神经元的输出来修正连接权值w\{ho\}(k):
△w\{ho\}(k)=-μ[SX(]e[]w\{ho\}=μδo(k)hoh(k)
w\{N+1\}\{ho\}=wN\{ho\}+ηδo(k)hoh(k)
第七步,利用隐含层各神经元的δh(k)和输入层各神经元的输入修正连接权:
△w\{ih\}(k)=-μ[SX(]e[]w\{ih\}[SX)]=-μ[SX(]e[]hih(k)[SX)][SX(]hih(k)[]w\{ih\}[SX)]=δh(k)xi(k)
w\{N+1\}\{ih\}=wN\{ih\}+ηδh(k)xi(k)
第八步,计算全局误差:
E=[SX(]1[]2m[SX)]∑[DD(]m[]k=1[DD)]∑[DD(]q[]o=1[DD)](do(k)-yo(k))2
第九步,判断网络误差是否满足要求。
当误差达到预设精度或学习次数大于设定的最大次数,则结束算法。
否则,选取下一个学习样本及对应的期望输出,返回到第三步,进入下一轮学习。
3基于BP神经网络逼近函数
步骤1:
假设频率参数k=1,绘制要逼近的非线性函数的曲线:
k=1;
p=[-1:
.05:
8];
t=1+sin(k*pi/4*p);
plot(p,t,'-');
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
步骤2:
网络的建立
应用newff()函数建立BP网络结构。
隐层神经元数目n暂设为n=3,输出层有一个神经元。
选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,算法采用Levenberg–Marquardt算法trainlm。
n=3;
net=newff(minmax(p),[n,1],
{'tansig''purelin'},'trainlm');
图2网络建立
对于初始网络,可以应用sim()函数
观察网络输出。
y1=sim(net,p);
figure;
plot(p,t,'-',p,y1,':
')
title('未训练网络的输出结果');
xlabel('时间');
ylabel('仿真输出--原函数-');
步骤3:
网络训练
应用train()函数对网络进行训练之前,需要预先设置网络训练参数。
将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。
图3网络训练
net.trainParam.epochs=50;%(网络训练时间设置为50)
net.trainParam.goal=0.01;%(网络训练精度设置为0.01)
net=train(net,p,t);%(开始训练网络)
TRAINLM-calcjx,Epoch0/50,MSE9.27774/0.01,Gradient13.3122/1e-010
TRAINLM-calcjx,Epoch3/50,MSE0.00127047/0.01,Gradient0.0337555/1e-010
TRAINLM,Performancegoalmet.
步骤4:
网络测试:
对于训练好的网络进行仿真:
y2=sim(net,p);
figure;
plot(p,t,'-',p,y1,':
',
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BP 神经网络 模型 学习 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)