• 沒有找到結果。

神经网络。

N/A
N/A
Protected

Academic year: 2021

Share "神经网络。"

Copied!
99
0
0

加載中.... (立即查看全文)

全文

(1)

人工神经网络与神经网络优化算法

人工神经网络是近年来得到迅速发展的一 个前沿课题。神经网络由于其大规模并行 处理、容错性、自组织和自适应能力和联 想功能强等特点,已成为解决很多问题的 有力工具。首先对神经网络作简单介绍,

然后介绍几种常用的神经网络,包括前向

神经网络。

(2)

人工神经网络与神经网络优化算法

人工神经网络发展简史

最早的研究可以追溯到 20 世纪 40 年代。 1943 年,

心理学家 McCulloch 和数学家 Pitts 合作提出了形式 神经元的数学模型。这一模型一般被简称 M-P 神经网 络模型,至今仍在应用,可以说,人工神经网络的研 究时代,就由此开始了。

1949 年,心理学家 Hebb 提出神经系统的学习规则,

为神经网络的学习算法奠定了基础。现在,这个规则 被称为 Hebb 规则,许多人工神经网络的学习还遵循 这一规则。

(3)

人工神经网络与神经网络优化算法

1957 年 , F.Rosenblatt 提 出 “ 感 知 器” (Perceptron) 模型,第一次把神经网络的研 究从纯理论的探讨付诸工程实践,掀起了人工神 经网络研究的第一次高潮。

20 世纪 60 年代以后,数字计算机的发展达到全 盛时期,人们误以为数字计算机可以解决人工智 能、专家系统、模式识别问题,而放松了对“感知 器”的研究。于是,从 20 世纪 60 年代末期起,

人工神经网络的研究进入了低潮。

(4)

人工神经网络与神经网络优化算法

1982 年,美国加州工学院物理学家 Hopfield 提 出了离散的神经网络模型,标志着神经网络的研 究又进入了一个新高潮。 1984 年, Hopfield 又提出连续神经网络模型,开拓了计算机应用神 经网络的新途径。

1986 年, Rumelhart 和 Meclelland 提出多层 网络的误差反传 (back propagation) 学习算法

,简称 BP 算法。 BP 算法是目前最为重要、应

用最广的人工神经网络算法之一。

(5)

人工神经网络与神经网络优化算法

自 20 世纪 80 年代中期以来,世界上许多

国家掀起了神经网络的研究热潮,可以说

神经网络已成为国际上的一个研究热点。

(6)

生物神经网

1 、构成

胞体 (Soma) 枝 蔓 ( Dendrit

e

胞体 (Soma)

轴突( Axon

突触( Synapse )

2 、工作过程

(7)

生物神经网

3 、六个基本特征:

1 )神经元及其联接;

2 )神经元之间的联接强度决定信号传递的强弱;

3 )神经元之间的联接强度是可以随训练改变的;

4 )信号可以是起刺激作用的,也可以是起抑制作 用的;

5 )一个神经元接受的信号的累积效果决定该神经 元的状态;

6) 每个神经元可以有一个“阈值”。

(8)

人工神经元

神经元是构成神经网络的最基本单元(构 件)。

人工神经元模型应该具有生物神经元的六

个基本特性。

(9)

人工神经元的基本构成

人工神经元模拟生物神经元的一阶特性。

