PSO搜参

文章目录

  • 算法思想
  • pso算法
    • 参数
    • 粒子更新公式:
  • 伪代码
  • 总结
    • 参考文献

论文地址:https://www.semanticscholar.org/paper/A-new-optimizer-using-particle-swarm-theory-Eberhart-Kennedy/8263efcbc5e6b3c7c022b1131038b888babc8548

算法思想

  PSO(Particle Swarm Optimization ,粒子群优化算法)算法的思想来源于对鸟群的捕食行为的观察。

  设想这样一个场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在哪里,但是他们鼻子够灵,知道当前的位置离食物还有多远,那么找到食物的最优策略是什么呢?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

  PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),我个人喜欢把这个值叫做损失值(loss),由损失函数求出。每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

  对模型参数,初始化为一群随机粒子(随机解),也可以根据经验或已有的实验初始化粒子。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个"极值"来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

pso算法

参数

  超参数包括:粒子个数m,参数个数n,参数上界限ub(如果有的话),参数下界限lb(如果有的话),迭代次数iter,以及损失函数中可能存在的超参数。

  PSO需要参数如下:

size 解释
x m × n m\times n m×n 粒子位置,每一行表示一个粒子在参数空间的向量表示,其中向量的每一个值,就表示一个参数
v m × n m\times n m×n 粒子位置更新的速度
pbest m × n m\times n m×n particle best,每一行记录每一个粒子搜索过的loss最小的位置
ploss m m m particle loss,记录每一个粒子的最小loss
gbest n n n group best,记录搜索过的最优(loss最小)的粒子位置
gloss 1 1 1 group loss,记录搜索过的最优(loss最小)的粒子的loss值

粒子更新公式:

  在找到这两个最优值时,粒子根据如下的公式来更新自己的速度和新的位置:
v = v + c 1 ∗ r a n d ∗ ( p b e s t − x ) + c 2 ∗ r a n d ( ) ∗ ( g b e s t − x ) v = v + c1 * rand * (pbest - x) + c2 * rand() * (gbest - x) v=v+c1rand(pbestx)+c2rand()(gbestx)

x = x + v x = x + v x=x+v

  这是最标准的pso,第一部分称为【记忆项】,表示上次速度大小和方向的影响;第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式

伪代码

initialize x,v,pbest,ploss=inf,gbest,gloss=inf
for each iter
	for each particle i
		calculate loss(i) //损失函数
		update pbest(i),  ploss(i), gbest, gloss
		update v by PSO formula
		x = x+v
		 //cut off v and x by lb and ub
print gbest

总结

  pso并不难理解,实现起来也不复杂,当然pso还有很多变形。pso可以对一群参数进行搜参,搜参效率更高。但在搜参同时,也会引入一些其它的超参数。

参考文献

保密

你可能感兴趣的:(机器学习)