人工神经网络及其应用实例.docx
- 文档编号:3861292
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:50
- 大小:292.90KB
人工神经网络及其应用实例.docx
《人工神经网络及其应用实例.docx》由会员分享,可在线阅读,更多相关《人工神经网络及其应用实例.docx(50页珍藏版)》请在冰豆网上搜索。
人工神经网络及其应用实例
人工神经网络及其应用实例
人工神经网络是在现代神经科学研究成果基础上提出的一种抽
象数学模型,它以某种简化、抽象和模拟的方式,反映了大脑功能的
若干基本特征,但并非其逼真的描写。
人工神经网络可概括定义为:
由大量简单元件广泛互连而成的复
杂网络系统。
所谓简单元件,即人工神经元,是指它可用电子元件、
光学元件等模拟,仅起简单的输入输出变换y=σ(x)的作用。
下图是3
中常用的元件类型:
线性元件:
y=0.3x,可用线性代数法分析,但是功能有限,现在
已不太常用。
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-6
-4
-2
0
2
4
6
连续型非线性元件:
y=tanh(x),便于解析性计算及器件模拟,是
当前研究的主要元件之一。
Page1of25
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-6
-4
-2
0
2
4
6
⎧1,x≥0
⎩-1,x<0
,便于理论分析及阈值逻辑器件
实现,也是当前研究的主要元件之一。
2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-6
-4
-2
0
2
4
6
Page2of25
离散型非线性元件:
y=⎨
每一神经元有许多输入、输出键,各神经元之间以连接键(又称
突触)相连,它决定神经元之间的连接强度(突触强度)和性质(兴
奋或抑制),即决定神经元间相互作用的强弱和正负,共有三种类型:
兴奋型连接、抑制型连接、无连接。
这样,N个神经元(一般N很大)
构成一个相互影响的复杂网络系统,通过调整网络参数,可使人工神
经网络具有所需要的特定功能,即学习、训练或自组织过程。
一个简
单的人工神经网络结构图如下所示:
上图中,左侧为输入层(输入层的神经元个数由输入的维度决定),
右侧为输出层(输出层的神经元个数由输出的维度决定),输入层与
输出层之间即为隐层。
输入层节点上的神经元接收外部环境的输入模式,并由它传递给
相连隐层上的各个神经元。
隐层是神经元网络的内部处理层,这些神
经元在网络内部构成中间层,不直接与外部输入、输出打交道。
人工
神经网络所具有的模式变换能力主要体现在隐层的神经元上。
输出层
用于产生神经网络的输出模式。
多层神经网络结构中有代表性的有前向网络(BP网络)模型、
Page3of25
多层侧抑制神经网络模型和带有反馈的多层神经网络模型等。
本文主
要探讨前向网络模型。
多层前向神经网络不具有侧抑制和反馈的连接方式,即不具有本
层之间或指向前一层的连接弧,只有指向下一层的连接弧。
代表是
BP神经网络:
输入模式由输入层进入网络,经中间各隐层的顺序变
换,最后由输出层产生一个输出模式,如下图所示:
输入层
隐层
输出层
多层前向神经网络由隐层神经元的非线性处理衍生它的能力,这
个任务的关键在于将神经元的加权输入非线性转换成一个输出的非
线性激励函数。
下图给出了一个接收n个输入x1,x2,,xn的神经元:
b
1
x1
w1
x2
w2
∑
σ
y
wn
xn
Page4of25
神经元的输出由下式给出:
n
x
j=1
这里输入的加权和(括号内部分)由一个非线性函数传递,b表
示与偏差输入相关的权值,wj表示与第j个输入相关的权值。
使用最广泛的函数是S形函数,其曲线家族包括对数函数和双曲
正切函数,这些都可用来对人口动态系统、经济学系统等建模。
另外
所用的其他函数有高斯函数、正弦函数、反正切函数,在此不一一展
开介绍,本文主要使用的激励函数是对数函数,函数表达式为:
y=L(u)=
函数曲线如下图所示:
1
0.8
0.6
0.4
0.2
0
1
1+e-u
-0.2
-10
-8
-6
-4
-2
0
2
4
6
8
10
对于有限输入量,对数函数输出范围为y∈(0,1)。
在输入为u=0时,
输出值为中间值y=0.5。
输出在u=0附近随着输入的增加以相对快的
Page5of25
y=σ(∑wjj+b)
速率增加并非常慢地到达上限。
对于u<0,输出起初减少得很快,然
后随着下限的接近将会变慢。
训练神经元的规则有很多种,这里首先介绍利用delta规则的学
习,神经元选择为一个单输入单输出的简单情形,数学描述如下:
u=wx+b,y=
1
1+e-u
该神经元具有一个输入x,权重为w,偏差输入为b,目标输出
为t,预报输出为y。
则预报误差为:
E=t-y=t-
11
1+e-u1+e-wx-b
为消除当误差在整个输入模式上求和时引起的误差符号问题,在
delta规则里使用的误差指示是平方误差,定义为:
11
22
1
-wx-b
)2
根据delta规则,最优权值(使平方误差最小)可以在训练过程
中从初始权值出发,沿负梯度方向下降得到。
将平方误差对w,b(神
经元的可调整参数)进行微分,得:
∂ε
∂u
=-E⋅
e-u
(1+e-u)2
∂ε
∂w
∂ε
∂b
=⋅=-E⋅⋅x
∂u∂w(1+e-u)2
=⋅=-E⋅
∂u∂b(1+e-u)2
根据delta原则,权值改变应与误差梯度的负值成比例,引入学
习率β,每次迭代中的权值改变可表示为:
∂εe-u
∂w(1+e-u)2
∂ε
∂b
e-u
(1+e-u)2
Page6of25
=t-
1+e
∂ε∂ue-u
∂ε∂ue-u
∆w=-β⋅=β⋅E⋅⋅x
∆b=-β⋅=β⋅E⋅
学习率β决定了沿梯度方向的移动速度,以确定新的权值。
大的
β值会加快权值的改变,小的β值则减缓了权值的改变。
第i次迭代
后的新权值可表示为:
wi+1=wi+β⋅E⋅
e-u
(1+e-u)2
⋅x
bi+1=bi+β⋅E⋅
e-u
(1+e-u)2
如果将偏差输入b视为输入x的一部分,令x0=1,w0=b,可以得到
对于多输入神经元的权值修正式:
+1
e-u
(1+e-u)2
⋅xj,j=0,1,2,
n
总之,利用delta规则的有监督的学习可以按如下方法来实现:
一个输入模式(x0,x1,x2,,xn)通过连接被传递,它的初始权值被设置
为任意值。
对加权的输入求和,产生输出y,然后y与给定的目标输
出t做比较决定此模式的平方误差ε。
输入和目标输出不断地被提出,
在每一次迭代或每一个训练时间后利用delta规则进行权值调整直到
得到可能的最小平方误差。
delta规则在每一步中通过导数寻找在误差平面中某个特定点局
部区域的斜率,它总是应用这个斜率从而试图减小局部误差,因此,
delta规则不能区分误差空间中的全局最小点和局部最小点,它本身
不能克服单层神经网络的局限,无法直接应用到多层神经网络(易陷
入局部最小点),但它的一般形式是多层神经网络中的学习算法——
反传算法的核心。
在多层前向神经网络的训练过程中,误差导数或关于权值的误差
Page7of25
wijji+β⋅E⋅
=w
表面的斜率对权值的调整是至关重要的,在网络训练期间,所有的输
出神经元和隐含神经元权值必须同时调整,因此,有必要找出关于所
有权值的误差导数。
由于网络层数增多,平方误差ε与权值的连接没
有之前单个神经元时那么直接,故可以使用链式规则的概念来找到导
数。
下面对一个含有一层隐含神经元的BP网络进行讨论,网络结构
如下图所示:
x0=1
1
a0m
a01
∑
σ
y1
b1
y0=1
x1
1
b0
x2
1
∑
1
z
bm
an1
ym
xn
1
anm
∑
σ
各个神经元的输入输出关系为:
yi=
1
1+e-ui
n
j=0
x
m
m
i=0
设目标输出为t,则平方误差ε定义为:
Page8of25
ui=∑ajij,i=1,2,
z=v,v=∑biiy
1
2
使用链式法则,分别列出平方误差ε对所有网络参数的导数:
∂ε
∂v
=-(t-z)
∂ε
∂bi
∂ε
∂v
m
∂ε
∂yi
∂ε
∂v
m
=⋅=⋅
∂ui∂yi∂ui∂yi(1+e-ui)2
i=1,2,
m
∂ε
∂aji
=⋅=⋅xj,i=1,2,
m,j=0,1,2,
n
在实际的编程过程中,我们需要的是
∂ε
∂bi
和
∂ε
∂aji
,所以如果有需要,
也可以直接采用以下整理之后的形式:
∂ε
∂bi
=-(t-z)⋅yi,i=0,1,2,
m
∂ε
∂aji
e-ui
(1+e-ui)2
m,j=0,1,2,
n
研究表明,两层网络在其隐层中使用S形激励函数,在输出层中
使用线性传输函数,就几乎可以以任意精度逼近任意感兴趣的函数,
只要隐层中有足够的单元可用。
问题1:
试使用BP神经网络去逼近正弦函数的正半周,如下:
t=sin(x),x∈[0,π]
由于输入量x仅有一维,故BP神经网络结构可以设计为:
Page9of25
=⋅yi,i=0,1,2,
=⋅bi,i=1,2,
∂ε∂ε∂yi∂εe-ui
∂ε∂ui∂ε
∂ui∂aji
∂ui
=-(t-z)⋅bi⋅⋅xj,i=1,2,
x0=1
a01
∑
σ
y1
y0=1
a02
b1
b0
a11
b2
∑
1
z
x1=x
a12
∑
σ
y2
各个神经元的输入输出关系为:
yi=
1
1+e-ui
1
j=0
x
2
i=0
根据之前的推导,平方误差ε对所有网络参数的导数为:
∂ε
∂bi
=-(t-z)⋅yi,i=0,1,2
∂ε
∂aji
e-ui
(1+e-ui)2
网络参数修正方程为:
k+1
∂ε
∂bi
k
a
k+1
ji
ji
k∂εke-ui
为加快寻找最优权值的速度,可以使用动量法。
之前的方法中,
收敛到最优权值的速度取决于学习率的大小,但是过大的学习率会导
致来回震荡,不能稳定到最优权值点。
动量法的引入,使得较大的学
习率也可以具有较好的稳定性,即提供了在学习期间到达最优权值时
Page10of25
ui=∑ajij,i=1,2
z=v,v=∑biiy
=-(t-z)⋅bi⋅⋅xj,i=1,2,j=0,1
biibk-β⋅
=
=bi+β⋅(t-z)⋅yi,i=0,1,2
=a-β⋅=aji+β⋅(t-z)⋅bi⋅⋅xj,i=1,2,j=0,1
∂aji(1+e-ui)2
的稳定性。
这种方法基本上是将过去权值变化的平均值附加到每一次
权值变化的新权值增量,从而使网络权值的变化更平滑。
数学表示如
下:
∆wk+1=μ⋅∆wk+(1-μ)⋅β⋅(-
∂ε
∂w
)
式中,μ是一个在0和1之间的动量参数,∆wk是在前一个训练
时间里的权值变化。
使用动量法的实际效果是:
基本上,如果以前积
累的变化与之前方向所暗示的是同一个方向时,动量部分就会加速当
前权值改变;如果当前积累的变化是相反的方向,动量将阻止当前的
变化。
据此编写MATLAB程序,源代码如下:
beta=0.1;
miu=0.8;
fori=1:
1:
101;
x1(1,i)=(i-1)*pi/100;
t(1,i)=sin(x1(1,i));
end
x0=1;
y0=1;
a01=rand();
a02=rand();
a11=rand();
a12=rand();
b0=rand();
b1=rand();
b2=rand();
delta_a01=0;
delta_a02=0;
delta_a11=0;
delta_a12=0;
delta_b0=0;
delta_b1=0;
delta_b2=0;
k=1;
total_error=0;
Page11of25
while1
u1=a01*x0+a11*x1(1,k);
u2=a02*x0+a12*x1(1,k);
temp1=exp(-u1)/((1+exp(-u1))^2);
temp2=exp(-u2)/((1+exp(-u2))^2);
y1=1/(1+exp(-u1));
y2=1/(1+exp(-u2));
z=b0*y0+b1*y1+b2*y2;
total_error=total_error+(t(1,k)-z)^2/2;
delta_b0=miu*delta_b0+(1-miu)*beta*sum((t(1,k)-z)*
y0);
b0=b0+delta_b0;
delta_b1=miu*delta_b1+(1-miu)*beta*sum((t(1,k)-z)*
y1);
b1=b1+delta_b1;
delta_b2=miu*delta_b2+(1-miu)*beta*sum((t(1,k)-z)*
y2);
b2=b2+delta_b2;
delta_a01=miu*delta_a01+(1-miu)*beta*sum((t(1,k)-z)
*b1*temp1*x0);
a01=a01+delta_a01;
delta_a02=miu*delta_a02+(1-miu)*beta*sum((t(1,k)-z)
*b2*temp2*x0);
a02=a02+delta_a02;
delta_a11=miu*delta_a11+(1-miu)*beta*sum((t(1,k)-z)
*b1*temp1*x1(1,k));
a11=a11+delta_a11;
delta_a12=miu*delta_a12+(1-miu)*beta*sum((t(1,k)-z)
*b2*temp2*x1(1,k));
a12=a12+delta_a12;
k=k+1;
ifk==length(x1)+1
total_error
k=1;
iftotal_error<0.001
break;
else
total_error=0;
end
end
end
clearu1u2temp1temp2y1y2zx0y0;
Page12of25
x0=ones(size(x1));
y0=ones(size(x1));
u1=a01*x0+a11*x1;
u2=a02*x0+a12*x1;
y1=1./(1+exp(-u1));
y2=1./(1+exp(-u2));
z=b0*y0+b1*y1+b2*y2;
plot(x1,t,'r');
holdon;
plot(x1,z,'b');
holdoff;
axis([0pi-0.21.2]);
程序运行后,输出拟合曲线与原函数曲线,如下图所示:
1
0.8
0.6
0.4
0.2
0
-0.2
0
0.5
1
1.5
2
2.5
3
可以看出,训练后的神经网络的预报输出与目标输出已经很接近,
拟合效果是较为理想的。
Page13of25
总的来说,神经网络的学习过程,是神经网络在外界输入样本的
刺激下不断改变网络的连接权值乃至拓扑结构,以使网络的输出不断
地接近期望的输出。
BP算法是多层前向神经网络的一种学习规则,
核心思想是将输出误差以某种形式通过隐层向输入层逐层反传,学习
的过程就是信号的正向传播与误差的反向传播交替的过程。
多层前向神经网络的主要功能有:
(1)非线性映射能力。
多层前向神经网络能学习和存储大量输
入——输出模式映射关系,而无需事先了解描述这种映射关系的数学
方程。
只要能提供足够多的样本模式供对神经网络进行学习训练,它
便能完成由n维输入空间到m维输出空间的非线性映射。
(2)泛化能力。
当向网络输入训练时未曾见过的非样本数据时,
网络也能完成由输入空间到输出空间的正确映射。
(3)容错能力。
输入样本中带有较大的误差甚至个别错误对网
络的输入输出规律影响很小。
多层前向神经网络的标准BP学习算法有着以下明显的缺陷:
(1)易形成局部极小(属于贪婪算法,局部最优)而得不到全
局最优;
(2)训练次数多使得学习效率低下,收敛速度慢;
(3)隐节点的选取缺乏理论支持;
(4)训练时学习新样本有遗忘旧样本的趋势。
标准BP算法的改进方法主要有:
增加动量项;自适应调节学习
率等。
增加动量项已经在之前进行过讨论,可以减小振荡趋势,提高
Page14of25
训练速度。
自适应调节学习率是指根据环境变化增大或减小学习率,
基本方法是:
设一初始学习率,若经过一批次权值调整后使总误差增大,则本
次调整无效,并令β=α1β(α1<1);若经过一批次权值调整后使总误差
减小,则本次调整有效,并令β=α2β(α2>1)。
下面通过一个非线性分类问题来考察前向神经网络在模式识别
领域的应用。
问题2:
x-y平面上有200个点,分别属于两个类别。
试设计并训练一个
多层前向神经网络,以完成该分类任务,使得被错误分类的样本数量
最低。
ω1类以绿色标示,ω2类以蓝色标示。
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Page15of25
根据题意,前向神经网络的结构设计如下:
x0=1
a01
∑
σ
y1
y0=1
a02
b1
b0
x1=x
a11
a12
∑
σ
z
b2
x2=y
a21
a22
∑
σ
y2
网络的输入输出关系及分类策略为:
yi=
2
1+e-ui
2
j=0
x
z=
2
1+e-v
2
i=0
y
⎧ω,z>0
⎩ω2,z<0
分类误差定义为:
12⎧1,(x,y)∈ω1
2⎩-1,(x,y)∈ω2
由此可得误差量对网络参数的导数:
∂ε∂ε∂z∂ve-v
∂bi∂z∂v∂bi(1+e-v)2
∂ε
∂aji
-v
2
为简化表达式,定义:
p=-(t-z)⋅
-v
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工 神经网络 及其 应用 实例