「深度学习之优化算法」笔记(三)之粒子群算法

news2024/11/24 17:25:51

1. 粒子群算法简介

粒子群算法(Particle Swarm Optimization,PSO)是一种模仿鸟群、鱼群觅食行为发展起来的一种进化算法。其概念简单易于编程实现且运行效率高、参数相对较少,应用非常广泛。粒子群算法于1995年提出,距今(2019)已有24年历史。

  粒子群算法中每一个粒子的位置代表了待求问题的一个候选解。每一个粒子的位置在空间内的好坏由该粒子的位置在待求问题中的适应度值决定。每一个粒子在下一代的位置有其在这一代的位置与其自身的速度矢量决定,其速度决定了粒子每次飞行的方向和距离。在飞行过程中,粒子会记录下自己所到过的最优位置 P,群体也会更新群体所到过的最优位置G 。粒子的飞行速度则由其当前位置、粒子自身所到过的最优位置、群体所到过的最优位置以及粒子此时的速度共同决定。

2. 算法流程

上面介绍了粒子群算法来历,过程。没有了解过的小伙伴肯定是一脸萌容。不过这已经是优化算法中最简单、最没有心机的算法了,也是入门优化算法的不二选择。

 

好了,正篇开始。这是一个根据鸟群觅食行为衍生出的算法。现在,我们的主角是一群鸟。

 

  小鸟们的目标很简单,要在这一带找到食物最充足的位置安家、休养生息。它们在这个地方的搜索策略如下:

  1. 每只鸟随机找一个地方,评估这个地方的食物量。

  2. 所有的鸟一起开会,选出食物量最多的地方作为安家的候选点G。

  3. 每只鸟回顾自己的旅程,记住自己曾经去过的食物量最多的地方P。

  4. 每只鸟为了找到食物量更多的地方,于是向着G飞行,但是呢,不知是出于选择困难症还是对P的留恋,或者是对G的不信任,小鸟向G飞行时,时不时也向P飞行,其实它自己也不知道到底是向G飞行的多还是向P飞行的多。

  5. 又到了开会的时间,如果小鸟们决定停止寻找,那么它们会选择当前的G来安家;否则继续2->3->4->5来寻找它们的栖息地。

  上图描述的策略4的情况,一只鸟在点A处,点G是鸟群们找到过的食物最多的位置,点P是它自己去过的食物最多的地点。V是它现在的飞行速度(速度是矢量,有方向和大小),现在它决定向着P和G飞行,但是这是一只佛系鸟,具体飞多少随缘。如果没有速度V,它应该飞到B点,有了速度V的影响,它的合速度最终使它飞到了点C,这里是它的下一个目的地。如果C比P好那么C就成了下一次的P,如果C比G好,那么就成了下一次的G。

  具体的飞行过程如下图所示:

 

 

  算法的流程如下:

 

3.粒子群算法模型

介绍完了粒子群算法的流程,再来详细介绍一下粒子群算法的模型。

  鸟群有三个决定其搜索结果的参数

  C1:自我学习因子

  C2:全局学习因子

  W:惯性系数

  maxV:最大速率。

  对于每只鸟,有两个属性:

  位置:

  速度:

 

  其中t表示第t次迭代(第t次开会),i表是这只鸟的序号是i,D表示搜索空间的维度,对于鸟群来说D=2(在平面内搜寻)。

  其速度更新公式如下:

 

r1,r2表示均匀分布在(0,1)内的随机数。

  位置更新公式如下:

 

4.实验初步

上面都是些什么鬼,完全看不懂……,很正常,下面我们来个例子看看上面那些都是什么东西。

  C1:自我学习因子,就是一只鸟飞向自己到过的最优位置的权重,可以理解为C1越大,该鸟飞向自己到过的最优位置的意愿越强烈。

  C2:全局学习因子,也叫社会学习因子,即一只鸟飞向群体到过的最优位置的权重, C2越大,该鸟飞向群体到过的最优位置的意愿越强烈。

 

  如上图,假设随机变量r1=r2=1,如果该鸟当前速度V=0,C1=C2=1时,,则该鸟的速度为A->B,它将飞到B点,若C1=0,C2=1,则该鸟将飞到G点,若C1=1,C2=0,则鸟将飞到P点。

 

  一般,取C1=C2=2,由于r1和r2为(0-1)的随机数,在速度V=0的情况下,该鸟可能从点A飞到平行四边形ADEC内的任一位置,其中AG=GD,AP=PC。点B为该鸟飞向的期望位置。

  W为惯性系数,即鸟在下一次飞行时将会以上一次的速度为基础,根据自己的意愿的出最终的速度。

  举个简单的例子,搜索平面内距点M最近的点。这是一个二维的问题,假设M的坐标为(a,b),我们可以该问题转化为求使的值最小的一组解,那么粒子群算法的适应度函数为

  实验开始了

