人工神经网络及其应用第 4讲 BP神经网络何建华电信系,华中科技大学
2003年 2月 28日
2009-7-25
2
一,内容回顾二,BP网络三、网络设计四、改进 BP网络五、内容小结内容安排
2009-7-25
3
一、内容回顾
感知机
自适应线性元件
2009-7-25
4
一、内容回顾
感知机
– 感知机简介
– 神经元模型
– 网络结构
– 功能解释
– 学习和训练
– 局限性
自适应线性元件
2009-7-25
5
一、内容回顾
感知机
自适应线性元件
– Adline简介
– 网络结构
– 网络学习
– 网络训练
2009-7-25
6
2.1 BP网络简介
2.2 网络模型
2.3 学习规则
2.4 图形解释
2.5 网络训练二,BP网络
2009-7-25
7
反向传播网络 (Back-Propagation Network,简称 BP网络 )是将 W-H学习规则一般化,对非线性可微分函数进行权值训练的多层网络
权值的调整采用反向传播 (Back-propagation)
的学习算法
它是一种多层前向反馈神经网络,其神经元的变换函数是 S型函数
输出量为 0到 1之间的连续量,它可实现从输入到输出的任意的非线性映射
2.1 BP网络简介
2009-7-25
8
2.1 BP网络简介
BP网络主要用于下述方面
函数逼近:用输入矢量和相应的输出矢量训练一个网络逼近一个函数
模式识别和分类:用一个特定的输出矢量将它与输入矢量联系起来;把输入矢量以所定义的合适方式进行分类;
数据压缩:减少输出矢量维数以便于传输或存储
具有将强泛化性能:使网络平滑地学习函数,使网络能够合理地响应被训练以外的输入
泛化性能只对被训练的输入/输出对最大值范围内的数据有效,即网络具有内插值特性,不具有外插值性。
超出最大训练值的输入必将产生大的输出误差
2009-7-25
9
2.2 网络模型一个具有 r个输入和一个隐含层的神经网络模型结构
2009-7-25
10
2.2 网络模型
感知器和自适应线性元件的主要差别在激活函数上:前者是二值型的,后者是线性的
BP网络具有一层或多层隐含层,除了在多层网络上与前面已介绍过的模型有不同外,其主要差别也表现在激活函数上。
BP网络的激活函数必须是处处可微的,因此它不能采用二值型的阀值函数 {0,1}或符号函数 {- 1,
1}
BP网络经常使用的是 S型的对数或正切激活函数和线性函数
2009-7-25
11
2.2 网络模型
BP网络特点
– 输入和输出是并行的模拟量
– 网络的输入输出关系是各层连接的权因子决定,没有固定的算法
– 权因子通过学习信号调节。学习越多,网络越聪明
– 隐含层越多,网络输出精度越高,且个别权因子的损坏不会对网络输出产生大的影响
– 只有当希望对网络的输出进行限制,如限制在 0和 1之间,那么在输出层应当包含 S型激活函数
– 在一般情况下,均是在隐含层采用 S型激活函数,而输出层采用线性激活函数
2009-7-25
12
2.2 网络模型
S型函数具有非线性放大系数功能,可以把输入从负无穷大到正无穷大的信号,变换成 -1到 l之间输出
对较大的输入信号,放大系数较小;而对较小的输入信号,放大系数则较大
采用 S型激活函数可以处理和逼近非线性输入 /输出关系
2009-7-25
13
2.3 学习规则
BP算法属于 δ 算法,是一种监督式的学习算法
主要思想
– 对于 q个输入学习样本,P1,P2,…,Pq,已知与其对应的输出样本为,T1,T2,…,Tq
– 使网络输出层的误差平方和达到最小
– 用网络的实际输出 A1,A2,…,Aq,与目标矢量 T1,T2,…,Tq
之间的误差修改其权值,使 Am与期望的 Tm,(m= l,…,q)
尽可能接近
2009-7-25
14
2.3 学习规则
BP算法是由两部分组成,信息的正向传递与误差的反向传播
– 正向传播过程中,输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态
– 如果在输出层未得到期望的输出,则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至达到期望目标
2009-7-25
15
2.3 学习规则
假设输入为 P,输入神经元有 r个,隐含层内有 s1个神经元,激活函数为 F1,输出层内有 s2个神经元,对应的激活函数为 F2,输出为 A,目标矢量为 T
2009-7-25
16
2.3 学习规则
信息的正向传递
– 隐含层中第 i个神经元的输出
– 输出层第 k个神经元的输出
– 定义误差函数
2009-7-25
17
2.3 学习规则
利用梯度下降法求权值变化及误差的反向传播
– 输出层的权值变化
其中
同理可得
2009-7-25
18
2.3 学习规则
利用梯度下降法求权值变化及误差的反向传播
– 隐含层权值变化
其中
同理可得
2009-7-25
19
2.3 学习规则
对于 f1为对数 S型激活函数,
对于 f2为线性激活函数
2009-7-25
20
2.4 误差反向传播图形解释
误差反向传播过程实际上是通过计算输出层的误差 ek,
然后将其与输出层激活函数的一阶导数 f2’相乘来求得
δ ki
由于隐含层中没有直接给出目标矢量,所以利用输出层的 δ ki反向传递来求出隐含层权值的变化量 Δw2 ki。然后计算
同样通过将 ei与该层激活函数的一阶导数 f1’相乘,而求得 δ ij,以此求出前层权值的变化量 Δw1 ij
如果前面还有隐含层,沿用上述同样方法依此类推,一直将输出误差 ek逐层的反推算到第一层为止
2009-7-25
21
2.4 误差反向传播图形解释
2009-7-25
22
2.5 网络训练
训练 BP网络,需要计算网络加权输入矢量以及网络输出和误差矢量,然后求误差平方和
当所训练矢量的误差平方和小于误差目标,训练停止;否则在输出层计算误差变化,且采用反向传播学习规则来调整权值,然后重复此过程
网络完成训练后,对网络输入一个不是训练集合中的矢量,网络将以泛化方式给出输出结果
2009-7-25
23
2.5 网络训练
为了能够较好地掌握 BP网络的训练过程,我们用两层网络为例来叙述 BP网络的训练步骤
初始化:用小的随机数初始化每一层的权值 W和偏差 B,保证网络不被大的加权输入饱和
– 期望误差最小值 error_goal
– 最大循环次数 max_epoch
– 修正权值的学习速率 1r,一般情况下 k= 0.0l,0.7
2009-7-25
24
2.5 网络训练
变量表达:计算网络各层输出矢量 A1和 A2以及网络误差 E
– A1= tansig(W1*P,B1);
– A2= purelin(W2*A1,B2);
– E= T-A;
权值修正:计算各层反传的误差变化 D2和 D1并计算各层权值的修正值以及新权值:
– D2= deltalin(A2,E);
– D1= deltatan(A1,D2,W2);
– [dlWl,dBl]= learnbp(P,D1,lr);
– [dW2,dB2]= 1earnbp(A1,D2,1r);
– W1= W1十 dW1; B1= B1十 dBl;
– W2= W2十 dW2; B2= B2十 dB2
2009-7-25
25
2.5 网络训练
计算权值修正后误差平方和
– SSE= sumsqr(T-purelin(W2*tansig(W1*P,B1),B2))
检查,SSE是否小于 err_goal。若是,训练结束;
否则继续
以上所有的学习规则与训练的全过程,可以用函数 trainbp.m来完成
– 它的使用只需定义有关参数:显示间隔次数,最大循环次数,目标误差,以及学习速率。调用后返回训练后权值,循环总数和最终误差
– TP= [disp_freq max_epoch err_goal 1r]
– [W,B,epochs,errors]= trainbp(W,B,’ F’,P,
T,TP)
2009-7-25
26
三、网络设计
3.1 网络的层数
3.2 隐含层神经元数
3.3 初始权值的选取
3.4 学习速率
3.5 期望误差的选取
3.6 应用举例
3.7 局限性
2009-7-25
27
3.1 网络的层数
理论上已经证明:具有偏差和至少一个 S型隐含层加上一个线性输出层的网络,能够逼近任何有理函数
– 定理:
增加层数主要可以进一步的降低误差,提高精度,但同时也使网络复杂化,从而增加了网络权值的训练时间。
一般情况下应优先考虑增加隐含层中神经元数
仅用具有非线性激活函数的单层网络来解决问题没有必要或效果不好
– 线性问题
– 非线性问题
2009-7-25
28
3.2 隐含层神经元数
网络训练精度的提高,可以通过采用一个隐含层,而增加其神经元数的方法来获得。这在结构实现上,要比增加更多的隐含层简单得多
定理:
– 实现任意 N个输入向量构成的任何布尔函数的前向网络所需权系数数目为
在具体设计时,比较实际的做法是通过对不同神经元数进行训练对比,然后适当地加上一点余量
2009-7-25
29
3.3 初始权值的选取
一般取初始权值在 (-1,1)之间的随机数
威得罗等人在分析了两层网络是如何对一个函数进行训练后,提出一种选定初始权值的策略
– 选择权值的量级为
在 MATLAB工具箱中可采用函数 nwlog.m或
nwtan.m来初始化隐含层权值 W1和 B1。
其方法仅使用在第一隐含层的初始值的选取上,
后面层的初始值仍然采用随机取数
2009-7-25
30
3.4 学习速率
学习速率决定每一次循环训练中所产生的权值变化量
大的学习速率可能导致系统的不稳定
小的学习速率导致较长的训练时间,可能收敛很慢,不过能保证网络的误差值不跳出误差表面的低谷而最终趋于最小误差值
所以在一般情况下,倾向于选取较小的学习速率以保证系统的稳定性。学习速率的选取范围在 0.01-0.8之间
2009-7-25
31
3.5 期望误差值选取
在设计网络的训练过程中,期望误差值也应当通过对比训练后确定一个合适的值
这个所谓的“合适”,是相对于所需要的隐含层的节点数来确定,因为较小的期望误差值是要靠增加隐含层的节点,以及训练时间来获得
一般情况下,作为对比,可以同时对两个不同期望误差值的网络进行训练,最后通过综合因素的考虑来确定采用其中一个网络
2009-7-25
32
3.6 应用举例
求解函数逼近问题
– 有 21组单输入矢量和相对应的目标矢量,试设计神经网络来实现这对数组的函数关系
P=-1:0.1:1
T=[-0.96 0.577 -0.0729 0.377 0.641 0.66 0.461 0.1336 …
-0.201 -0.434 -0.5 -0.393 -0.1647 0.0988 0.3072 …
0.396 0.3449 0.1816 -0.0312 -0.2183 -0.3201]
测试集
P2=-1:0.025:1
2009-7-25
33
3.6 应用举例目标矢量相对于输入矢量的图形初始网络的输出曲线
2009-7-25
34
3.6 应用举例训练 1000次 2000次
2009-7-25
35
3.6 应用举例训练 3000次 5000次
2009-7-25
36
3.7 限制与不足
需要较长的训练时间
完全不能训练
– 选取较小的初始权值
– 采用较小的学习速率,但同时又增加了训练时间
局部极小值
BP算法可以使网络权值收敛到一个解,但它并不能保证所求为误差超平面的全局最小解,很可能是一个局部极小解
2009-7-25
37
四,BP网络的 改进
4.1 目标
4.2 附加动量法
4.3 误差函数改进
4.4 自适应学习速率
2009-7-25
38
4.1 目标
加快训练速度
避免陷入局部极小值
2009-7-25
39
4.2 附加动量法
利用附加动量的作用则有可能滑过局部极小值
修正网络权值时,不仅考虑误差在梯度上的作用,而且考虑在误差曲面上变化趋势的影响,
其作用如同一个低通滤波器,它允许网络忽略网络上微小变化特性
该方法是在反向传播法的基础上在每一个权值的变化上加上一项正比于前次权值变化量的值,
并根据反向传播法来产生新的权值变化
2009-7-25
40
4.2 附加动量法
带有附加动量因子的权值调节公式其中 k为训练次数,mc为动量因子,一般取 0,95左右
附加动量法的实质是将最后一次权值变化的影响,通过一个动量因子来传递。
当动量因子取值为零时,权值变化仅根据梯度下降法产生
当动量因子取值为 1时,新的权值变化则是设臵为最后一次权值的变化,而依梯度法产生的变化部分则被忽略掉了
促使权值的调节向着误差曲面底部的平均方向变化,当网络权值进入误差曲面底部的平坦区时,δ i将变得很小,于是,
Δw ij(k+1)≈Δw ij (k),从而防止了 Δw ij=0的出现,有助于使网络从误差曲面的局部极小值中跳出
2009-7-25
41
4.2 附加动量法
在 MATLAB工具箱中,带有动量因子的权值修正法是用函数 learnbpm.m来实现的
trainbpm.m可以训练一层直至三层的带有附加动量因子的反向传播网络
下面是对单层网络使用函数 trainbpm.m的情形:
[W,B,epochs,errors]=
trainbpm(W,B,’ F’,P,T,TP)
2009-7-25
42
4.3 误差函数改进
当 ak趋向 1时,E趋向一个常数,即处于 E的平坦区,f’(n)→0,可能造成完全训练的麻痹现象
当一个网络的误差曲面存在着平坦区时,可以选用别的误差函数 f(tk,ak)来代替 (tk-ak)2的形式,只要其函数在 ak=tk时能达到最小值
2009-7-25
43
4.3 误差函数改进
包穆 (Baum)等人于 1988年提出一种误差函数为
不会产生不能完全训练的麻痹现象
2009-7-25
44
4.3 误差函数改进
与常规的误差函数的情况 δ ij=f’(n)(tk-ak)相比较,其中的 f’(n)项消失了
当 n增大,进入激活函数的平坦区,使 f’(n)→0 时,
不会产生不能完全训练的麻痹现象
但由于失去了 f’(n)对 Δw 的控制作用,过大的 Δw 又有可能导致网络过调或振荡
1989年,范尔曼 (S.Fahlman)提出一种折中的方案,即取 δ k= [f’(n)+0.1](tk-ak)
一方面恢复了 f’(n)的某些影响
另一方面当 |n|变大时,仍能保持 δ k有一定的大小,
从而避免了麻痹现象的发生
2009-7-25
45
4.4 自适应学习速率
通常调节学习速率的准则是,检查权值的修正值是否真正降低了误差函数,如果确实如此,则说明所选取的学习速率值小了,可以对其增加一个量;否则可认为产生过调,应该减小学习速率的值
一种自适应学习速率的调整公式
2009-7-25
46
4.4 自适应学习速率
MATLAB工具箱中带有自适应学习速率进行反向传播训练的函数为 trainbpa.m
可训练直至三层网络。
使用方法
[W,B,epochs,TE]=
trainbpa(W,B,’ F’,P,T,TP)
可以将动量法和自适应学习速率结合起来以利用两方面的优点。这个技术已编入了函数 trainbpx.m之中
函数的调用和其他函数一样,只是需要更多的初始参数而已
TP= [disp_freq max_epoch error_goal lr 1r_inc 1r_dec mom_const
err_ratio];
[W,B,epochs,[error; lr]]= trainbpx(W,B,F,P,T,TP)
2009-7-25
47
五,内容小结内容安排一,内容回顾二,BP网络三、网络设计四、改进 BP网络
2009-7-25
48
五,内容小结
反向传播法可以用来训练具有可微激活函数的多层前向网络,以进行函数逼近,模式分类等工作
反向传播网络的结构不完全受所要解决的问题所限制。
– 网络的输入神经元数目及输出层神经元的数目是由问题的要求所决定
– 输入和输出层之间的隐含层数以及每层的神经元数是由设计者来决定的
已经证明,两层 S型线性网络,如果 S型层有足够的神经元,则能够训练出任意输入和输出之间的有理函数关系
2009-7-25
49
五,内容小结
反向传播法沿着误差表面的梯度下降,使网络误差最小,网络有可能陷入局部极小值
附加动量法使反向传播减少了网络在误差表面陷入低谷的可能性并有助于减少训练时间
太大的学习速率导致学习的不稳定,太小值又导致极长的训练时间。自适应学习速率通过在保证稳定训练的前提下,达到了合理的高速率,可以减少训练时间
80% -90%的实际应用都是采用反向传播网络的。改进技术可以用来使反向传播法更加容易实现并需要更少的训练时间
2009-7-25
50
五,内容小结
下次讲课内容
– 反馈网络
Hopfield网络
2009-7-25
51
The End
Questions & Suggestions
Thanks!