关于粒子群优化的内容可以通过搜索得到。
下面主要是个人对于粒子群优化的一点理解,以及应用于BP神经网络中做权重的调整
原文在:
http://baike.baidu.com/view/1531379.htm
引用下面一些内容
===============我是引用的分界线=================
粒子根据如下的公式来更新自己的速度和新的位置
v[] = w * v[] + c1 * rand() * (pbest[] - present[]) + c2 * rand() * (gbest[] - present[])
present[] = persent[] + v[]
v[] 是粒子的速度, w是惯性权重,persent[] 是当前粒子的位置. pbest[] and gbest[] 如前定义 rand () 是介于(0, 1)之间的随机数. c1, c2 是学习因子. 通常 c1 = c2 = 2.
===============我是引用的分界线=================
一般用X表示粒子的位置,V表示粒子的速度
X和V都是向量,因此很容易地就会和BP神经网络的权重联想到一起。
在看PSO和BP神经网络如何结合起来使用的过程中,我一直比较疑惑的就是到底是让X代替权重,还是用V代替权重。或者是用X和V的乘积的。经过多方面的探讨,基本达成共识的就是 用X代替权重。
因为一个粒子就代表了一组权重,如果只是利用一个粒子的话。。。那么gbest[]和pbest[]就没有多大的意义了,起码是只要一个就可以了。因此很多人就把粒子的数目做成10-30个之间。也就是这个结合PSO的BP神经网络有10-30组权重了。一般意义上的BP神经网络就只有一组权重而已。那么这种思想对于神经网络来说就是不只是依赖一组权重来进行最优解的搜索,而是利用多组权重来进行搜索。这样能跳出局部最小的机会已经大了很多了。非常不错的思想。不过计算量已经比一般的BP大很多了,起码变量已经比原来的多了。不过庆幸的是这些变量都是可控制的向量。需要调整的只是几个参数而已。
研究粒子群优化(Partical Swarm Optimization - PSO) 主要是因为之前做的BP神经网络在维度达到100多的时候很容易陷入局部最小,所以不得不考虑如何优化了。
本来想用模拟退火算法来做权重的调整的。但是看了粒子群优化(Partical Swarm Optimization - PSO) 之后觉得这种思想更优。到底是哪里更好了?呵呵。说不出。只是一种感性的理解罢了。
PS:
我毕竟不是学数学的,我毕竟不是读计算机的,神经网络里面包含的思想与理论很多时候都超出了我的理解。神经网络这么多年的发展,这么多前辈的努力成果,不是我等小辈能马上明白的。顿时感觉压力很大。但是当我对他产生了强烈的兴趣的时候,一种无形的力量驱动着我去不断地去求知。不为什么,只为我喜欢的,我就是想知道。^_^
2008.08.30 更新
居然现在才搜索到一个系列的文章出来,看完之后更加肯定了我之前的理解了。
有兴趣的朋友也去看看吧。
粒子群算法研究
转载于:https://www.cnblogs.com/TtTiCk/archive/2008/08/28/1278523.html