参数

问题维度(维度)

2

鸟的数量(种群数)

20

开会次数(最大迭代次数)

50

C1

2

C2

2

W

1

maxV

5

取值范围

(-100,100)

为了方便求解我们设M点为原点,即a=b=0。

此时问题为在上图的区域内寻找距原点最近的点的坐标。我们看一下粒子群算法的寻找过程。

  可以发现所有的小鸟都向着我们的目标点不断的靠近。它们最终收敛在了一个很小的范围内。我们所得到的最终的结果是(0.01559301434688,-0.113289020661651),该点距原点距离为的平方为0.014876507,虽然很近了,但这可不是一个较好的结果。

  虽然小鸟们已经聚集在了最优点附近的小范围内,但却没有进一步向原点靠近。这是为什么呢,下一节我们一起来研究一下。

5.参数实验

上一节中,我们看到小鸟们聚集到一个较小的范围内后,不会再继续集中。这是怎么回事呢?

猜测:

1.与最大速度限制有关,权重w只是方便动态修改maxV。

2.与C1和C2有关,这两个权重限制了鸟儿的搜索行为。

还是上一节的实验,。现在我们将maxV的值有5修改为50,即maxV=50,其他参数不变。参数如下 

参数

问题维度(维度)

2

鸟的数量(种群数)

20

开会次数(最大迭代次数)

50

C1

2

C2

2

W

1

maxV

50

取值范围

(-100,100)

 

此时得到的最优位值的适应度函数值为0.25571,可以看出与maxV=5相比,结果差了很多而且小鸟们聚集的范围更大了。

  现在我们设置maxV=1,再次重复上面的实验,实验结果如下:

 

  这次最终的适应度函数值为,比之前的结果都要好0.00273。从图中我们可以看出,小鸟们在向一个点集中,但是他们飞行的速度比之前慢多了,如果问题更复杂,可能无法等到它们聚集到一个点,迭代就结束了。

  为什么maxV会影响鸟群的搜索结果呢?

  我们依然以maxV=50为例,不过这次为了看的更加清晰,我们的鸟群只有2只鸟,同时将帧数放慢5倍以便观察。

参数

问题维度(维度)

2

鸟的数量(种群数)

2

开会次数(最大迭代次数)

50

C1

2

C2

2

W

1

maxV

50

取值范围

(-100,100)

 

可以看出若当前的惯性速度V较大时,且P、G相距较近时(考虑极端情况P与G重合在一个点),我们来看看小鸟的飞行轨迹。

 

小鸟从A点出发,速度为A->B,这一次飞行过后,小鸟的期望位置为点D,将此次飞行记为第一次飞行。其中AG=GC,由于P=G,故

 

  第二次飞行,小鸟由点D为起点,此时小鸟的惯性速度为A->D,而它向目标飞行的速度为D->E,其中DG=GE,此次飞行的合速度为D->C,故C为此次飞行的期望点位置。

 

  第三次飞行,小鸟由点C为起点,此时小鸟的惯性速度为D->C,而它向目标飞行的速度为C->A,其中CG=GA,此次飞行的合速度为C->E,故E为此次飞行的期望点位置。

 

  第四次飞行,小鸟由点E为起点,此时小鸟的惯性速度为C->E,而它向目标飞行的速度为E->D其中EG=GD,此次飞行的合速度为E->A,故A为此次飞行的期望点位置。

 

  可以看出如果G和P重合,那么小鸟的飞行轨迹的期望为A->D->C->E->A,如果这四个位置均差于全局最优点G和自己的历史最优点P,那么小鸟将会一直围着当前最优点打转,这样当然无法继续聚集在同一个点。

  问题找到了,那应该如何解决呢?先思考几种方案,能不能行的通,实验之后见分晓。思路一:限制鸟的最大飞行速率,由于惯性系数W的存在,使得控制最大速率和控制惯性系数的效果是等价的,取其一即可。

  方案1:使惯性系数随着迭代次数增加而降低,这里使用的是线性下降的方式,即在第1次迭代,惯性系数W=1,最后一次迭代时,惯性系数W=0,当然,也可以根据自己的意愿取其他值。