输入: X= ( x1, x2 ,…, xn

联接权: W= ( w1, w2,…, wnT

网络输入: net=∑xi

w

i

向量形式: net=XW

xn wn

x1 w1

x2 w2

net=XW

(10)

激活函数 (Activation Function)

激活函数——执行对该神经元所获得的网络输 入的变换,也可以称为激励函数、活化函数:

o=f ( net )

1 、线性函数( Liner Function )

f ( net ) =k*net+c

net o

o c

(11)

2 、非线性斜面函数 (Ramp Function)

γ if net≥θ

f ( net ) = k*net if |net|<θ

if net≤-θ

γ>0 为一常数,被称为饱和值,为该神经

元的最大输出。

(12)

2 、非线性斜面函数( Ramp Function

γ

θ

net

o

(13)

3 、阈值函数( Threshold Function )阶跃函数

β if net>θ

f ( net ) =

if net≤ θ

β 、 γ 、 θ 均为非负实数, θ 为阈值 二值形式:

1 if net>θ

f ( net ) =

0 if net≤ θ

双极形式:

1 if net>θ

f ( net ) =

-1 if net≤ θ

(14)

3 、阈值函数( Threshold Function )阶跃函数

β

θ o

0 net

(15)

4 、 S 形函数

压缩函数( Squashing Function )和逻辑斯特 函数( Logistic Function )。

f ( net ) =a+b/(1+exp(-d*net))

a , b , d 为常数。它的饱和值为 a 和 a+b 。 最简单形式为:

f ( net ) = 1/(1+exp(-d*net))

函数的饱和值为 0 和 1 。

(16)

4 、 S 形函数

a+b o

(0,c )

net

a c=a+b/2

(17)

2.2.3 M-P 模型

x2 w2

f o=f ( net )

xn wn

net=XW x1 w1

McCulloch—Pitts ( M—P )模型

,也称为处理单元( PE )

(18)

2.3 人工神经网络的拓扑特性

连接的拓扑表示

AN

i

w

ij

AN

j

(19)

10.1 人工神经网络与神经网络优化算法

10.1.2 人工神经元模型与人工神经网络模 型

人工神经元是一个多输入、单输出的非线 性元件,如图 10-1 所示。

其输入、输出关系可描述为

(20)

10.1 人工神经网络与神经网络优化算法

(10-1-1)

式中, 是从其它神经元传来的 输入信号; 是阈值; 表示从神经元到 神经元 的连接权值; 为传递函数。

 

 

 

1

(

j

)

j

n

i ij i j

j

X f

y

x

X  

) , ,

2 , 1

(

i n

xi

 

j

ij

i

j

f

(

)

(21)

10.1 人工神经网络与神经网络优化算法

yj θj

x0=1

∑ f

ωnj

x

1

x

2

. . . x

n

ω2j

ω1j

图 10-1

(22)

10.1 人工神经网络与神经网络优化算法

人工神经网络是由大量的神经元互连而成的网络

,按其拓扑结构来分,可以分成两大类:层次网 络模型和互连网络模型。层次网络模型是神经元 分成若干层顺序连接,在输入层上加上输入信息

,通过中间各层,加权后传递到输出层后输出,

其中有的在同一层中的各神经元相互之间有连接

,有的从输出层到输入层有反馈;互连网络模型 中,任意两个神经元之间都有相互连接的关系,

在连接中,有的神经元之间是双向的,有的是单

向的,按实际情况决定。

(23)

10.1 人工神经网络与神经网络优化算法

10.1.3 前向神经网络 (1) 多层前向网络

一个 M 层的多层前向网络可描述为:

① 网络包含一个输入层(定义为第 0 层)和 M-1 个隐层,最后一个隐层称为输出层;

② 第层包含 个神经元和一个阈值单元

(定义为每层的第 0 单元),输出层不含阈 值单元;

N

l

(24)

10.1 人工神经网络与神经网络优化算法

③ 第 层第 个单元到第个单元的权值表为 ;

④ 第 层( >0 )第 个( >0 )神经元 的输入定义为 ,输出 定义为 ,其中 为隐单元激 励函数,常采用 Sigmoid 函数,即 。输入单元一般采用线性激励函数 ,阈值单元的输出始终为 1 ;

 1

l i

l l

ij ,

1

l l j j

1 0

1 ,

l 1 N

i

l i l l

ij l

j y

x

) ( lj

l

j

f x

y

f

(

)

)] 1

exp(

1 [ )

(x x f

x x

f ( ) 

(25)

10.1 人工神经网络与神经网络优化算法

⑤ 目标函数通常采用:

( 10-1-2 )

其中 P 为样本数, 为第 p 个样本的第 j 个输出分量。

 

P

p

N j

p j M

p j P

p

p

M

y t

E E

1 1

2 ,

1 , 1

1

( )

2 1

p

t

j,

(26)

感知器网络

1 、感知器模型 2 、学习训练算法

3 、学习算法的收敛性

4 、例题

(27)

感知器神经元模型

感知器模型如图 Fig2.2.1 I/O 关系

图 2.2.1

0 0 1

0 1

{

 

y y n

i

i i

i

y

b p

w

y

(28)

单层感知器模型如图 2.2.2 定义加权系数

w

ij

为第 i 个神经元到第 j 个神经元之间的连 接值

 

2 1 2

1

i

i n

in i

i

i

b

p p p w

w w

y

个个个

(29)

感知器神经网络模型

图2.2.2

(30)

图形解释

对 n=2 的情况

分平面为两部分

B WP

Y

b b b p

p p w

w w

w w

ww w w y

y y

n mn n

m m

n n

n

向量形式:

矩阵形式:

2

1 2

1

2 1

2 22

21

1 12

11 2

1

为一条直线

b p

w p

w

y 1 1 2 2

(31)

图形解释

由直线 W*P+b=0 将由输入矢量 P

1

和 P

2

成的平面分为两个区域,直线上部的输入

矢量使阀值函数的输入大于 0 ,所以使感

知器神经元的输出为 1 ;直线下部的输入

矢量使感知器神经元的输出为 0 。分割线

可以根据所选的权值和偏差上下左右移动

到期望划分输入平面的地方。

(32)

学习训练算法

 

 

learnp

) ( )

( )

(

) ( )

( )

1 (

) ( )

( )

1 (

B

W

p p

p P

1 or 0 t

t t

t T

0

n 2

1

i m

2 1

函数为 相应的

学习规则类 该算法属于

偏差 初始加权阵

输入向量 设有教师向量

Matlab

K Y K

T K

E

K E K

B K

B

X K E k

W k

W T

T T

(33)

Matlab 调用

该函数的调用命令为:

[dW,LS] = learnp(W, P, Z, N, A, T, E, gW, gA, D, LP, LS)

[db,LS] = learnp(b, ones(1,Q), Z, N, A, T, E, gW, gA, D, LP, LS)

各参数的具体意义可参考神经网络工具箱的

用户指南 。

(34)

训练步骤

1 )对于所要解决的问题,确定输入向量 X, 目标 向量 T, 由此确定维数及网络结构参数, n,m;

2) 参数初始化;

3 )设定最大循环次数;

4 )计算网络输出;

