智能计算实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BP人工神经网络智能学习算法
一、人工智能算法思想:
人工神经网络(ArtificialNeuralNetworks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(ConnectionistModel),它是一种模拟动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络反映了生物神经元的某些基本特征,是对生物神经细胞见得兴奋传导过程做一种抽象简化和模仿。而正是由于人工神经网络的这种仿生物设计,使得它具有了三大功能:
可见梯度很快趋于零,速度比1.1中的方法快,这体现了加入动量对提高收敛速度的作用,但是提供收敛速度并不能使系统跳出局部最小值。
1.3有自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingda');
结果为:
可见只用了468次迭代MSE就满足要求了。
net.trainParam.goal = 1e-3;
%调用TRAINGDM算法训练BP网络
[net,tr]=train(net,P,T);
%对BP网络进行仿真
A = sim(net,P)
%计算仿真误差
E = T - A
MSE=mse(E)
x=[2,3]
sim(net,x)
改变函数newff中控制训练方式的参数'traingd'可以得到不同训练方法的训练结果。
结果为:
误差一直稳定在9附近就不再减小了,最后训练次数达到了上限10000停止
梯度下降的很慢,说明最后网络收敛在mse为9的一个极小值附近。
1.2有动量的梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingdm');
结果为:
与采用梯度下降法时的情况相同收敛到MSE=9的地方了
自学习功能
联想存储功能
高速寻找优化解的能力
这几点正是人类大脑的基本功能,可见人类的智慧,思维等都是建立在神经网络这样的结构基础上的。所以将人工神经网络算法作为机器学习算法,对人工智能和模式识别等领域都有着重要意义。
人工神经元
人工神经元是对生物神经元的抽象和模拟。下图是典型的人工神经元示意图:
图1人工神经元抽象模型
b.计算隐含层j单元的输出值。将上面的激活值代入激活函数中可得隐含层j单元的
输出值为:
其中阈值 与 一样的被不断修改。
C.计算输出层第 个单元的激活值 :
d.计算输出层第 个单元的实际输出值 :
式中 为隐含层到输出层的权值;
输出单元阈值
为S型激活函数。
3)输出误差的你传播
当实际输出与目标输出的误差大于要求的误差范围时,就要依次一层层对BP网络
学习速率:学习速率决定每一次循环训练中所产生的权值变化量。太大,系统不稳定,太小,系统收敛慢。通常选0.1~0.8。
期望误差的选取:与隐含层的神经元数量相关联。
三、梯度下降BP神经元网络算法流程:
算法流程图如下:
具体步骤:
1)确定参数
a确定输入向量 ;
输入量为 (输入层神经元为n个)。
b.确定输出量 和希望输出量 :
其中 , , , 表示他的n个输入; , , , ,代表与他相连的n个突触的连接强度,其值成为权值; 称为激活值,表示这个人工神经元的输入加权总和,对应于生物细胞的膜电位; 代表这个人工神经元的输出; 表示这个人工神经元的阈值。
如果 超过 则人工神经元被激活。其输出可描述为:
其中 为权矢量, 为输入矢量。
%当前网络层权值和阈值
layerWeights=net.LW{2,1};
layerbias=net.b{2};
%设置训练参数
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net.trainParam.epochs = 10000;
结果为:
74次训练后收敛
2.2有动量的梯度下降法
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingdm');
结果源自文库:
迭代次数为89反而比2.1中的迭代次数多
梯度并不是单调下降,而是波动下降。
2.3有自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingda');
图2 BP网络神经元
图3 BP网络示意图
BP神经网络按有导师的学习方式进行训练,当一学习模式提供给网络后,神经元的激活值输入层经各中间层向输出层传播,在输出层的各神经元输出对应于输入模式的网络响应。然后按减少目标输出与实际输出误差的原则,从输出层经各中间层,最后回到输入层依次修改连接权,随着连接权的不断修正,输出结果的正确率也不断提高。因此BP神经网络算法称为“误差逆传播算法”。
为阈值函数,可选阶跃函数,sgn函数,sigmoid函数等。
分类:
人工神经网络根据神经元之间的拓扑结构上的不同可分为两类:
分层网络
相互连接型网络
其中分层网络可以细分为三种互联形式:
简单的前向网络
具有反馈的前向网络
层内有相互连接的前向网络
二、BP人工神经网络算法:
BP神经网络是一种具有三层或三层以上的多层神经网络,每层都有若干个神经元组成,前一级的神经元和每一个后一级的神经元依次连接,其神经元和网络结构示意图如下:
加入向量并不是在任何情况下都会加快系统收敛速度的,还可能使得系统迭代次数增加
不同的阈值函数对于训练的速度,收敛性有非常大的影响,所以在设计神经网络是要尽量选择合适的阈值函数已达到快速收敛和高精度的特性。
六、总结与展望
BP神经网络数学意义明确,步骤分明,理论上可以实现多为单位立方体 到 得映射,够逼近任何有理函数,有着非常广泛的应用前景。但是这个方法也有很多的不足,比如试验中观察到的无法跳出局部极值的问题,采用改变学习率的方法可以克服这个缺点,同时如果不改变学习率,我觉得也可以用模拟退火的方法跳出局部极值区域,虽然很肯能效果没有改变学习率好,但也值得尝试。
梯度一直稳定下降
学习率最后变得很大
1.4有动量加自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingdx');
结果为:
迭代次数与1.3相差无几
梯度一直减小趋近于零
学习率后来变得很大
由以上结果可得出结论:
梯度下降法可能收敛于局部极小值
结果为:
32次迭代就训练完成了。
梯度一直平滑减小
学习率一直平滑增大
2.4有动量加自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{‘tansig’,’purelin’},’traingdx’);
结果为:
40次迭代完整训练。
梯度单调下降,但不平滑。
学习率波动变化,总体变大
由以上实验得出结论:
加入向量可以使得网络梯度下降更快,但无法跳出局部极小值区域
改变学习速率对改善网络训练有很大帮助,可以跳出局部极小值区域
2阈值函数采用tansig(正切s型传递函数)和purelin(线性传递函数)函数
则网络结构为:
2.1梯度下降法
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingd');
参考文献
[1]matlab中文论坛matlab神经网络30个案例分析北京航空航天大学出版社
[2]杨淑莹模式识别与智能计算-matlab技术实现电子工业出版社
智能计算作业
学号:3110038000
专业班级:硕037班
姓名:
P=[1,2,3];
% T为目标矢量
T=[2,2,6];
%创建一个新的前向神经网络
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingd');
%当前输入层权值和阈值
inputWeights=net.IW{1,1};
inputbias=net.b{1};
设计BP网络所要考虑的因素:
网络的层数:增加层数能提高精度,但同时会将网络复杂化大大加大迭代时间,所以一般通过增加每层含有的神经元数来提高精度,在精度要求的范围内要尽量减少层数
隐含层的神经元:一般选取输入层节点数的两倍加上一点裕量作为隐含层神经元的数量。
初始权值的选取:初始权值太大太小都影响学习速度,一般取(-1,1)之间的随机数也可取(-2.4/n ,2.4/n)之间的随机数。
的参数进行更改:
a.输出层校正误差为:
式中 为实际输出, 为希望输出;
b.隐含层各单元的校正误差为:
C.输出层至隐含层连接权和输出层阈值的校正量为:
式中 为隐含层 单元的输出, 校正误差, 为学习系数
d.隐含层至输入层的校正量为:
为隐含层 单元的校正误差, 为学习系数, 。
4)循环记忆训练:
为使网络误差趋于极小值,一般要经历多次循环记忆才能使网络记住这一模式,
这种循环记忆实际上就是反复重复上面的过程。
四、改进方法:
梯度下降BP网络算法的缺点:
收敛速度慢
存在局部极小点问题
有动量的梯度下降法:
梯度下降法在修正权值时,只是按照K时刻的负梯度方向修正,并没有考虑到以前积累的经验,即以前的梯度方向,从而使得学习过程发生震荡,收敛缓慢。为此可采用如下算法进行改进:
式中, 表示 时刻的负梯度; 为学习速率; 是动量因子,当 时,权值修正只与当前负梯度有关当 时,权值修正就完全取决于上一次循环的负梯度了。这种方法实际上相当于给系统加入了速度反馈,引入了阻尼项从而减小了系统震荡,从而改善了收敛性。
其中:
'traingd'为梯度下降法
'traingdm'为有动量的梯度下降法
'traingda'为有自适应lr的梯度下降法
'traingdx'为有动量加自适应lr的梯度下降法
运行结果:
1阈值函数采用双logsig函数
则网络结构为:
1.1梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingd');
输出向量为 (输出层神经元为q个)。
希望输出向量 。
c.确定隐含层输出向量 :
隐含层输出向量为 ,(隐含层单元数为p)。
隐含层连接权初始化值: , 。
输出层连接权初始化值: , 。
2)输入模式顺传播:
a.计算隐含层各神经元的激活值 :
式中 为隐含层连接权, 为隐含层单元的阈值。
激活函数采用S型函数,即
有自适应lr的梯度下降法:
由于学习速率对于训练的成功与否有很大的影响,而且合理的学习速率将会缩短训练的时间,由此可以想到在训练的不同阶段改变梯度下降法中的学习参数,从而获得更好的训练效果,这就有了自适应lr的梯度下降法。
以上两种改进方法还可以同时使用用以更好的改进BP网路的训练过程。
五、程序实现:
Matlab程序代码如下:
一、人工智能算法思想:
人工神经网络(ArtificialNeuralNetworks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(ConnectionistModel),它是一种模拟动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络反映了生物神经元的某些基本特征,是对生物神经细胞见得兴奋传导过程做一种抽象简化和模仿。而正是由于人工神经网络的这种仿生物设计,使得它具有了三大功能:
可见梯度很快趋于零,速度比1.1中的方法快,这体现了加入动量对提高收敛速度的作用,但是提供收敛速度并不能使系统跳出局部最小值。
1.3有自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingda');
结果为:
可见只用了468次迭代MSE就满足要求了。
net.trainParam.goal = 1e-3;
%调用TRAINGDM算法训练BP网络
[net,tr]=train(net,P,T);
%对BP网络进行仿真
A = sim(net,P)
%计算仿真误差
E = T - A
MSE=mse(E)
x=[2,3]
sim(net,x)
改变函数newff中控制训练方式的参数'traingd'可以得到不同训练方法的训练结果。
结果为:
误差一直稳定在9附近就不再减小了,最后训练次数达到了上限10000停止
梯度下降的很慢,说明最后网络收敛在mse为9的一个极小值附近。
1.2有动量的梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingdm');
结果为:
与采用梯度下降法时的情况相同收敛到MSE=9的地方了
自学习功能
联想存储功能
高速寻找优化解的能力
这几点正是人类大脑的基本功能,可见人类的智慧,思维等都是建立在神经网络这样的结构基础上的。所以将人工神经网络算法作为机器学习算法,对人工智能和模式识别等领域都有着重要意义。
人工神经元
人工神经元是对生物神经元的抽象和模拟。下图是典型的人工神经元示意图:
图1人工神经元抽象模型
b.计算隐含层j单元的输出值。将上面的激活值代入激活函数中可得隐含层j单元的
输出值为:
其中阈值 与 一样的被不断修改。
C.计算输出层第 个单元的激活值 :
d.计算输出层第 个单元的实际输出值 :
式中 为隐含层到输出层的权值;
输出单元阈值
为S型激活函数。
3)输出误差的你传播
当实际输出与目标输出的误差大于要求的误差范围时,就要依次一层层对BP网络
学习速率:学习速率决定每一次循环训练中所产生的权值变化量。太大,系统不稳定,太小,系统收敛慢。通常选0.1~0.8。
期望误差的选取:与隐含层的神经元数量相关联。
三、梯度下降BP神经元网络算法流程:
算法流程图如下:
具体步骤:
1)确定参数
a确定输入向量 ;
输入量为 (输入层神经元为n个)。
b.确定输出量 和希望输出量 :
其中 , , , 表示他的n个输入; , , , ,代表与他相连的n个突触的连接强度,其值成为权值; 称为激活值,表示这个人工神经元的输入加权总和,对应于生物细胞的膜电位; 代表这个人工神经元的输出; 表示这个人工神经元的阈值。
如果 超过 则人工神经元被激活。其输出可描述为:
其中 为权矢量, 为输入矢量。
%当前网络层权值和阈值
layerWeights=net.LW{2,1};
layerbias=net.b{2};
%设置训练参数
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
net.trainParam.mc = 0.9;
net.trainParam.epochs = 10000;
结果为:
74次训练后收敛
2.2有动量的梯度下降法
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingdm');
结果源自文库:
迭代次数为89反而比2.1中的迭代次数多
梯度并不是单调下降,而是波动下降。
2.3有自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingda');
图2 BP网络神经元
图3 BP网络示意图
BP神经网络按有导师的学习方式进行训练,当一学习模式提供给网络后,神经元的激活值输入层经各中间层向输出层传播,在输出层的各神经元输出对应于输入模式的网络响应。然后按减少目标输出与实际输出误差的原则,从输出层经各中间层,最后回到输入层依次修改连接权,随着连接权的不断修正,输出结果的正确率也不断提高。因此BP神经网络算法称为“误差逆传播算法”。
为阈值函数,可选阶跃函数,sgn函数,sigmoid函数等。
分类:
人工神经网络根据神经元之间的拓扑结构上的不同可分为两类:
分层网络
相互连接型网络
其中分层网络可以细分为三种互联形式:
简单的前向网络
具有反馈的前向网络
层内有相互连接的前向网络
二、BP人工神经网络算法:
BP神经网络是一种具有三层或三层以上的多层神经网络,每层都有若干个神经元组成,前一级的神经元和每一个后一级的神经元依次连接,其神经元和网络结构示意图如下:
加入向量并不是在任何情况下都会加快系统收敛速度的,还可能使得系统迭代次数增加
不同的阈值函数对于训练的速度,收敛性有非常大的影响,所以在设计神经网络是要尽量选择合适的阈值函数已达到快速收敛和高精度的特性。
六、总结与展望
BP神经网络数学意义明确,步骤分明,理论上可以实现多为单位立方体 到 得映射,够逼近任何有理函数,有着非常广泛的应用前景。但是这个方法也有很多的不足,比如试验中观察到的无法跳出局部极值的问题,采用改变学习率的方法可以克服这个缺点,同时如果不改变学习率,我觉得也可以用模拟退火的方法跳出局部极值区域,虽然很肯能效果没有改变学习率好,但也值得尝试。
梯度一直稳定下降
学习率最后变得很大
1.4有动量加自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingdx');
结果为:
迭代次数与1.3相差无几
梯度一直减小趋近于零
学习率后来变得很大
由以上结果可得出结论:
梯度下降法可能收敛于局部极小值
结果为:
32次迭代就训练完成了。
梯度一直平滑减小
学习率一直平滑增大
2.4有动量加自适应lr的梯度下降法
net=newff(minmax(P),[5,1],{‘tansig’,’purelin’},’traingdx’);
结果为:
40次迭代完整训练。
梯度单调下降,但不平滑。
学习率波动变化,总体变大
由以上实验得出结论:
加入向量可以使得网络梯度下降更快,但无法跳出局部极小值区域
改变学习速率对改善网络训练有很大帮助,可以跳出局部极小值区域
2阈值函数采用tansig(正切s型传递函数)和purelin(线性传递函数)函数
则网络结构为:
2.1梯度下降法
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingd');
参考文献
[1]matlab中文论坛matlab神经网络30个案例分析北京航空航天大学出版社
[2]杨淑莹模式识别与智能计算-matlab技术实现电子工业出版社
智能计算作业
学号:3110038000
专业班级:硕037班
姓名:
P=[1,2,3];
% T为目标矢量
T=[2,2,6];
%创建一个新的前向神经网络
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingd');
%当前输入层权值和阈值
inputWeights=net.IW{1,1};
inputbias=net.b{1};
设计BP网络所要考虑的因素:
网络的层数:增加层数能提高精度,但同时会将网络复杂化大大加大迭代时间,所以一般通过增加每层含有的神经元数来提高精度,在精度要求的范围内要尽量减少层数
隐含层的神经元:一般选取输入层节点数的两倍加上一点裕量作为隐含层神经元的数量。
初始权值的选取:初始权值太大太小都影响学习速度,一般取(-1,1)之间的随机数也可取(-2.4/n ,2.4/n)之间的随机数。
的参数进行更改:
a.输出层校正误差为:
式中 为实际输出, 为希望输出;
b.隐含层各单元的校正误差为:
C.输出层至隐含层连接权和输出层阈值的校正量为:
式中 为隐含层 单元的输出, 校正误差, 为学习系数
d.隐含层至输入层的校正量为:
为隐含层 单元的校正误差, 为学习系数, 。
4)循环记忆训练:
为使网络误差趋于极小值,一般要经历多次循环记忆才能使网络记住这一模式,
这种循环记忆实际上就是反复重复上面的过程。
四、改进方法:
梯度下降BP网络算法的缺点:
收敛速度慢
存在局部极小点问题
有动量的梯度下降法:
梯度下降法在修正权值时,只是按照K时刻的负梯度方向修正,并没有考虑到以前积累的经验,即以前的梯度方向,从而使得学习过程发生震荡,收敛缓慢。为此可采用如下算法进行改进:
式中, 表示 时刻的负梯度; 为学习速率; 是动量因子,当 时,权值修正只与当前负梯度有关当 时,权值修正就完全取决于上一次循环的负梯度了。这种方法实际上相当于给系统加入了速度反馈,引入了阻尼项从而减小了系统震荡,从而改善了收敛性。
其中:
'traingd'为梯度下降法
'traingdm'为有动量的梯度下降法
'traingda'为有自适应lr的梯度下降法
'traingdx'为有动量加自适应lr的梯度下降法
运行结果:
1阈值函数采用双logsig函数
则网络结构为:
1.1梯度下降法
net=newff(minmax(P),[5,1],{'logsig','logsig'},'traingd');
输出向量为 (输出层神经元为q个)。
希望输出向量 。
c.确定隐含层输出向量 :
隐含层输出向量为 ,(隐含层单元数为p)。
隐含层连接权初始化值: , 。
输出层连接权初始化值: , 。
2)输入模式顺传播:
a.计算隐含层各神经元的激活值 :
式中 为隐含层连接权, 为隐含层单元的阈值。
激活函数采用S型函数,即
有自适应lr的梯度下降法:
由于学习速率对于训练的成功与否有很大的影响,而且合理的学习速率将会缩短训练的时间,由此可以想到在训练的不同阶段改变梯度下降法中的学习参数,从而获得更好的训练效果,这就有了自适应lr的梯度下降法。
以上两种改进方法还可以同时使用用以更好的改进BP网路的训练过程。
五、程序实现:
Matlab程序代码如下: