神经网络算法及其应用

Download Report

Transcript 神经网络算法及其应用

崔丽
数学科学学院
2012.7.2

神经元介绍和数学描述
◦ 人工神经网络的关键点

BP神经网络
◦ 原理
◦ 算法步骤

BP神经网络算法实现
◦ Matlab工具箱介绍
◦ 举例:1. 语音分类
◦
2. 非线性函数拟合
◦ 思考题:黄瓜疾病分类

练习题:储油罐变位问题

神经细胞(神经元)
树突是信号的输入通路
轴突是信号的输出通路
信号从一个神经细胞经过突触传递到另一个细胞是
一个相当复杂的生物物理及生物化学过程。
 信号传递过程有两个效果:激发态和抑制态
——接受信号的一方电位升高,或者电位降低
 由处于激发态的神经细胞产生的脉冲输出,通过神
经末梢传向下游的每一个与之相连的神经元,不同
的下游神经元,信号引起的电位变化不同,因而引
起不同的反应——不同的神经元之间有不同的作用
强度(连接强度)
 神经元之间的连接强度并不是一成不变的,两个神
经元之间的连接强度,随着激发与抑制行为相关性
的时间平均值正比变化。





一个神经网络是一个由简单处理单元构成的规模宏
大的并行分布式处理器。天然具有存储经验知识和
使之可用的特性。神经网络在两方面与人脑相似。
1.神经网络获取的知识是从外部环境中学习得来的。
2.互连神经元的连接强度,即突触权值,用于存储
获取的知识。
用于完成学习过程的程序称为学习算法,其功能是
以有序的方式改变网络的突触权值以获得想要的设
计目标




非线性性
输入输出的映射
适应性
容错性




聚类分析,信号分类
非线性函数拟合
回归预测分析
建模自变量的降维

神经元是神经网络操作的基本信息处理单位。

神经元模型的基本元素:
突触或者连接链;加法器;激活函数。


突触权值, 激活函数, 输入信号的线性组合
器的输出, 偏置, 输出。




突触权值:一般有一个范围;
加法器:加权和——线性组合器;
激活函数:用于限制神经元输出振幅。它也称为压
制函数。由它将输出信号压制到允许的范围之内的
一定值。
注意:偏置bk的作用是根据其为正还是负,相应的
增加或者降低激活函数的网络输入。
也就是模仿神经细胞的激活抑制阈值。
1.阈值函数:
2.分段线性函数:
3.Sigmoid函数:

单层前馈网络;多层前馈网;递归网络。







信号前向传递
误差反向传递
即:
每一层的神经元状态只影响下一层神经元状态
如果输出层得不到期望输出,则转入反向传播
根据预测误差调整突触权值和偏置
从而使BP神经网络预测输出不断逼近期望输出







三层网络结构:输入层,隐含层,输出层
网络节点数:输入层
隐含层
输出层
连接权值
隐含层的激活函数f。
激活阈值

隐含层输出

神经网络输出

误差的能量

应该满足的方程:


最速下降法——求E(w)的极小(局部):
从任何一个初始点
出发,计算在该点的负梯度
方向
,这是函数在该点下降最快的方向;
只要
就可以沿着该方向移动一小步,达
到一个新点
是一个参数——学习率,只要它足够小,能保证

不断重复,一定能到达E的一个(局部)极小值点。



能量:

修正量
1.网络初始化:
 根据输入输出序列(X,Y)确定:网络输入节点数n,
 隐含层节点数l,输出节点数m;
 初始化连接权值
;
 初始化偏置(阈值)a,b;
 给定学习速率和神经元激活函数;
2.隐含层的输出计算.
根据输入向量X,输入层和隐含层间连接权值wij及隐含
层阈值a,计算隐含层输出H。
其中l是隐含层节点数;f为隐含层的激活函数,
1
0.9
0.8
0.7
——Sigmoid函数。
性质:f’(x)=f(x)(1-f(x))
0.6
0.5
0.4
0.3
0.2
0.1
0
-5
-4
-3
-2
-1
0
1
2
3
4
5
3.输出层输出计算。
根据隐含层输出H,连接权值
神经网络预测输出 。
和阈值b,计算BP
4.误差计算
根据网络预测输出Ŷ与期望输出Y,计算网络预测误
差e。
5.权值更新。
根据网络预测误差e更新网络连接权值wij,wjk。
为学习率。
6.阈值更新。
根据网络预测误差e更新网络节点阈值a,b。
7.判断算法迭代是否结束,若没有结束,返回步骤2.
1.隐含层节点数:
 最佳隐含层节点选择,参考如下公式(不是同时满
足):

