神经网络课程认识
本学期我们对人工神经网络进行了学习,在学习的过程中,我们对什么
是神经网络,神经网络的发展史,神经网络的特点和功能以及神经网络的应
用领域等多方面知识都有所了解。从开始的对人工神经网络的初步了解到最
后模型的建立,我们对人工神经网络的认识不断加深。神经网络作为自动控
制及智能控制专业的一个重要分支,掌握一些与其相关的基础知识对今后的
学习会有较大的帮助。
具体的人工神经网络中,我们主要学习了单层感知器、标准 BP 网络、
改进型的 BP 网络、自组织竞争神经网络以及离散型 Hopfield 网络(即 DHNN
网络)。其中,我们重点学习了标准型 BP 网络。在后面的编程训练中,我
们也以标准 BP 网络为模型,设计了一个较为简单的实际型编程问题。
接下来谈谈具体的学习情况:
在学习的过程中,我们首先学习了什么是人工神经网络。这是一个非
线性动力学系统,其特色在于信息的分布式存储和并行协同处理。虽然单个
神经元的结构极其简单,功能有限,但大量神经元构成的网络系统所能实现
的行为却是极其丰富多彩的。以数学和物理的方法以及信息处理的角度对人
脑神经网络进行抽象,并建立某种简化的模型就是人工神经网络。人工神经
网络远不是人脑生物神经网络的真实写照,而只是对它的简化,抽象与模拟。
揭示人脑的奥妙不仅需要各学科的交叉和各领域专家的协作,还需要测试手
段的进一步发展。目前已经提出了上百种的神经网络模型,这种简化模型能
放映出人脑的许多基本特征。综合人工神经网络的来源,特点及各种解释,
可以简单的表述为:人工神经网络是一种旨在模仿人脑结构及其功能的脑式
智能信息处理系统。
神经网络的研究可以追溯到 19 世纪末期,其发展可分为启蒙时期,低
潮时期,复兴时期及新时期四个阶段。人工神经网络是基于对人脑组织结构,
活动机制的初步认识提出的一种新型信息处理体系。人工神经网络具有人脑
的一些基本功能,也有其自身的一些特点。结构特点:信息处理的并行性,
信息储存的分布性,信息处理单元的互连性,结构的可塑性。性能特点:高
度的非线性,良好的容错性和计算机的非精确性。能力特征:自学习,自组
织与自适应性。人工神经网络是借鉴于生物神经网络而发展起来的新型智能
信息处理系统,由于其结构上“仿造”了人脑的生物神经系统,因而其功能
上也具有了某种智能特点。由于神经网络具有分布储存信息和并行计算的性
能,因此它具有对外界刺激信息和输入模式进行联想记忆的能力。这种能力
是通过神经元之间的协同结构以及信息处理的集体行为而实现的。设计合理
的神经网络通过对系统输入输出样本对进行自动学习,能够以任意精度逼近
任意复杂的非线性映射,可以作为多维非线性函数的通用数学模型。神经网
络对外界输入样本具有很强的识别和分类能力,可以很好的解决对非线性曲
面的逼近,因此比传统的分类器具有更好的分类与识别能力。某些类型的神
经网络可以把待求的问题的可变参数设计为网络的状态,将目标函数设计为
网络的能量函数,经过动态演变过程达到稳定状态时对应的能量函数最小,
从而其稳定状态就是问题的最优解。同时,神经网络的知识抽取能力使其能
够在没有任何先验知识的情况下自动从输入数据中提取特征,发现规律,并
通过自组织过程构建网络,使其适应于表达所发现的规律。人的先验知识可
以大大提高神经网络的知识处理能力,两者相结合可以使神经网络只能进一
步提高。
神经网络的研究内容相当广泛,反映了多学科交叉技术领域的特点。
目前,主要的研究工作集中在以下几个方面:(1)生物原型研究。从生理学、
心理学、解剖学、病理学等生物科学方面研究神经细胞、神经网络、神经系
统的生物原型结构及其功能机理。(2)建立理论模型。根据生物原型的研究,
建立神经元、神经网络的理论模型。其中包括概念模型、知识模型、物理化
学模型、数学模型等。(3)网络模型与算法研究。在理论模型研究的基础上
构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学
习算法的研究。这方面的工作也称为技术模型研究。(4)人工神经网络应用
系统。在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用
系统。神经网络的脑式智能信息处理特征与能力使其应用领域日益扩大,潜
力日趋明显,许多传统的信息处理方法无法解决的问题采用神经网络后都取
得了良好的效果,给我们带来了不少的方便。
前馈神经网络是本课程学习的重点,本课程介绍了常用前馈网络: BP
(Back Propagation)神经网络,以及它的前身感知器、自适应线性单元和标准
BP 算法的几种改进方法。我们首先认识到前馈神经网络是神经网络中的一种
典型的分层结构,信息从输入层进入网络后逐层向前传递至输出层。根据前
馈网络中神经元转移函数、隐层数以及权值调整规则的不同,可以形成具有
各种功能特点的神经网络。除此之外,还对感知器和一些常用的算法进行了
学习,同时也认识到了某些算法的不足之处。这些对于今后神经网络的进一
步学习都是良好的基础。
此外,对于 SOFM 网络和离散型反馈网络 DHNN,我们也进行了一
些学习,主要侧重于相关网络模型的概念、工作原理和算法实现,但时间所
限,学习得并不深入。
通过本课程的学习,我们认识到神经网络技术在各个领域的广泛应用,
作为一名自动化专业的学生,我们更应该掌握这门技术,并将其运用到今后
的工作当中,用以提高智能控制系统的效率与质量。神经网络同常用的 PID
控制、模糊控制等经典算法一样,是一门实际应用价值很高的工程类技术实
现手段。我们也应该学会对模型的建立、优化、训练,使人工神经网络技术
更好的为我们服务。
神经网络编程作业:
我们的题目是:利用 BP 网络,实现一些简单函数的模拟,包括
e x
等等。输入样本,进行若干次训练,教师信号为期望函数的理想输出值。将
y
1
x
,
y
每一次训练的输出层输出值与理想值进行比较,并根据结果按照公式对隐层
权值矩阵和输出层全职矩阵进行权值调整。进行若干次训练,当达到预设的
精度时,停止训练;当一直没有达到预设精度时,在预设训练次数达到时自
动停止训练。
为了方便地能够得到程序输出图像,我们选择 MATLAB 进行编程。同时,
为了简化起见,我们考虑只有一个隐层的标准 BP 网络,由于我们自身能力
以及时间所限,我们并未改进 BP 算法,导致最后的运算结果可能出现较大
的偏差,敬请老师谅解。
以下为程序代码:
主函数(main.m):
clear all
yangben=1:0.1:5;%样本输入值
input=1;%输入层节点
output=1;%输出层节点
yingchengjiedianshu=5;%隐层节点数目
xunliancishu=1500;%最大训练次数
jingdu=0.001;%预设精度
xuexilv=0.005;%学习率
jiaoshixinhao=yangben.^(-1);%期望输出函数
bphanshu(yangben,jiaoshixinhao,xunliancishu,input,yingchengjiedianshu,output,jingdu,xuexil
v);
bphanshu(yangben,jiaoshixinhao,2000,2,6,output,0.005,0.02); % 更 改 训 练 次 数 、 输 入 层 节 点
数、隐层节点数、预设精度、学习率等参数
jiaoshixinhao=exp(-yangben);%更改期望输出函数
bphanshu(yangben,jiaoshixinhao,xunliancishu,input,yingchengjiedianshu,output,jingdu,xuexil
v);
bphanshu(yangben,jiaoshixinhao,2000,2,6,output,0.005,0.02);%更改训练次数、输入层节点数、
隐层节点数、预设精度、学习率等参数
实现函数(bphanshu.m):
入口参数分别是样本、教师信号、训练次数、输入层节点数、隐层节点
数、输出层节点数、预设精度、预设学习率。
function bphanshu(a,b,e,f,g,h,m,n)
number=length(a);
error=zeros(1,e+1);
v=rand(f,g);
w=rand(g,h);
error1=zeros(1,number);
dw=zeros(g,h);
dv=zeros(f,g);
[a]=premnmx(a); %归一化处理
for count=1:e
for c=1:number
for k=1:h
d(k)=b(c);%获得期望输出
end
for i=1:f
x(i)=a(c);%获得输入
end
for j=1:g
net=0;
for i=1:f
net=net+x(i)*v(i,j);%第 j 个隐层节点的净输入
end
y(j)=1/(1+exp(-net));%单极性 sigmiod 函数
end
for k=1:h
net=0;
for j=1:g
net=net+y(j)*w(j,k);
end
o(k)=1/(1+exp(-net));
end
zhongjianwucha=0;
for k=1:h
zhongjianwucha=zhongjianwucha+(d(k)-o(k))^2;%第一组训练后的误差计算
end
errorp(c)=0.5*zhongjianwucha;%
for k=1:h
piandao1(k)=(d(k)-o(k))*o(k)*(1-o(k));%输出层误差偏导
end
for j=1:g
tem=0;
for k=1:h
tem=tem+piandao1(k)*w(j,k);%
end
piandao2(j)=tem*y(j)*(1-y(j));%隐层偏导
end
for j=1:g
for k=1:h
dw(j,k)=n*piandao1(k)*y(j);%权值 w 的调整
w(j,k)=w(j,k)+dw(j,k);
end
end
for i=1:f
for j=1:g
dv(i,j)=n*piandao2(j)*x(i);%%权值 v 的调整
v(i,j)=v(i,j)+dv(i,j);
end
end
end
%一次 BP 训练结束
temp=0;
for i=1:number
temp=temp+errorp(i)*errorp(i);%误差求和
end;
error(count)=sqrt(temp/number);%求精度
if(error(count)