实验参数如下:

参数

问题维度(维度)

2

鸟的数量(种群数)

20

开会次数(最大迭代次数)

50

C1

2

C2

2

W

1->0

maxV

50

取值范围

(-100,100)

 

  小鸟们的飞行过程如上图,可以看到效果很好,最后甚至都聚集到了一个点。再看看最终的适应度函数值8.61666413451519E-17,这已经是一个相当精确的值了,说明这是一个可行的方案,但是由于其最后种群过于集中,有陷入局部最优的风险。

  方案2:给每只鸟一个随机的惯性系数,那么鸟的飞行轨迹也将不再像之前会出现周期性。每只鸟的惯性系数W为(0,2)中的随机数(保持W的期望为1)。

实验参数如下:

参数

问题维度(维度)

2

鸟的数量(种群数)

20

开会次数(最大迭代次数)

50

C1

2

C2

2

W

rand(0,2)

maxV

50

取值范围

(-100,100)

 

  可以看到小鸟们并没有像上一个实验一样聚集于一个点,而是仍在一个较大的范围内进行搜索。其最终的适应度函数为0.01176,比最初的0.25571稍有提升,但并不显著。什么原因造成了这种情况呢?我想可能是由于惯性系数成了期望为1的随机数,那么小鸟的飞行轨迹的期望可能仍然是绕着一个四边形循环,只不过这个四边形相比之前的平行四边形更加复杂,所以其结果也稍有提升,当然对于概率算法,得到这样的结果可能仅仅是因为运气不好

  我们看到惯性系数W值减小,小鸟们聚拢到一处的速度明显提升,那么,如果我们去掉惯性系数这个参数会怎么样呢。

  方案3:取出惯性系数,即取W=0,小鸟们只向着那两个最优位置飞行。

参数

问题维度(维度)

2

鸟的数量(种群数)

20

开会次数(最大迭代次数)

50

C1

2

C2

2

W

0

maxV

50

取值范围

(-100,100)

 

  可以看见鸟群们迅速聚集到了一个点,再看看得到的结果,最终的适应度函数值为2.9086886073362966E-30,明显优于之前的所有操作。

  那么问题来了,为什么粒子群算法需要一个惯性速度,它的作用是什么呢?其实很明显,当鸟群迅速集中到了一个点之后它们就丧失了全局的搜索能力,所有的鸟会迅速向着全局最优点飞去,如果当前的全局最优解是一个局部最优点,那么鸟群将会陷入局部最优。所以,惯性系数和惯性速度的作用是给鸟群提供跳出局部最优的可能性,获得这个跳出局部最优能力的代价是它们的收敛速度减慢,且局部的搜索能力较弱(与当前的惯性速度有关)。

  为了平衡局部搜索能力和跳出局部最优能力,我们可以人为的干预一下惯性系数W的大小,结合方案1和方案2,我们可以使每只鸟的惯性系数以一个随机周期,周期性下降,若小于0,则重置为初始值。

 

  这样结合了方案1和方案2的惯性系数,也能得到不错的效果,大家可以自己一试。

思路二:改变小鸟们向群体最优飞行和向历史最优飞行的权重。

  方案4:让小鸟向全局最优飞行的系数C2线性递减。

参数

问题维度(维度)

2

鸟的数量(种群数)

20

开会次数(最大迭代次数)

50

C1

2

C2

2->0

W

1

maxV

50

取值范围

(-100,100)

 

  小鸟们的飞行过程与之前好像没什么变化,我甚至怀疑我做了假实验。看看最终结果,0.7267249621552874,这是到目前为止的最差结果。看来这不是一个好方案,让全局学习因子C2递减,势必会降低算法的收敛效率,而惯性系数还是那么大,小鸟们依然会围绕历史最优位置打转,毕竟这两个最优位置是有一定关联的。所以让C1线性递减的实验也不必做了,其效果应该与方案4相差不大。

  看来只要是惯性系数不变怎么修改C1和C2都不会有太过明显的效果。为什么实验都是参数递减,却没有参数递增的实验呢?

  1.惯性系数W必须递减,因为它会影响鸟群的搜索范围。

  2.如果C1和C2递增,那么小鸟的惯性速度V势必会跟着递增,这与W递增会产生相同的效果。

6.总结

