介绍
是一种搜索算法,常见的几种算法类型:
- 随机搜索: 在不同参数中,对每个参数都随机采样,然后进行组合
- 网格搜索: 在不同参数中,找到所有参数及数值的排列组合
- 粒子群优化:集体信息共享找到最优目标点
- 贝叶斯优化:根据已搜索的点函数值估计真实的目标函数的均值和方差,再构造采集函数,决定迭代采样点。
Why PSO
上文中介绍了几种常见的搜索算法类型,但是网格和随机有两个很明显的缺点:1)效果具有不确定性 2)需要自己不断调参,参数初始化困难。 不过效果上跟贝叶斯是比较类似的
算法介绍
1995年,受到鸟群觅食行为的规律性启发,James Kennedy和Russell Eberhart建立了一个简化算法模型,
经过多年改进最终形成了粒子群优化算法(Particle Swarm Optimization, PSO) ,
也可称为[粒子群算法](https://zh.wikipedia.org/zh-hans/%E7%B2%92%E5%AD%90%E7%BE%A4%E4%BC%98%E5%8C%96)。
idea 来源
来源于鸟群觅食行为,人类对行为研究,发现鸟会通过信息共享来找到最优的目的地。比如一群鸟儿想要在一个森林中找到食物的大概方向,只要每一只鸟儿都沿着特定的方向去寻找食物,然后共享当前的信息,记录下目前搜索的地址和食物量,那么整个鸟群就会通过信息共享来找到食物最多的地方。
所以,其实 pso 的基础是信息的社会共享,而粒子的两个属性:速度 & 位置。最终算法的 6个重要参数是:
假设在一个 D维空间,有n个粒子(也就是搜索目标)那么: 1)第i个粒子的位置是: 2) 第i个粒子的速度距离和方向定义为: 3) 第i个粒子搜索到的最优位置: 4) 群体最优解:
对应的速度更新公式:
位置更新公式如下:
应用
例如,在搜索问题中,有 N 个候选的query,每个query需要考虑 排序模型打分、query质量、query预估点击率、长度等综合考虑,那么:
输入可以: x = <排序模型打分、query质量、query预估点击率、长度>
模型输出: y = x*w
最终就是需要学习一下 w 这个参数。
总结
这个算法其实和 bp 梯度下降是类似的,不过该算法优化起来较为简单,比较适合业务快速尝试迭代。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 28 天,点击查看活动详情