神经网络与matlab仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
神经网络与matlab仿真
随着技术的发展,人工神经网络在各个方面应用越来越广泛,由于matlab仿真技术对神经网络的建模起着十分重要的作用,因此,通过讨论神经网络中基础的一类——线性神经网络的matlab仿真,对神经网络的matlab仿真做一个基本的了解。
1.面向matlab工具箱的神经网络设计
人工神经网络可通过硬件或软件方式来实现。硬件方式即神经计算机。目前较常用的还是软件实现方式。已有许多公司和研究单位设计了通用的ANN程序以方便人们使用,matlab提供的神经网络工具箱就是其重要代表。
神经网络工具箱是在matlab环境下所开发出来的许多工具箱之一,它是以人工神经网络理论为基础,用matlab语言构造出典型神经网络的激活函数,如S 型、线性、竞争层、饱和线性等激活函数,使设计者对所选定网络输出的计算变成对激活函数的调用。另外,根据各种典型的修正网络权值的规定,加上网络的训练过程,用matlab编写出各种网络设计与训练所涉及的公式运算、矩阵操作和方程求解等大部分子程序,网络的设计者可以根据自己的需要进行调用,免除了自己编写复杂而庞大的算法程序的困扰,集中精力去思考需要解决的问题,提高工作效率和解题质量。
目前matlab几乎完整地概括了神经网络的基本成果,对于各种网络模型,神经网络工具箱集成了多种学习算法,为用户提供了极大的方便。
同时,matlab的其他工具箱也为我们在神经网络工具箱的基础上开发研究模糊与神经网络的结合、神经网络的样条算法等问题提供了辅助手段。
2 线性神经网络
线性神经网络是最简单的一种神经元网络,它可以由一个或多个线性神经元构成。50年代末期提出的自适应线性元件是线性神经网络最早的典型代表。其每个神经元的传递函数为线性函数,其输出可以取任意值。线性神经网络可以采用Widrow-Hoff学习规则,也称为LMS算法来调整网络的权值和阈值。
2.1 线性神经网络模型
线性神经元模型的神经元有一个线性传递函数purelin,其输入输出之间是简
单的比例关系,一次对单个线性神经元,由图1可得,a=purelin(ω×p+b).因此,线性神经网络允许输出可以取任意值,而不仅仅是0或1。
线性神经元模型
线性神经元传递函数
具有R 个输入的单层(S 个神经元)线性神经网络模型。
单层多输入的线性神经网络模型
2.2 线性神经网络的学习算法
Widrow-Hoff 学习规则,又称为最小均方误差LMS (Least Mean Square Error )
学习算法,由Widrow-Hoff 提出,属于有导师学习算法。
LMS 学习规则定义如下:
22
11
11()(()())m m
k k mse e k d k y k m m ====-∑∑
其目标是通过调节权值,使mse 从误差空间的某点开始,沿着mse 的斜面向下滑行,最终使mse 达到最小值。
LMS 算法的实现有五个步骤:
第一步:初始化。给各个连接赋一个较小的随机值; 第二步:输入一个样本,计算连接权值的调整量:
2()()
2()ij ij e k e k e k ωω∂∂=∂∂
2()()
2()e k e k e k b b ∂∂=∂∂
1()[()(())]R ij i ij ij i e k e
d k p k b ωωω=∂∂=-+∂∂∑
第三步:调整连接权值:
根据负梯度下降的原则,网络权值和阈值修正公式如下
(1)()2()()(1)()2()T k k e k p k b k b k e k ωωηη+=++=+
式中η为学习率,当其取较大值时,可以加快网络的训练速度,但是如果其值太大,会导致网络稳定性的降低和训练误差的增加。所以,为了保证网络进行稳定的训练,学习率的值必须选择一个合适的值;
第四步:计算均方误差:
22
11
11()(()())m m
k k mes e k d k y k m m ====-∑∑
第五步:判断误差是否为零或者是否达到预选设定的要求。如果是,则结束算法,否则输入下一个样本,返回第二步进入下一轮求解过程。
3 线性神经网络的matlab 实现
下面给出一个线性神经网络的设计要求,并尝试用matlab提供的神经网络工具函数实现。
设计一个简单的单层线性神经元,其输入和目标分别为P=[+1.0 -1.2],T=[+0.5 +1.0]。权值和阈值的范围分别为-1~1。试用matlab实现其从输入到输出的变化关系。
由例中的条件编写matlab源程序如下:
%dlin1.m
%NEWLIND
%SIM
clf;
figure(gcf);
P=[1.0 -1.2];
T=[0.5 1.0];
w_range=-1:0.1:1;
b_range=-1:0.2:1;
ES=errsurf(P,T,w_range,b_range,'purelin');
plotes(w_range,b_range,ES);
ax=findobj(gcf.'type','axes');
pause
net=neslind(P,T);
format compact;
A=0;E=0;SSE=0;
A=sim(net,P)
E=T-A
SSE=sumsqr(E)
plotes(w_range,b_range,ES);
plotep(net.IW{1.1},net.b{1},SSE);
p=-1.2;
a=0;
a=sim(net,p) % 进行网络验证
disp('End of dline1')
执行程序,可得到线性网络求解后的误差曲面图
对此线性网络进行更多的训练以求最优解,则matlab程序更改如下。% dlin2.m
% NEWLIN
% TRAIN
% SIM
clf;
figure(gcf);
P=[1.0 -1.2];
T=[0.5 1.0];