5 )检查输出矢量 Y 与目标矢量 T 是否相同,如果 相同时,或以达最大循环次数,训练结束,否则 转入 6 );

6 )学习

并返回 4 )。

) ( )

( )

1 (

) ( )

( )

1 (

K E K

B K

B

X K E k

W k

W T

(35)

上述的整个训练过程我们可以用 MATLAB 工具箱中的函数 train.m 来完成。其调用 方式如下:

[net,tr]=train(net,P,T,Pi,Ai)

(36)

例题

例 2.1 采用单一感知器神经元解决一个简单的 分类问题:将四个输入输入矢量分为两类,其中 两个矢量对应的目标值为 1 ,另两个矢量对应的 目标值为 0 ,即

输入矢量: P=[-0.5 –0.5 0.3 0.0;

-0.5 0.5 -0.5

1.0] 目标分类矢量: T=[1.0 1.0 0.0 0.0]

(37)

首先定义输入矢量及相应的目标矢量:

P=[-0.5 –0.5 0.3 0.0;

-0.5 0.5 -0.5 1.0] ; T=[1.0 1.0 0.0 0.0] ;

输入矢量可以用图 /// 来描述,

对应于目标值 0 的输入矢量用符 号‘ 0’ 表示,对应于目标值 1 的输 入矢量符号‘ +’ 表示。

输入

矢量图

(38)

训练结束后得到如图所示的分类结果,分类 线将两类输入矢量分开,其相应的训练误差的 变化如图所示。这说明经过 4 步训练后,就达 到了误差指标的要求。

(39)

下面给出本例的 MATLAB 程序

% Example pre.m

%

clf reset figure(gcf)

setfsize(300,300);

echo on

%NEWP —— 建立一个感知器神经元

%INIT —— 对感知器神经元初始化

%TRAIN —— 训练感知器神经元

%SIM —— 对感知器神经元仿真 pause % 敲任意键继续

clc

% P 为输入矢量

P = [-0.5 -0.5 +0.3 +0.0;

-0.5 +0.5 -0.5 1.0];

% T 为目标矢量 T = [1 1 0 0];

pause

% 绘制输入矢量图 plotpv(P,T);

pause

% 定义感知器神经元并对其初始化 net=newp([-0.5 0.5;-0.5 1],1);

net.initFcn='initlay';

net.layers{1}.initFcn='initwb';

(40)

net.inputWeights{1,1}.init Fcn='rands';

net.layerWeights{1,1}.init Fcn='rands';

net.biases{1}.initFcn='ran ds';

net=init(net);

echo off

k = pickic;

if k == 2

net.iw{1,1} = [-0.8161 0.3078];

net.b{1} = [-0.1680];

end

echo on

plotpc(net.iw{1,1},net.b{1 })

pause

% 训练感知器神经元

net=train(net,P,T);

pause

% 绘制结果分类曲线 plotpv(P,T)

plotpc(net.iw{1,1},net.b{

1});

pause

% 利用训练完的感知器神经元分类 p = [-0.5; 0];

a = sim(net,p) echo off

(41)

BP 网络

将感知器网络结构扩展到多层,其作用函 数采用一种可微分的函数,这就形成了功 能比较强大的多层前向网络。

由于多层前向网络采用反向传播学习算法

( Back Propagation ),通常人们将其称为

BP 网络。

(42)

BP

主要用途

网络主要用于:

( 1 )函数逼近:用输入矢量和相应的输出矢量训练网络逼 近某个函数;

( 2 )模式识别:用一个特定的输出矢量将它与输入矢量联 系起来;

( 3 )分类:把输入矢量以所定义的合适的方法进行分类;

( 4 )数据压缩:减少输出矢量维数以便于传输或存储。

在人工神经网络的实际工程应用中,特别在自动控制领域中

,大多数神经网络模型是采用 BP 网络或它的变化形式,

它也是前向网络的核心部分,体现了人工神经网络最精华 的部分

(43)

BP 网络主要内容

1 、 BP网络模型 2 、学习训练算法

3 、对应的MATLA B训练函数 4 、例题

5 、 BP 网络设计问题 6 、限制与不足

7 、 BP 算法改进

(44)

BP 网络模型

BP 网络模型如图 2.4.1 所示 :

图 2.4.1

(45)

I/O 关系

I->H

a 1 = tansig (IW

1,1

p

1

+b

1

)

tansig(x)=tanh(x)=(e

x

-e

-x

)/(e

x

+e

-x

)

H->O

a 2 = purelin (LW

2,1

a

1

+b

2

)

输入层神经元个数 n

隐含层神经元个数 n1

输出层神经元个数 s2

(46)

学习(训练)

输入 q 组样本 p

1

,p

2

,...,p

q

p

i

∈R

n

期望输出 T

1

,T

2

,...,T

q

, T ∈R

s2

网络输出 a2

1

,a2

2

,...,a

2q

a

2

∈R

s2

解决方法 误差最小

实质为一个优化问题

思路 1: 梯度法 (gradient)

找出误差与加权系数的关系

得到加权系数改变的规律

(47)

学习训练算法

(2.4.2)

1 1

2 )

