本篇文章使用粒子群算法寻找BP神经网络最优权值来改善BP神经网络的性能。
粒子群算法详见:粒子群优化算法及应用-CSDN博客
目录
1.BP神经网络
1.1BP神经网络组成
BP神经网络,即反向传播神经网络(Backpropagation Neural Network),是一种基于误差反向传播算法的多层前馈神经网络,具有强大的非线性映射能力和优良的多维函数映射能力。
BP神经网络由输入层、隐藏层(可有多个)和输出层组成。每个神经元都与前一层的所有神经元相连,通过加权和的方式传递信号,并经过激活函数进行非线性变换。其核心算法是误差反向传播算法(Error Backpropagation,简称BP算法),该算法通过计算网络输出与目标值之间的误差,利用梯度下降法对网络权重进行调整,以最小化误差。
1.2BP神经网络工作过程
前向传播:输入信号从输入层经过隐藏层,最终到达输出层。在前向传播过程中,每层神经元的输出都是基于上一层神经元的输出和权重计算得到的。在前向传播过程中,神经元的输出计算方式通常为:
其中,表示当前神经元的输出,
为激活函数,
为从神经元j到神经元i的连接权重,
为前一层的输入(或神经元j的输出),
为神经元i的偏置项。
误差反传:如果输出层的实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元。根据误差梯度,利用链式法则计算每个权重的梯度,然后更新权重以减小误差。常用的误差函数为均方误差:
其中,表示当前神经元的实际输出,
表示当前神经元的期望输出。
通过反复的前向传播和误差反传过程,BP神经网络不断调整权重和阈值,直到达到预设的训练次数或误差达到设定的阈值为止。
2.优化思路
具体思路:找到最合适的和
,使适应度值误差函数E最小。
维度是:输入层数*隐含层数+隐含层数+隐含层数*输出层数+输出层数
随机生成初始权值
求适应度值矩阵,找历史最优是Pb和全局最优Gb;
利用粒子群更新权值,再求适应度值矩阵;
更新历史最优是Pb和全局最优Gb;
%% 适应度函数
function fitness = fun(X, hiddennum, net, Input_train, Out_train)
%%节点个数
inputnum = size(Input_train, 1);%输入层节点数
outputnum = size(Out_train, 1);%输出层节点数
%%提取权值和阈值
w1 = X(1 : inputnum * hiddennum);
B1 = X(inputnum * hiddennum + 1 : inputnum * hiddennum + hiddennum);
w2 = X(inputnum * hiddennum + hiddennum + 1 : inputnum * hiddennum + hiddennum + hiddennum * outputnum);
B2 = X(inputnum * hiddennum + hiddennum + hiddennum * outputnum + 1 : inputnum * hiddennum + hiddennum + hiddennum * outputnum + 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';
%%网络训练
net = train(net, Input_train, Out_train);
%%仿真测试
train_sim= sim(net, Input_train);
%%适应度值
error = sum(abs((train_sim - Out_train)));
fitness=error;
end