小科普:机器学习中的粒子群优化算法!
http://blog.itpub.net/31509949/viewspace-2158395/
“梯度下降不会让你成为机器学习的专家”
可能您遇到的大多数的简单线性回归和神经网络的文章都会谈论到梯度下降。在本文中,我将向您介绍一种技术,即粒子群优化(PSO)算法。毫无疑问,梯度下降是一种很好的优化技术,它适用于凸函数和低维空间,但是你还是可以期待一下PSO的
结果。
PSO被认为是蚁群算法、鱼群算法之外的一种群体智能的优化算法。后来它被简化并用于解决优化问题。
PSO使用了一堆叫做蜂群的粒子,这些粒子可以四处移动并探索搜索空间。
这些粒子的运动方向是-
-
粒子自身的先前速度(惯性)
-
与单个粒子最佳已知位置的距离(认知力)
-
远离人群最知名的位置(社会力量)
粒子运动被运动的方向所压倒
基本上,粒子彼此间的共同通讯会使它们聚得更快。该群集不能完全探索搜索空间,但可能会找到更好的解决方案。
粒子群搜索函数的全局最小值
有趣的是,当粒子的个体最佳状态优于群体最佳时,群体运动的总体方向可以在任何时间点改变。这使得许多无序和更多机会接近成本函数的全局最小值。
现在回到现实,PSO相对来说非常容易。
与梯度下降不同,成本函数不可微分的。这是Python中用于模拟这些群粒子的简单实现。令人惊讶的是,你不需要很多数学。它只是简单确定三种不同的速度并计算粒子的适应度。我们尽可能多地迭代。
全居最佳或群体最佳将得到最优价值。
每个粒子都描述一组参数值和初始速度(矢量)。我们只需在成本函数中插入这些值来计算适应度。这将给出我们粒子的适应度。
在每次迭代中,我们计算每个粒子的适应度。获得了群体的最佳适应值,现在我们只需简单地更新速度,即我们之前讨论过的初始速度、认知力和社会力量的结果。
这是一个可以帮助您实现它的代码段。
群体粒子的初始位置是任意的。 为了获得最佳效果,您可以在搜索空间的不同位置生成多个群,以获得最佳效果。