2 (

2 2 2

2 2

1

(2.4.1)

)

2 2 (

B) 1 E(W,

2

1

2

i ki

i k

k

ki k k

ki ki

S

K k k

a a

f a

t

w a a

E w

w E

k i

a t



 

 

 

输出的权值改变有:

个 个输入到第

从第

)输出层的权值变化

变化及误差的反向传播 利用梯度下降法求权值

定义误差函数为:

(48)

   

(2.4.5)

2

, 1

(2.4.4)

1 2

2 )

2 (

1 1 1

2 2

1 1

)

2 (

2.4.3

2 2

2 2 2

2 2

2

1 2

1

ij i

s

k ki ki

i i

ij

j ij

j ki

s

k k k

ij i i

k k

ij ij

ki k

k

k k k

ki ki

bl

w e

f e

p

p f

w f

a t

w a a

a a

E w

w E

f a

t

b a a

E b

b E



同理可得:

其中:

隐含层权值变化 同理可得:

(49)

BP 算法解释

输出层误差 e

j

(j=1-s2)

隐含层误差 e

i

(i=1-n1)

e

i

与 e

j

的关系?

e

i

可以认为是由 e

j

加权组合形成的。由于 作用函数的存在, e

j

的等效作用为 δ

j

δ

i

=e

j

f '()

2

1 s

2

i ki ki

k

ew

 

(50)

导数

logsig

matlab 函数: dA_dN = dlogsig(N,A)

tansig

matlab 函数: dA_dN = dtansig(N,A) ( ) 1

1

'( ) ( )(1 ( )) f x

x

e

f x f x f x

 

2

( )

'( ) 1 (1 ( )) 2

x x

x x

e e

f x e e

f x f x

 

 

(51)

BP 算法的理论分析

学习算法:

此处:

W* 为最优加权值。

由梯度法

( 1) ( ) ( )

W k   W k    W k ( ) ( * ( )) W k f W W k

  

( 1) ( )

( ) W k W k J

W k

  

(52)

改写成差分方程,可得

因此,传统梯度法等效为一个积分控制器

( 1) (1

1

) ( )

W k     z

  W k

(53)
(54)

MATLAB 函数

旧版下的训练函数为: trainbp.m

Tp=[disp_freq max_epoch err_goal lr];

[w,b,epochs,errors]=trainbp(w,b,’F’,P,T,Tp);

‘F’ 为网络的激活函数

名:‘ tansig’,’logsig’,’purelin’

而在新版下完全不同:

首先建立一个网络 net=newff([-2 2],[5 1], {‘tansig’ ‘purelin’},’traingd’);

计算输出: y1=sim(net,P);

(55)

绘图: plot(P,T,’*’);

训练: [net,tr]=train(net,P,T);

训练函数有很多种,如:

traingd,traingdm,traingdx,trainlm

在训练之前要对网络进行初始化,并设置好训练参数。

初始化: net.iw{1,1}=W10;

net.b{1}=B10;

net.lw{2,1}=W20;

net.b{2}=B20;

(56)

参数设置:

net.trainParam.epochs=100; % 最大训练次数

net.trainParam.goal=0.01; % 训练所要达到的精度

net.trainParam.show=10; % 在训练过程中显示的 频率

net.trainParam.lr=0.1; % 学习速率

(57)

例题—函数逼近

例 2.3 应用两层 BP 网络来完成函数逼近的任务,其中隐含的 神经元个数选为 5 个。网络结构如图 2.4.1 所示。

图: 2.4.1

(58)

解 首先定义输入样本和目标矢量 P=-1:.1:1;

T=[-.9602 -.5770. –.0729 .3771 .6405 .6600 .4609 …. 1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 …

.3072 .3960 .3449 .1816 -.0312 -.2189 -.3201];

上述数据的图形如图 2.4.2 所示。

图: 2.4.2

(59)

利用函数 newff 建立一个 bp 神经元网络

net=newff(minmax(P),[5 1],{‘tansig’

‘purelin’}, ‘traingd’, ‘learngd’, ‘sse’);

然后利用函数 train 对网络进行训练 net.trainParam.show=10;

net.trainParam.epochs=8000;

net.trainParam.goal=0.02;

net.trainParam.lr=0.01;

[net,tr]=train(net,P,T);

(60)

图2.4.3至图2.4.6给出了网络输出值随训练次数的增

加而变化的过程。图 2.4.7 给出了 454 次训练后的最终 网络结果,以及网络的误差纪录。

同时还可以用函数 sim 来计算网络的输出 a1=sim(net,P)

下面给出本例的 MATLAB 程序

(61)

图 2.4.3 训练 100 次的结果 图 2.4.4 训练 200 次的结果

图 2.4.5 训练 300 次的结果 图 2.4.6 训练 400 次的结果

(62)

图 2.4.7 训练结束后的网络输出与误

差结果

(63)

% Example 3.13

%

clf;

figure(gcf)

setfsize(500,200);

echo on

%NEWFF — 建立一个 BP 网络

%TRAIN — 对 BP 网络进行训练

%SIM — 对 BP 网络进行仿真 pause

P = -1:.1:1;

T = [-.9602 -.5770 -.0729 . 3771 .6405 .6600 .4609 ...

.1336 -.2013 -.4344

-.5000 -.3930 -.1647 .0988 ...

.3072 .3960 .3449 . 1816 -.0312 -.2189 -.3201];

plot(P,T,'+');

title('Training Vectors');

xlabel('Input Vector P');

ylabel('Target Vector T');

pause

net=newff(minmax(P),[5 1],{'tansig'

'purelin'},'traingd','l earngd','sse');

echo off

k = pickic;

if k == 2

net.iw{1,1} = [3.5000; 3.5000;

3.5000; 3.5000;

3.5000];

(64)

net.b{1} = [-2.8562;

1.0774; -0.5880; 1.4083;

2.8722];

net.lw{2,1} = [0.2622 -0.2375 -0.4525 0.2361 -0.1718];

net.b{2} = [0.1326];

end

net.iw{1,1}

net.b{1}

net.lw{2,1}

net.b{2}

pause echo on me=8000;

net.trainParam.show=10;

net.trainParam.goal=0.02;

net.trainParam.lr=0.01;

A=sim(net,P);

sse=sumsqr(T-A);

for i=1:me/100 if

sse<net.trainparam.goal, i=i-1;break,end

net.trainParam.epochs=10 0;

[net,tr]=train(net,P,T);

trp((1+100*(i-1)):

(max(tr.epoch)+100*(i- 1)))=tr.perf(1:max(tr.ep och));

A=sim(net,P);

sse=sumsqr(T-A);

(65)

plot(P,T,'+');

hold on plot(P,A) hold off pause

end

message=sprintf('Traingd, Epoch %%g/%g, SSE %

%g\n',me);

fprintf(message,(max(tr.epoch)+100*(i-1)),sse) plot(trp)

[i,j]=size(trp);

hold on

plot(1:j,net.trainParam.goal,'r--') hold off

title('Error Signal') xlabel('epoch')

ylabel('Error') p = 0.5;

a = sim(net,p)

(66)

BP 网络训练的几种模式

1)

批处理模式 (batch mode)

训练过程以所有样本为一个 epoch 。训练时计 算出所有样本的整体误差后,加权系数才调整。

matlab 函数

trainb ,非直接调用,用 net.trainFcn 说明

2)