其中c为0~10之间的常数。确定节点数的大概范围,
然后用试凑法确定最佳节点数。
2.激活函数选择:
阶跃函数 ,准线性函数,双曲正切函数,Sigmoid
函数,小波函数;
作用:光滑化,归一化,阈值化
3.变学习率法。
取值在[0,1]之间,学习率 越大,对权值的修改
越大,网络学习速度越快。
过大的学习率将使权值学习过程中产生震荡,
过小的学习率使网络收敛过慢,权值难以趋于稳定。
变学习率法:
在BP网络进化初期较大,网络收敛迅速,随着学习
过程的进行,学习率不断减小,网络趋于稳定。

4.附加动量方法。
原因:采用梯度修正法对权值和阈值的方法,从网
络预测误差的负梯度方向修正权值和阈值,没有考
虑以前经验的积累,学习过程收敛缓慢。
采用附加动量法来解决:

其中a为动量学习率。



将数据转化为[0,1]之间。
1)最大最小法

2)平均数方差法








命令:mapminmax
[inputn,inputps] =mapminmax(input_train);
inputn归一化的数据,inputps归一化得到的结构
体,包含数据的最大值,最小值和平均值等信息。
测试数据的归一化和反归一化。
input_test =mapminmax(‘apply’, input_test,
inputps);%归一化
Bpoutput =mapminmax(‘reverse’, an,outputs);
%反归一化。
包括的网络有感知器,线性网络,BP神经网络,径向基网
络,自组织网络和回归网络等。
 BP神经网络包括三个函数newff,sim,train
1.建立BP网络函数:newff
net=newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
P:输入数据矩阵;T:输出矩阵数据;S:隐含节点数;
TF:节点传递函数——hardlim,hardlims,purelin,
tansig,logsig;
BTF:训练函数,梯度下降法,包括traingd,traingdm等;
BLF:网络学习函数,学习规则learngd,learngdm;
PF:性能分析函数,绝对误差mae,均方误差mse;
IPF:输入处理函数;
OPF:输出处理函数;
DDF:验证数据划分函数










2. BP神经网络训练函数:train
[net,tr] = train(NET,X,T,Pi,Ai);
NET: 待训练网络
X:输入函数矩阵;
T:输出数据矩阵;
Pi:初始化输入层条件;
Ai:初始化输出层条件;
net:训练好的网络;
tr:训练过程记录。





3. BP神经网络预测函数:sim
用训练好的BP神经网络预测函数输出。
y=sim(net,x);
net训练好的网络;
x:输入数据;
y: 网络预测数据

nntool


500组24维语音特征信号,用BP网络实现对民歌,
古筝,摇滚,流行四类不音乐的有效分类。
原始信号
20
10
0
-10
-20
0
50
100
150
200
250
300
350
400
450
500
0
50
100
150
200
250
300
350
400
450
500
0
50
100
150
200
250
300
350
400
450
500
0
50
100
150
200
250
300
350
400
450
500
10
5
0
-5
-10
10
0
-10
-20
20
10
0
-10
-20
-30
语音
信号
参考
模式
预处理
信号提取
模式匹配
判别规则
识别
结果

包括BP神经网络构建,BP神经网络训练和BP神经网
络分类。

BP神经网络构建
◦ 根据系统输入输出数据特点确定结构。
◦ 语音信号的特征是24维,要分成四类,于是选择
◦ 24——25——4
24个输入节点,25个隐含层节点,4个输出层节点。

BP神经网络训练
◦ 训练数据:从500*4=2000组中随机选择1500组数据进
行训练,其余500组作为测试数据测试网络分类能力。

BP神经网络分类
◦ 用训练好的神经网络对测试数据所属语音类别进行分类。