上面我们通过一些实验及理论分析了粒子群算法的特点及其参数的作用。粒子群作为优化算法中模型最简单的算法,通过修改这几个简单的参数也能够改变算法的优化性能可以说是一个非常优秀的算法。

  上述实验中,我们仅分析了单个参数对算法的影响,实际使用时(创新、发明、写论文时)也会同时动态改变多个参数,甚至是参数之间产生关联。

  实验中,为了展现实验效果,maxV取值较大,一般取值为搜索空间范围的10%-20%,按上面(-100,100)的范围maxV应该取值为20-40,在此基础上,方案1、方案2效果应该会更好。

  粒子群算法是一种概率算法,所以并不能使用一次实验结果来判断算法的性能,我们需要进行多次实验,然后看看这些实验的效果最终来判断,结果必须使用多次实验的统计数据来说明,一般我们都会重复实验30-50次,为了发论文去做实验的小伙伴们不要偷懒哦。

  粒子群算法的学习目前告一段落,如果有什么新的发现,后面继续更新哦!

以下指标纯属个人yy,仅供参考

指标

星数

复杂度

★☆☆☆☆☆☆☆☆☆

收敛速度

★★★★★☆☆☆☆☆

全局搜索

★★★★☆☆☆☆☆☆

局部搜索

★★★★★★☆☆☆☆

优化性能

★★★★★★☆☆☆☆

跳出局部最优

★★★★☆☆☆☆☆☆

改进点

★★★★☆☆☆☆☆☆

参考文献

[1]J. Kennedy and R.C. Eberhart. “Particle swarm optimization.” In IEEE international Conference on Neural Networks, volume 4,IEEE Press, 1995, pp. 1942–1948.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新世界-旧世界

以下内容是这两天朋友问答形成的一些观点,堆成一篇文章。看似没有关联性,但你仔细品味,你会感觉到它们其实讲的是一个事。至于是一个啥事,我不说,你们自己猜。 (1) 今年年初看见篇文章&#xff…

前端vue仿京东天猫简单好用的瀑布流瀑布流式布局列表组件waterfall

前端vue仿京东天猫简单好用的瀑布流瀑布流式布局列表组件waterfall&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13046 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- proList: 条目数组数据 goProDetail:条目点击事…

vue路由的两种模式 hash与history

文章目录 vue路由是什么&#xff1f;Hash 模式Hash具体的原理如下&#xff1a;Hash 模式的好处缺点 History 模式实现 History 模式的原理如下&#xff1a;History 模式的好处缺点 vue路由是什么&#xff1f; Vue 路由是 Vue.js 框架提供的一种机制&#xff0c;用于实现单页面…

驱动开发:内核解锁与强删文件

在某些时候我们的系统中会出现一些无法被正常删除的文件&#xff0c;如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉&#xff0c;而所谓的解锁其实就是释放掉文件描述符&#xff08;句柄表&#xff09;占用&#xff0c;文件解锁的核心原理是通过调用ObSetHandleAttri…

【科学文献计量】关于使用metaknowledge读取文献后转化字典结构报错PD问题的解决方式

关于使用metaknowledge读取文献后转化字典结构报错PD问题的解决方式 1 问题说明2 问题探索3 问题解决4 数据核实1 问题说明 在进行文献下载完毕后,使用metaknowledge读入文献时候是正常的,但是要通过RC.makeDict()方法转化为字典结构,却发生了PD报错问题(KeyError: PD),如…

基于SpringBoot+vue的在线考试系统设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

阿里云新人专享是什么意思?是新注册用户还是新用户或者老用户?

阿里云2023年促销活动中云服务器购买条件大多都指定为新人专享&#xff0c;有的用户购买提示“不满足购买条件”&#xff0c;有的虽然能买&#xff0c;但是点击购买之后的价格却跟活动显示价格有很大的出入&#xff0c;活动中的云服务器会提示“新人专享”&#xff0c;那么什么…

Python爬取城市天气数据,并作数据可视化

1.爬取广惠河深2022-2024年的天气数据 import requests # 发送请求要用的模块 需要额外安装的 import parsel import csvf open(广-惠-河-深天气.csv, modea, encodingutf-8, newline) csv_writer csv.writer(f) csv_writer.writerow([日期, 最高温度, 最低温度, 天气,…

EEPROM 磨损管理算法

这里写目录标题 前言需求结构局限性代码示例 前言 …最近工作上有用到EEPROM&#xff0c;在我的应用中需要一分钟一次的擦写频率&#xff0c;按照设备一天工作16h&#xff0c;十年的设备设计寿命来计算&#xff0c;大概要擦写300万次。超出了一般的EEPROM擦写循环次数100万。 …