模式学习模式 (pattern mode)

训练过程输入一个样本,计算学习误差,调整 加权系数。

matlab 函数

trainc , trains, trainr 非直接调用,用

net.trainFcn 说明

(67)

BP 网络设计问题

在进行 BP 网络的设计时,一般应从网络的层数,

每层中的神经元个数和激活函数、初始值以及学习速 率等几个方面来进行考虑。下面讨论各自的选取原则。

1. 网络的层数;

2. 隐含层的神经元数;

3. 初始权值的选取;

4. 学习速率;

5. 期望误差的选取。

(68)

网络的层数

理论上已经证明:具有偏差和至少一个 S 型隐含 层加上一个线性输入层的网络,能够逼近任何有理 函数。

增加层数可以进一步的降低误差,提高精度,

但同时也使网络复杂化。

另外不能用仅具有非线性激活函数的单层网络 来解决问题。因为能用单层网络完美解决的问题,

用自适应线性网络也一定能解决,而且自适应线性

网络的运算速度还要快。而对于只能用非线性函数

解决的问题,单层精度又不够高,也只有增加层才

能达到期望的结果。

(69)

隐含层神经元数

网络训练精度的提高,可以通过采用一个隐 含层,而增加其神经元数的方法来获得,这在结 构实现上,要比增加更多的隐含层要简单的多。

