分类目录:《机器学习中的数学》总目录
相关文章:
· 梯度下降法(Gradient Descent)
· 随机梯度下降(Stochastic Gradient Descent, SGD)
· 牛顿迭代法(Newton‘s Method)
· 拟牛顿法(Quasi-Newton Methods)
· Momentum(Gradient Descent with Momentum, GDM)
· Nesterov Momentum
· AdaGrad
· RMSProp
· Adam(Adaptive Moments)
· 共轭梯度法(Conjugate Gradient)
· 遗传算法(Genetic Algorithm)
· 粒子群算法
\qquad
· 基础知识
\qquad
· 带惯性权重的粒子群算法
\qquad
· 改进的粒子群算法
· 模拟退火算法(Simulated Annealing,SA)
为了改善基本粒子群算法的收敛性能,Shi和Eberhart在1998年IEEE国际进化计算学术会议上发表的题为《A modified particle swarm optimizer》的论文中引入了惯性权重,逐渐地大家都默认这个改进粒子群算法为标准的粒子群算法。
在基本粒子群算法的速度公式上可见右边项包括了三部分:第一部分是粒子之前是速度;第二部分和第三部分是粒子对速度的调整。如果没有后面两部分,粒子将会保持相同的速度朝一个方向飞行,直到到达边界,这样粒子很大可能会找不到优解,排除优解在粒子飞行的轨迹上,但这种情况是很少的。此外,如果没有第一部分,粒子的飞行速度将仅由它们当前位置和历史最好位置决定,则速度自身是无记忆的。假定刚开始粒子 i i i处于较优位置,那么粒子的飞行速度将会是0,即它会保持静止状态,直到其他粒子找到比粒子 i i i所处位置还要好的优解,从而替代了全局最优。此时,每个粒子将会飞向它自身最好位置和群体全局最好位置的权重中心。所以可以想象到如果没有第一部分,粒子群算法的搜索空间将会随着进化而收缩。此时只有当全局最优在初始搜索区间时,粒子群算法才可能找到解。所以最后解非常依赖于初始群体。当没有第一部分时,此算法更像是局部最优算法。
对于不同的问题,局部最优能力和全局最优能力的权衡也不一样。考虑到这个问题。并结合以上的分析,Shi和Eberhart添加了一个惯性权重到速度更新公式,即:
v
i
d
k
+
1
=
w
v
i
d
k
+
c
1
r
1
(
p
i
d
−
z
i
d
k
)
+
c
2
v
2
(
p
g
d
−
z
i
d
k
)
v_{id}^{k+1}=wv_{id}^k+c_1r_1(p_{id}-z_{id}^k)+c_2v_2(p_{gd}-z_{id}^k)
vidk+1=wvidk+c1r1(pid−zidk)+c2v2(pgd−zidk)
位置更新公式与粒子群算法的位置更新公式相同。惯性权重
w
w
w起着权衡局部最优能力和全局最优能力的作用。下图表明粒子如何调整它的位置:
图中,
z
k
z^k
zk为当前的搜索点,
z
k
+
1
z^{k+1}
zk+1为调整后的搜索点,
v
k
v^k
vk为当前的速度,
v
k
+
1
v^{k+1}
vk+1为调整后的速度,
v
pbest
v_{\text{pbest}}
vpbest为基于pbest
的速度,
v
gbest
v_{\text{gbest}}
vgbest为基于gbest
的速度。
为了观察这个惯性权重对粒子群算法性能的影响,Shi和Eberhart把此算法应用到Schaffer’s f6函数中,因为这个函数是比较著名的评价优化算法的基准函数。他们改变惯性权重的大小,通过这个函数是比较著名的评价优化算法的基准函数。他们改变惯性权重的大小,通过大量的实验得到一些结论。当惯性权重较小时(<0.8),如果粒子群算法能够找到全局最优的话,那么它所经历的搜索时间是很短的,即所有的粒子趋向于快速汇集在一起。如果优解是在最初搜索空间内,粒子群算法将会很容易找到全局最优,否则它会找不到最优。当惯性权重较大时(>1.2),粒子群算法更像全局搜索方法,且它总是搜索新的区域。当然,这时的粒子群算法会需要更多的迭代来达到全局最优,且更可能找不到全局最优。当惯性权重适中时,粒子群算法将会有更大的机会找到全局最优,但迭代次数也会比第一种情况要多。
根据这些分析,他们不是把惯性权重设为定值,而是设为一个随时间线性减少的函数,惯性权重的函数形式通常为:
w
=
w
m
a
x
−
w
m
a
x
−
w
m
i
n
iter
max
×
k
w=w_{max}-\frac{w_{max}-w_{min}}{\text{iter}_{\max}}\times k
w=wmax−itermaxwmax−wmin×k
上式中, w m a x w_{max} wmax为初始权重, w m i n w_{min} wmin为最终权重, iter max \text{iter}_{\max} itermax为最大迭代次数, k k k为当前迭代次数。
这个函数使得粒子群算法在刚开始的时候倾向于开掘,然后逐渐转向于开拓,从而在局部区域调整解。这些改进使得粒子群算法的性能得到很大提高。