1.特点
Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了网络的全局稳定性,它比前馈型神经网络具有更强的计算能力,还可以用来解决快速寻优问题。
2.结构
Elman神经网络是应用较为广泛的一种典型的反馈型神经网络模型。一般分为四层:输入层、隐层、承接层和输出层。其输入层、隐层和输出层的连接类似于前馈网络。输入层的单元仅起到信号传输作用,输出层单元起到加权作用。隐层单元有线性和非线性两类激励函数,通常激励函数取Signmoid非线性函数。而承接层则用来记忆隐层单元前一时刻的输出值,可以认为是一个有一步迟延的延时算子。隐层的输出通过承接层的延迟与存储,自联到隐层的输入,这种自联方式使其对历史数据具有敏感性,内部反馈网络的加入增加了网络本身处理动态信息的能力,从而达到动态建模的目的。其结构图如下图1所示,
其网络的数学表达式为:
其中,y为m维输出节点向量;x为n维中间层节点单元向量;u为r维输入向量;为n维反馈状态向量;为中间层到输出层连接权值;为输入层到中间层连接权值;为承接层到中间层连接权值;g()为输出神经元的传递函数,是中间层输出的线性组合;f()为中间层神经元的传递函数,常采用S函数。
3.与BP网络的区别
它是动态反馈型网络,它能够内部反馈、存储和利用过去时刻输出信息,既可以实现静态系统的建模,还能实现动态系统的映射并直接反应系统的动态特性,在计算能力及网络稳定性方面都比BP神经网络更胜一筹。
4.缺点
与BP神经网络一样,算法都是采用基于梯度下降法,会出现训练速度慢和容易陷入局部极小点的缺点,对神经网络的训练较难达到全局最优。
布谷鸟算法是布谷鸟育雏行为和萊维飞行结合的一种算法 。 在CS算法中,有两个路径(或者说成是两个位置的更新)备受关注:
CS算法的执行过程如下:
步骤1:输入影响因素数据与目标输出数据,ELMAN神经网络划分训练集与测试集,对数据归一化处理,
步骤2:构建ELMAN神经网络,初始化网络结构。
步骤3:布谷鸟算法参数初始化。初始化最大迭代次数N,种群大小n,以及c1,c2,w参数。
步骤4:初始化粒子群算法PSO的种群位置。根据步骤2的网络结构,计算需要优化的变量元素个数。
步骤5:使用布谷鸟算法优化。将适应度函数设为ELMAN预测的均方误差。执行布谷鸟的循环体过程,即速度更新和位置更新,直至达到最大迭代次数,终止粒子群优化算法。
步骤6:将布谷鸟优化后的权值和阈值参数,赋给ELMAN神经网络。(或者在循环体当中,将网络结构理解为优化变量,输出最优的网络结构)。
步骤7:布谷鸟优化后的ELMAN神经网络训练和预测,并与优化前的ELMAN神经网络进行预测误差分析和对比。
%#ok<*SAGROW> Remove hints of syntax %#ok<*CLALL> %#ok<*FNDSB> clear all ; close all ; clc ; N = 25; % Number of nests(The scale of solution) D = 10 ; % Dimensionality of solution T = 200 ; % Number of iterations Xmax = 20 ; Xmin = -20 ; Pa = 0.25 ; % Probability of building a new nest(After host bird find exotic bird eggs) nestPop = rand(N,D)*(Xmax-Xmin)+Xmin ; % Random initial solutions for t=1:T levy_nestPop = func_levy(nestPop,Xmax,Xmin) ; % Generate new solutions by Levy flights nestPop = func_bestNestPop(nestPop,levy_nestPop); % Choose a best nest among new and old nests rand_nestPop = func_newBuildNest(nestPop,Pa,Xmax,Xmin); % Abandon(Pa) worse nests and build new nests by (Preference random walk ) nestPop = func_bestNestPop(nestPop,rand_nestPop) ; % Choose a best nest among new and old nests [~,index] = max(func_fitness(nestPop)) ; % Best nests trace(t) = func_objValue(nestPop(index,:)) ; end figure plot(trace); xlabel('迭代次数') ; ylabel('适应度值') ; title('适应度进化曲线') ;
代码结果图:
《排土场沉降预测的Elman模型及_省略_性分析_以大宝山矿李屋排土场为例_宁志杰》