为了对隐含层神经元数在网络设计时所起的

的作用有一个比较深入的理解,下面先给出一个

有代表性的实例,然后从中得出几点结论。

(70)

例:用两层 BP 网络实现“异或”功能。

网络要实现如下的输入 / 输出功能:

对于一个二元输入网络来说,神经元数 即为分割

线数。所以隐含层神经元数应≥ 2 。

0 1 1 0

1 ,

0 1 0

1 0 0

0

T

P

(71)

图 2.4.8 ( a )中,输出节点与隐含层节点相同,

显然该输出层是多余的,该网络也不能解决问题,

因此需要增加隐含层的节点数。

在此例中,隐含层中神经元数为多少时最佳?

我们针对 sl=2 , 3 , 4 , 5 , 6 以及为 20 、 25 和 30 时 对

网络进行设计。选择误差目标为 err_goal=0.02, 并通 过对网络训练时所需的循环次数和训练时间的情况

来观察网络求解效果。整个网络的训练结果如表 2.4.1 所示。

(72)

表 2.4.1

sl=2 , 3 , 4 , 5 , 6 , 20 , 25 和 30 时的网络训练结果 Sl 时间(秒) 循环次数

2 5.71 118

3 4.40 90

4 4.39 88

5 4.45 85

6 4.62 85

20 3.57 68

25 4.06 72

(73)

我们评价一个网络设计的好坏,首先是它的精度,

再一个就是训练时间。

从表 2.4.1 总可以看出下面几种情况:

1 )神经元数太少,网络不能很好的学习,需要训 练的次数也多,训练精度也不高;

2 )一般而言,网络隐含层神经元的个数 sl 越多,

功能越大,但当神经元数太多,会产生其它的问题。

3 )当 sl=3,4,5 时,其输出精度都相仿,而 sl=3 是 的

训练次数最多。

一般的讲,网络 sl 的选择原则是:在能够解决问 题的前提下,再加上一个到两个神经元以加快误差的下 降速度即可。

(74)

初始权值的选取

一般取初始权值在( -1 , 1 )之间的随机数。

另外,威得罗等人在分析了两层网络是如何对一 个函数进行训练后,提出一种选定初始权值的策略:

选择权值的量级为 ,其中 s1 为第一层神经元数, r 为输入个数。在旧版 MATLAB (版本低于 5.2 )工具箱 中可采用函数 nwlog.m 或 nwtan.m 来初始化隐含层权

值。

而在新版 MATLAB 工具箱中,统一用函数 init.m 对网络进行初始化。

s1 r

(75)

学习速率

学习速率决定每一次循环训练中所产生的权 值变化量。大的学习速率可能导致系统的不稳定;

但小的学习速率导致较长的训练时间,可能收敛 很慢,不过能保证网络的误差值不跳出误差表面 的低谷而最终趋于误差最小值。所以一般情况下

倾向于选取较小的学习速率以保证系统的稳定性。

学习速率的选取范围在 0.01~0.8 之间。

(76)

对于较复杂的网络,在误差曲面的不同部位

可能需要不同的学习速率。为了减少寻找学习速

率的训练次数以及训练时间,比较合适的方法是

采用变化的自适应学习速率,使网络的训练在不

同的阶段设置不同大小的学习速率。

(77)

期望误差的选取

在设计网络的训练过程中,期望误差值也应

当通过对比训练后确定一个合适的值,这个所谓