【前端 - CSS】第 17 课 - CSS 特性

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、CSS 三大特性 2.1、继承性 2.2、层叠性 2.3、优先级 3、总结 1、缘起 CSS 是一种用于样式化网页的语言&#xf…

无代码开发smardaten与Power Platform详细对比

文章目录 前言&#xff1a;亟待转型的软开创业者什么是低/无代码居高不下的企业级软件搭建成本1. 开发周期较长2. 在需求明确、软件修改、系统集成等方面存在多种卡点3. 数据管理混乱 无代码/低代码开发&#xff0c;时代的潮流无代码平台 smardaten1. smardaten 简介2. smardat…

一起看 I/O | 将 Kotlin 引入 Web

作者 / 产品经理 Vivek Sekhar 我们将在本文为您介绍 JetBrains 和 Google 的早期实验性工作。您可以观看今年 Google I/O 大会中的 WebAssembly 相关演讲&#xff0c;了解更多详情: https://youtu.be/RcHER-3gFXI?t604 应用开发者想要尽可能地在更多平台上最大限度地吸引用户…

高阶智驾进入「普及」周期,这四家车企包揽年度方案创新奖

特斯拉、理想等新能源汽车头部企业推动的NOA高阶智能驾驶上车潮&#xff0c;正在席卷整个汽车行业。包括吉利、广汽、长安、红旗等头部自主品牌也在加速推进&#xff0c;同时&#xff0c;在NOA、电子电气架构、数据闭环平台等方面&#xff0c;实现科技平权。 6月8-9日&#xff…

三菱FX3U中级课程-模拟量与PID

可别小看FX3U&#xff0c;它的功能比西门子200smart要强大&#xff0c;对于使用三菱PLC的设备&#xff0c;很多小型设备都可以用FX3U来做。 ​​ 三菱FX3U模拟量与PID 课程章节 第一节课 必须知道的模拟量理论知识 - 大白话讲解00:50:33 第二节课 通过测量空压机的压力才学习…

不确定 A Survey of Uncertainty in Deep Neural Networks(乱记)

随着深度学习技术的不断发展&#xff0c;DNN模型的预测能力变得越来越强&#xff0c;然而在一些情况下这却并不是我们想要的&#xff0c;比如说给模型一个与训练集完全不相关的测试样本&#xff0c;我们希望模型能够承认自己的“无知”&#xff0c;而不是强行给出一个预测结果&…

【深度学习】1 感知机(人工神经元)

认识感知机 感知机接收多个输入信号&#xff0c;输出一个信号 感知机的信号只有“流/不流”(1/0)两种取值 0对应“不传递信号”&#xff0c;1对应“传递信号”。 输入信号被送往神经元时&#xff0c;会被分别乘以固定的权重。神经元会计算传送过来的信号的综合&#xff0c;只有…

云平台 stm32连接oneNET保姆级别教学只看这一篇就够了~

1 注册账号 oneNET点击直达 如图点击右上角开发者中心 点击多协议接入 点击添加产品 如下图设置参数 点击立即添加设备 点击添加设备 如下图设置参数 点击右边的详情查看设备ID和鉴权信息 点击产品概况获取 产品ID 平台注册告一段落 你现在拥有了一个oneNET账号 设备ID …

easycode-自定义的模板-类型对应问题

一、遇到的问题 1、mysql数据库中有些字段没有生成到 在图形工具中修改了表结构 &#xff0c;增加了字段&#xff0c;这个时候要在idea中刷新下数据库 2、数据库中有tinyint 类型的字段&#xff0c;生成代码后mapper.xml中jdbcType总是BYTE&#xff0c;但是mybatis中并没有BYT…

echarts分割柱形图实现渐变电量效果柱状图

先看下效果图是这个样子的 &#xff0c;和普通的柱状图最明显的区别就是需要做成类似于电池格电量显示效果。 目录 1、官网找例子 2、改造示例 3、全部代码 4、初始效果和完成效果对比 1、官网找例子 首先到Echarts官网找到基础的柱状图 官网初始option 我们将option复制到…

一文教你彻底学会IIC协议

一文教你如何看懂I2C协议 一.序言二.IIC读写过程2.1主机向从机写入数据2.2主机向从机读取数据2.3 I2C起始信号和停止信号 三. 数据的有效性四.时序要求4.1 起始信号4.2 终止信号4.3 应答信号4.4 非应答信号读取数据五.代码实例 结语 一.序言 背景知识&#xff1a;I2C总线上是通…