摘要
BP神经网络的原理
BP神经网络的定义
BP神经网络的基本结构
BP神经网络的神经元
BP神经网络的激活函数,
BP神经网络的传递函数
粒子群算法的原理及步骤
基于粒子群算法改进双隐含层BP神经网络的回归分析
代码
效果图
结果分析
展望
一般用启发式算法改进BP神经网络都是改成的三层BP神经网络,很多时候三层BP神经网络的拟合能力不够,本用粒子群算法对双隐含层,既四层BP神经网络进行改进,并进行回归分析
人工神经网络无需事先确定输入输出之间映射关系的数学方程,仅通过自身的训练,学习某种规则,在给定输入值时得到最接近期望输出值的结果。作为一种智能信息处理系统,人工神经网络实现其功能的核心是算法。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。
基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
神经网络由多个神经元构成,下图就是单个神经元的图1所示:
。。。。。。。。。。。。。。。。。。。。。。。。图1 ,神经元模型
又翻译为粒子群算法、微粒群算法、或微粒群优化算法,PSO是由Kennedy和Eberhart共同提出,最初用于模拟社会行为,作为鸟群中有机体运动的形式化表示。自然界中各种生物体均具有一定的群体行为,Kennedy和Eberhart的主要研究方向之一是探索自然界生物的群体行为,从而在计算机上构建其群体模型。PSO是一种启发式算法,因为它很少或没有对被优化的问题作出假设,并且能够对非常大候选解决方案空间进行搜索。PSO算法初始化为一群随机的粒子,然后通过多次迭代找到最优解。每一次的迭代过程中,粒子通过本身所找到的最优解(被成为个体极值)和整个种群目前找到的最优解(被称为全局极值)来更新自己。也可以使用粒子本身的邻居(被称为局部极值)的极值来更新自己。
一、种群个数popsize,既算法中粒子的个数;
二、最大迭代次数gen,既算法迭代gen次后停止迭代;
三、种群维度dim,既需要优化的自变量个数;
四、种群位置pop,既每个粒子群的对应的自变量的值,一个粒子对应一组自变量,相当于一个解;
五、种群速度v,既粒子群每次迭代更新的飞行速度,粒子群位置更新的步长;
六、种群全局最优值gbest,既迭代过程中曾经出现的最优解,包括最优位置和对应的目标函数值;
七、个体最优,既每个粒子迭代过程中单个体曾经出现的个体最优解,,包括个体最优位置和对应的目标函数值;
八、个体学习因子c1,既个体最优解对粒子群飞行的影响能力;
九、全局学习因子c2,既全局最优值对粒子群飞行的影响能力;
十、惯性权重w,既个体位置所占的权重,权重越大,粒子群收敛越慢,全局搜索能力越强;
首先通过灰色预测建立预测模型,然后以灰色模型的输入为神经网络的输入,以灰色模型的误差为神经网络的输出,进行训练建模,然后通过训练好的BP神经网络,校正灰色模型的误差
主要代码如下:
clc
clear
%读取数据
load data input output
%节点个数
inputnum=7;
hiddennum=10;
outputnum=1;
%训练数据和预测数据
input_train=input(1:52,:)‘;
input_test=input(53:89,:)’;
output_train=output(1:52)‘;
output_test=output(53:89)’;
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%构建网络
net=newff(inputn,outputn,hiddennum);
% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445;
c2 = 1.49445;
maxgen=100; % 进化次数
sizepop=30; %种群规模
Vmax=1;
Vmin=-1;
popmax=5;
popmin=-5;
for i=1:sizepop
pop(i,:)=5*rands(1,21);
V(i,:)=rands(1,21);
fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
end
% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
i;
for j=1:sizepop%速度更新V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));V(j,find(V(j,:)>Vmax))=Vmax;V(j,find(V(j,:)popmax))=popmax;pop(j,find(pop(j,:)0.95pop(j,pos)=5*rands(1,1);end%适应度值fitness(j)=fun(pop(j,:),inputnum,hiddennum,outputnum,net,inputn,outputn);
endfor j=1:sizepop
%个体最优更新
if fitness(j) < fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);
end%群体最优更新
if fitness(j) < fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);
endendyy(i)=fitnesszbest;
end
%% 结果分析
plot(yy)
title(['适应度曲线 ’ ‘终止代数=’ num2str(maxgen)]);
xlabel(‘进化代数’);ylabel(‘适应度’);
x=zbest;
%% 把最优初始阀值权值赋予网络预测
w1=x(1:inputnumhiddennum);
B1=x(inputnumhiddennum+1:inputnumhiddennum+hiddennum);
w2=x(inputnumhiddennum+hiddennum+1:inputnumhiddennum+hiddennum+hiddennumoutputnum);
B2=x(inputnumhiddennum+hiddennum+hiddennumoutputnum+1:inputnumhiddennum+hiddennum+hiddennumoutputnum+outputnum);
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=B2;
%% BP网络训练
%网络进化参数
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
%net.trainParam.goal=0.00001;
%网络训练
[net,per2]=train(net,inputn,outputn);
%% BP网络预测
%数据归一化
inputn_test=mapminmax(‘apply’,input_test,inputps);
an=sim(net,inputn_test);
test_simu=mapminmax(‘reverse’,an,outputps);
figure(1)
plot(test_simu,‘:og’,‘color’,[0.54 0.17 0.89],‘linewidth’,1,‘markersize’,8)
hold on
plot(output_test,‘-*’,‘color’,[0.20 0.63 0.79],‘linewidth’,1,‘markersize’,8);
legend(‘Predicted results’,‘validation results’)
set(gca,‘fontsize’,15);
title(‘Validating results by GA-BP neural network’,‘fontsize’,25)
ylabel(‘The averaged MRT in region 4 [☆]’,‘fontsize’,25)
xlabel(‘Validating sample’,‘fontsize’,25)
set(gca,‘Fontname’,‘arial’);
set(gca,‘xtick’,1:1:37);%
xtickangle(90)
%???
MAPE=mean(abs((output_test - test_simu)./output_test))*100;
RMSE=sqrt(mean((output_test - test_simu).^2));
figure(2)
plot((output_test-test_simu)./test_simu,‘-*’);
title(‘The error of GA-BP neural network’)
从结果图中可以看出,改进的BP神经网络误差比较小,改进拟合预测能力较强
BP神经网络是一种成熟的神经网络,可以用的训练,传递,学习函数很多,应用非常广,可以优化扩展的参数也非常多,是一种常见的算法,要想创新改进,可以对训练传递函数进行改进