的“合适” , 是相对于所需要的隐含层的节点数来确

定的。一般情况下,作为对比,可以同时对两个

不同期望误差值的网络进行训练,最后通过综合

因素的考虑来确定采用其中一个网络。

(78)

限制与不足

( 1 )需要较长的训练时间

这主要是由于学习速率太小所造成的。可采用变 化的学习速率或自适应的学习速率来加以改进。

( 2 )完全不能训练

这主要表现在网络的麻痹上。通常为了避免这种 情况的产生,一是选取较小的初始权值,二是采用较 小的学习速率。

( 3 )局部最小值

采用多层网络或较多的神经元,有可能得到更好 的结果。

(79)

BP 算法的改进

BP 算法改进的主要目标是为了加快训练速度,

避免陷入局部极小值和改善其它能力。本节只讨论 前两种性能的改进方法的有关内容。

( 1 )带动量因子算法;

( 2 )自适应学习速率;

( 3 )改变学习速率的方法;

( 4 )作用函数后缩法;

( 5 )改变性能指标函数。

(80)

带动量因子算法

该方法实在反向传播法的基础上在每一个权值 的变化上加上一项正比于前次权之变化的值,并根 据反向传播法来产生新的权值变化。带有附加动量 因子的权值调节公式为:

( 2.4.6 ) 其中 k 为训练次数, mc 为动量因子,一般取 0.95

左右。

) ( )

1 ( )

1 (

) ( )

1 ( )

1 (

k b mc mc

k b

k w mc

p mc

k w

i i

i

ij j

i ij





(81)

附加动量法的实质是将最后一次权值变化的 影响,通过一个动量因子来传递。以此方式,当 增加动量项后,促使权值的调节向着误差曲面底 部的平均方向变化,当网络权值进入误差曲面底 部的平坦区时, 将变得很小,于是,

从而防止了 的出现 ,有助于使网络从 误差曲面的局部极小值中跳出。

i

) ( )

1

( k w k

w

ij

  

ij

0 )

( 

wij k

(82)

在 MATLAB 工具箱中,带有动量因子的权值修 正法是用函数 learnbpm.m 来实现的。对网络进行训 练可用函数 traingdm.m 。我们可以用函数 newff.m

立一个用附加动量法训练的 BP 网络:

net=newff(minmax(P),[5 1],{'tansig'

'purelin'},'traingdm','learngm','sse');

(83)

自适应学习速率

对于一个特定的问题,要选择适当的学习速率并 不是一件容易的事情。对训练开始初期功效很好地学 习速率,不见得对后来的训练合适。为了解决值一问

题,人们自然会想到在训练过程中自动调整学习速率。

下面给出一个自适应学习速率的调整公式:

( 2.4.7 ) 初始学习速率 (0) 的选取范围可以有很大的随意性。



  

其它

)

(

) ( 04

. 1 ) 1 (

)

( 7 .

0.05 ( ) ( 1) ( ) 1

) 1 (

K

k SSE k

SSE

Kk SSE k SSE k k

  

(84)

MATLAB 工具箱总带有自适应学习速率进行反向 传播训练的函数为: traingda.m 。使用方法为:

[net,tr]=traingda(net,Pd,Tl,Ai,Q,TS,VV) 或者,

先设置 net.trainFcn=‘traingda’

然后进行训练 net=train(net,P,T);

例 2.4 沿用例 2.3 中的输入矢量和目标矢量。

同其他训练函数的调用方法一样,这个训练过程

函数的应用非常简单。下面给出本例的 MATLAB 程序。

(85)

% Example

%

clf;

figure(gcf)

setfsize(500,200);

echo on

%NEWFF — 建立一个 BP 网络

%TRAIN — 对网络进行训练

%SIM — 对网络进行仿真 pause

P = -1:.1:1;

T = [-.9602 -.5770 -.0729 . 3771 .6405 .6600 .4609 ...

.1336 -.2013 -.4344 -.5000 -.3930 -.1647 .

0988 ...

.3072 .3960 .3449 .

plot(P,T,'+');

title('Training Vectors');

xlabel('Input Vector P');

ylabel('Target Vector T');

pause

net=newff(minmax(P) ,[5 1],{'tansig' 'purelin'},'traingd a','learngd','sse')

;

echo off

k = pickic;

(86)

if k == 2

net.iw{1,1} = [3.5000;

3.5000; 3.5000; 3.5000;

3.5000];

net.b{1} = [-2.8562;

1.0774; -0.5880; 1.4083;

2.8722];

net.lw{2,1} = [0.2622 -0.2375 -0.4525 0.2361 -0.1718];

net.b{2} = [0.1326];

end

net.iw{1,1}

net.b{1}

net.lw{2,1}

net.b{2}

pause echo on

net.trainparam.lr_inc=1.0 5;

net.trainParam.epochs=800 0;

net.trainParam.show=10;

net.trainParam.goal=0.02;

net.trainParam.lr=0.01;

[net,tr]=train(net,P,T);

pause

A=sim(net,P);

plot(P,T,'+');

hold on plot(P,A) hold off p = 0.5;

a = sim(net,p)

(87)

仅训练了 121 次就达到了误差目标 0.02 的目的。

图 2.4.9 给出了学习速率在训练过程中的纪录。误 差平方和的记录在图 2.4.10 中。

图 2.4.9 图 2.4.10

训练中的学习速率 训练中的误差纪录

(88)

从中可以看出:在训练的初始阶段,学习速率 是以直线形式上升。当接近误差最小值时,学习速 率又自动的下降。注意误差曲面有少于的波动。

可以将动量法和自适应学习速率结合起来以利 用两方面的优点。 MATLAB 工具箱中 traingdx.m 函 数可以实现此功能。其调用方式和函数 traingda.m 的 调用方式一样。

(89)

改变学习速率方法

学习速率的局部调整法基于如下的几个直观的推 断:

1 )目标函数中的每一个网络可调参数有独立的学 习速率;

2 )每一步迭代中,每个学习速率参数都能改变;