1. 数据选择和归一化。
◦ 从数据中提取类别标识(在第1维),后24维是语音特征。
◦ 随机选取1500组,500组作为测试数据,并对训练数据进行归一
化处理。
◦ 根据类别标识设定每组语音信号的期望输出值,如标识为1,则输
出向量[1 0 0 0];
%% 训练数据预测数据提取及归一化
%下载四类语音信号
load data1 c1
load data2 c2
load data3 c3
load data4 c4
%四个特征信号矩阵合成一个矩阵
data(1:500,:)=c1(1:500,:);
data(501:1000,:)=c2(1:500,:);
data(1001:1500,:)=c3(1:500,:);
data(1501:2000,:)=c4(1:500,:);
%输入输出数据
input=data(:,2:25);
output1 =data(:,1);
%把输出从1维变成4维
for i=1:2000
switch output1(i)
case 1
output(i,:)=[1
case 2
output(i,:)=[0
case 3
output(i,:)=[0
case 4
output(i,:)=[0
end
end
0 0 0];
1 0 0];
0 1 0];
0 0 1];
%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);
%随机提取1500个样本为训练样本,500个样本为预测样本
input_train=input(n(1:1500),:)';
output_train=output(n(1:1500),:)';
input_test=input(n(1501:2000),:)';
output_test=output(n(1501:2000),:)';
%输入数据归一化
[inputn,inputps]=mapminmax(input_train);
2.BP神经网络初始化
%% 网络结构初始化
innum=24;
midnum=25;
outnum=4;
%权值初始化
w1=rands(midnum,innum);
b1=rands(midnum,1);
w2=rands(midnum,outnum);
b2=rands(outnum,1);
w2_1=w2;w2_2=w2_1;
w1_1=w1;w1_2=w1_1;
b1_1=b1;b1_2=b1_1;
b2_1=b2;b2_2=b2_1;
%学习率
xite=0.1
alfa=0.01;
3. BP神经网络训练
for ii=1:10
E(ii)=0;
for i=1:1:1500
%% 网络预测输出
x=inputn(:,i);
% 隐含层输出
for j=1:1:midnum
I(j)=inputn(:,i)'*w1(j,:)'+b1(j);
Iout(j)=1/(1+exp(-I(j)));
end
% 输出层输出
yn=w2'*Iout'+b2;
%% 权值阀值修正
%计算误差
e=output_train(:,i)-yn;
E(ii)=E(ii)+sum(abs(e));
%计算权值变化率
dw2=e*Iout;
db2=e‘;
for j=1:1:midnum
S=1/(1+exp(-I(j)));
FI(j)=S*(1-S);
end
for k=1:1:innum
for j=1:1:midnum
dw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));
db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));
end
end
%权值阈值更新 和结果保存
w1=w1_1+xite*dw1‘;
b1=b1_1+xite*db1‘;
w2=w2_1+xite*dw2‘;
b2=b2_1+xite*db2‘;
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
b1_2=b1_1;b1_1=b1;
b2_2=b2_1;b2_1=b2;
end
end
4.BP神经网络分类
%% 语音特征信号分类
inputn_test=mapminmax('apply',input_test,inputps
);
for ii=1:1
for i=1:500
%隐含层输出
for j=1:1:midnum
I(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);
Iout(j)=1/(1+exp(-I(j)));
end
fore(:,i)=w2'*Iout'+b2;
end
end
%根据网络输出找出数据属于哪类
for i=1:500
output_fore(i)=find(fore(:,i)==max(fore(:,i)));
end
%BP网络预测误差
error=output_fore-output1(n(1501:2000))';


神经网络的分类误差,统计正确率等。
全部的matlab文件,见BP.m
1.数据归一化预处理如前。
2. BP神经网络构建
net = newff(inputn,outputn,25);
3. BP神经网络训练
%网络参数配置(迭代次数,学习率,目标)
net.trainParam.epochs = 100;%最大训练次数
net,trainParam.lr = 0.1;
net.trainParam.goal = 0.001;%训练精度
%BP神经网络训练
[net, tr] = train(net,inputn,outputn);
4.BP神经网络预测
%预测数据归一化
inputn_test=mapminmax(‘apply’, input_test,
inputps);
%BP神经网络预测输出
fore= sim(net,inputn_test);
5.结果分析






要拟合一组数据,函数关系未知
y= f(x1,x2,…,xn)
可以设计BP神经网络:
{x1,x2,…,xn}输入层,{y}是输出层
中间建立隐含层,节点数可以是n+1。
用已知数据拟合,完成网络训练,最后可以实现网
络预测,即确定了该组数据符合的函数关系。


若要拟合的函数:
y = x_1^2+x_2^2;








总数据2000组,存储在data.mat文件中。从中选
出1900组作为网络训练数据,100组数据作为网
络测试训练数据。
对训练数据进行归一化处理。
Matlab程序:
%下载输入输出数据
load data input output
%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);





%找出训练数据和预测数据
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900))';
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));




%样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train
);










用训练数据建立神经网络,并训练。
Matlab程序
%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,5);
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00004;
%网络训练
net=train(net,inputn,outputn);








用训练好的神经网络预测非线性函数的输出,并通过
网络预测输出和期望输出分析该网络的拟合能力。
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inp
utps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);






误差分析:
%预测误差
error=BPoutput-output_test;
%总误差
errorsum=sum(abs(error))
更多案例请查阅参考文献《Matlab神经网络30个
案例分析》


请根据黄瓜病虫害的数据,用神经网络进行训练并
进行病虫害分类。
见data.xls, diseasename.txt


运用蒙托卡罗方法计算2010年全国数学建模赛题A
第二问:对于图1所示的实际储油罐,建立罐体变
位后标定罐容表的数学模型,即罐内储油量与油位
高度及变位参数(纵向倾斜角度和横向偏转角度
)之间的一般关系。并利用罐体变位后在进/出油
过程中的实际检测数据(附件2),根据所建立的
数学模型确定变位参数,给出罐体变位后油位高度
间隔为10cm的罐容表标定值。进一步利用附件2中
的实际检测数据来分析检验你们模型的正确性与方
法的可靠性。
提交到[email protected]