前面介绍了参数寻优的传统方法,梯度下降,牛顿下降等,传统的参数寻优方法,都是提供了下降的方向和大小参考。如果参数非常多,成千上万个参数,很多峰谷时,有没有较好的方法去估计最优解呢。本文介绍的方法就是在没有下降参考的情况下,如何去估计最优解,其中包括遗传算法,粒子群算法,蚁群算法,都是仿生物学算法。
启发式搜索
启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置搜索直到目标。由部分信息对计算产生推理,个体能够基于经验或者个体经验交流改变搜索方式。不同于穷举搜索(网格法)和随机搜索(模拟退火算法)。
遗传算法
遗传算法(GA)的思想来自于进化论,生物种群具有自我进化的能力,能够不断适应环境,优势劣汰之后得到最优的种群个体。进化的行为主要有选择,遗传,变异,遗传算法希望能够通过将初始解空间进化到一个较好的解空间。
遗传算法的大体步骤:
1. 初始化候选参数集,并编码为基因序列{ 初始化种群,一组参数编码为一个种群个体,共M个种群个体 }。设定进化代数T。
2. 个体评估,计算各个种群个体的适应度{ 适应度描述了该个体对自然环境的适应能力,表征了其个体存活能力和生殖机会}。
3. 选择运算,选择是模拟自然选择,把优秀的个体选择出来{基于适应度},以进行后续的遗传和变异。
4. 交叉运算,交叉是模拟繁殖后代的基因重组。
5. 变异运算,变异是模拟基因突变。
6. 经过选择,交叉,变异,生产下一代群体,重复此过程,直到停止条件。
适应度函数的设计要求(由目标函数而来):
1. 单值,连续,非负,最大化;
2. 合理,一致性;
3. 计算量小。
将目标函数,或者线性变化 Fitness(x)=α∗F(x)+β ,或者幂函数变换 Fitness(x)=F(x)k ,或者指数变换 Fitness(x)=e−α∗F(x) ,或者Goldbery线性拉伸变换 Fitness(x)=(Cmult−1)∗FavgFmax−Favg∗F(x)+Fmax−Cmult∗FavgFmax−Favg∗Favg ,或者 Fitness(x)=⌊n√m⌋F(x),其中m=1+lnT,n为当前进化代数,分子取不大于其内置数据的整数值
遗传算法的优缺点:
1. 通用性强,且简单易于理解。
2. 潜在的并行性。
3. 参数选择经验居多。
4. 搜索速度慢。
粒子群算法
粒子群算法(Particle Swarm Optimization, PSO),是在研究复杂适应系统(Complex Adaptive System, CAS)-鸟群觅食的过程中提出的。
CAS系统的主体(系统成员)具有4个基本特点:(这些特点是粒子群算法发展变化的依据)
1. 主体是主动的,活动的。
2. 主体与环境及其他主体是相互影响、相互作用的,这种影响是系统发展变化的主要动力。
3. 环境的影响是宏观的,主体之间的影响是微观的,宏观与微观要有机结合。
4. 整个系统可能还要受一些随机因素的影响。
鸟群觅食场景:一群鸟随机地找食物,只有一小片区域是有食物的。每个鸟在自己周边蹦跳,然后叫几声,跟同伴交流食物情况。有个鸟说“哎,我这里有吃的”,然后其他鸟都朝着它所在的方向飞,中间停下来再找。重复上面的过程,最后鸟儿都会集中到有食物的地方。其搜索策略是所有参数都向着当前最优参数的区域搜索(搜索目前离食物最近的鸟的周围区域)。
粒子群算法的大体步骤:
1. 初始化参数集 θi=(