3 )在连续几次迭代中,若目标函数对某个权导 数的符号相同,则这个权的学习速率要增加;

4 )在连续几次迭代中,若目标函数对某个权导 数的符号相反,则这个权的学习速率要减小。

(90)

- 规则

式( 2.4.8 )的学习规则虽然和上述 推断一致,但在应用时还存在一些潜在的 问题。

习速率调整步长。

是一个正实数,称为学 式中,

的学习速率 为

 

(2.4.8)

)

1 (

) 1 (

) (

) (

) (

) ) (

1 (

) ( )

(

 

 

k w

k E k

w k E

k k k E

k w k

ij ij

ij ij

ij ij

(91)

例如 , 若在连续两次迭代中,目标函数对某个权 的导数具有相同的符号,但他们的权值很小,则对 应于那个权值的学习速率的正调整也很小。另一方 面,若在两次连续的迭代中,目标函数对某个权的 导数具有相反的符号和很大的值,则对应于那个权 学习速率的负调整也很大。在这两种情况下,就难 于选择合适的步长参数。

上述问题可以用 -bar- 方法来克服。

(92)

-bar- 方法

为:

由使用者确定。典型值

是一个正实数。参数 式中,

其它 则来确定:

可按如下调整规 的学习速率。学习速率

为这次迭代对应于该权

神经元的连接权。令 神经元到

次迭代 为第

7 . 0 1

. 0 , 5 1

. 0 , 1 . 0 10

b a,

(2.4.11)

)

1 (

) 1 (

) 1

( ) (

(2.4.10)

) (

) ) (

(

0

(2.4.9)

0

) ( )

1 (

S

) (

0 )

( )

1 (

S

)

1 (

) ( )

(

4

ij ij



b a

k S k

D k

S

k w

k k E

D

k D k

k ba

k D k

a k

a

k a j

i k

k w

ij ij

ij

ij ij

ij ij

ij ij

ij ij

數據

表 2.4.1      sl=2 , 3 , 4 , 5 , 6 , 20 , 25 和 30 时的网络训练结果Sl 时间(秒) 循环次数 2 5.71 118 3 4.40 90 4 4.39 88 5 4.45 85 6 4.62 85 20 3.57 68 25 4.06 72

參考文獻

相關文件

2014 年底,首经贸颁布了一份《关于教师职务晋升的补充规定》 。其中教授 职务晋升的条件当中赫然写着:“出色完成教学工作”“教学效果优秀” “任现职

Error t-Statistic Prob... Error t-Statistic

Error t-Statistic Prob... Error t-Statistic

通常把这种过去时期的,具有滞后作用的变量 叫做 滞后变量(Lagged Variable) ,含有滞后变量

推 荐 期 刊 : Journal of Cross-cultural Psychology, Journal of International Business Studies, Management and Organization Review

CPTPP 是一个高标准的经贸协议,内含多个新的国际经贸规则,对未来 WTO 改革以及 多边、区域性贸易规则的制定有重要影响。首先,CPTPP

“告诉大家一个好消息和一个坏消息。好消息是下星期不考试了! ”同学们

近年來國內外許多學者也紛紛投入 RFID 安全性的研究,2003 年首先由 Weis 等 學者提出了 RFID 認證協定之論文,開啟了 RFID