粒子群算法(PSO)优化长短期记忆神经网络原理及MATLAB代码复现

目录

0 引言

1 数学模型

2 优化方式

3 MATLAB代码复现

3.1 伪代码

3.2 PSO主函数代码

3.3 PSO-LSTM

0 引言

粒子群算法(Particle swarm optimization,PSO)是Eberhart等学者在1995年基于鸟群捕食行为研究提出的智能算法。该算法模拟赋予鸟群为粒子形式,通过当前最佳和全局最佳鸟群粒子影响来实现捕食,从而更新自身位置来实现对解空间的搜索,最终更新下一轮全局和局部最优,实现进化过程。

1 数学模型

PSO基于粒子形式模拟鸟群,基于俩个‘极值’来更新自身与猎物距离,从而更新新一轮粒子位置,区数学模型如下:

1)初始化:PSO也是群智能算法一种,其种群在问题维度边界内进行随机生成,其式子如下:

式中i为种群数量,D为问题维度。

2)速度更新:速度向量控制着粒子在搜索空间中移动,该数学模型由三个术语组成来实现对搜索空间全局和局部性能的平衡,分别为记忆项、局部认知项和全局认知项。因此速度被定义为:

式中t为迭代次数,Pi为局部最优粒子位置向量,g为全局最优粒子位置向量,c1,c2为局部和全局的学习因子,R1,R2为随机数。

3)粒子位置更新:在粒子速度确定后,粒子根据以下运动方程来定义参数空间中的轨迹(即迭代更新其位置),其表达式为:

4)引入惯性权重:在后续发展过程中,也有学者研究发现PSO算法容易发生梯度爆炸引起群散落,难以收敛,因此引入惯性权重来避免这种情况,具体策略如下:

式中ω为自适应权重,其表达式如下表:

2 优化方式

前篇对长短期记忆神经网络(长短期记忆神经网络原理及Matlab代码复现-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述PSO原理介绍,可以将B长短期记忆神经网络的超参数作为鸟群粒子的位置向量,每一个位置向量对应长短期记忆神经网络的预测值,将这个预测值作为适应度定义全局和局部最优粒子,进行每一项粒子的位置及速度更新,比选优势个体进入下一轮算法行为。

3 MATLAB代码复现

3.1 伪代码

3.2 PSO主函数代码

%% PSO主函数
for it=1:MaxIt
    
    for i=1:nPop
        
        % 更新速度
        particle(i).Velocity = w*particle(i).Velocity ...
            +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
            +c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position);
        
        % 速度边界
        particle(i).Velocity = max(particle(i).Velocity,VelMin);
        particle(i).Velocity = min(particle(i).Velocity,VelMax);
        
        % 更新位置
        particle(i).Position = particle(i).Position + particle(i).Velocity;
        
        % 超边界处理
        IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
        particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
        
        % 位置限制
        particle(i).Position = max(particle(i).Position,VarMin);
        particle(i).Position = min(particle(i).Position,VarMax);
        
        % 适应度
        particle(i).Cost = CostFunction(particle(i).Position);
        
        % 更新个体最优位置
        if particle(i).Cost<particle(i).Best.Cost
            
            particle(i).Best.Position=particle(i).Position;
            particle(i).Best.Cost=particle(i).Cost;
            
            % 更新全局最优位置
            if particle(i).Best.Cost<GlobalBest.Cost
                
                GlobalBest=particle(i).Best;
                
            end
            
        end
        
    end
    
    BestCost(it)=GlobalBest.Cost;
    
    w=w*wdamp;
    
end

3.3 PSO-LSTM

时间序列模型的代码:(粒子群算法优化长短期记忆神经网络(PSO-LSTM)-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值