前面介绍了参数寻优的传统方法,梯度下降,牛顿下降等,传统的参数寻优方法,都是提供了下降的方向和大小参考。如果参数非常多,成千上万个参数,很多峰谷时,有没有较好的方法去估计最优解呢。本文介绍的方法就是在没有下降参考的情况下,如何去估计最优解,其中包括遗传算法,粒子群算法,蚁群算法,都是仿生物学算法。
启发式搜索
启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置搜索直到目标。由部分信息对计算产生推理,个体能够基于经验或者个体经验交流改变搜索方式。不同于穷举搜索(网格法)和随机搜索(模拟退火算法)。
遗传算法
遗传算法(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=(θi,1,θi,2,...,θi,n) ,初始速度 Vi ,权重 C1,C2
2. 分别搜索各个参数附近的局部最优解 pbest ,选择历史最好的局部最优解作为当前的全局最优解 gbest 。
3. 更新速度:
Vk+1=W∗Vk+C1∗rand()∗(pbest−θ)+C2∗rand()∗(gbest−θ)
更新位置(参数): θk+1=θk+r∗Vk+1
4. 判断终止条件,不符合则否则重复2,3,4步骤。
其中 W 是惯性权重,表示保持原来速度的惯性。
C1 是跟踪自己历史最优值的权重系数,表示对自身的认识。
C2 是跟踪群体最优的权重系数,表示对整个群体的认识。
rand() 是[0,1]内均匀分布的随机数,表示系统受到的随机影响。
r 是速度的约束系数。
粒子群算法的优缺点:
1. 算法规则简单,容易实现。
2. 收敛速度快,有很多措施避免陷入局部最优。
3. 可调参数少,参数选择有理论支持(Eberhart-A modified particle swarm optimizer)。
蚁群算法
蚁群算法(ACO)是一种模拟蚂蚁觅食行为的模拟优化算法,其基本思想是:当蚂蚁沿着一条路径到达终点以后会马上返回来,这样,短的路径蚂蚁往返一次的时间就短,意味着重复频率快,因而在单位时间内走过的蚂蚁数量就多,洒下的信息素也就多,自然会有更多的蚂蚁被吸引过来,从而洒下更多的信息素;而长路径则相反,因此最后越来越多的蚂蚁集中到了较短的路径上,最短路径也就近似找到了。
信息素:蚂蚁留在路径上用于间接交流的物质,可挥发,。信息素多的地方显然经过的蚂蚁多,也会吸引更多的蚂蚁过来。
正反馈:在某一路径走过的蚂蚁越多,信息素越多,蚂蚁选择该路径的概率越大。
例子:由蚁群算法解决TSP(Traveling Salesman Problem)问题。TSP问题,在多个城市中,找到访问完所有城市的最短路径。设 C=c1,c2,...cn 为 n 个城市的集合; L=lij|ci,cj∈C 是 C 中元素两两连接的集合,代表城市之间的路径; dij 表示城市 ci,cj 之间的距离。 G=(C,L) 是一个结构图。
蚂蚁系统中的人工蚂蚁特点:
1. 蚂蚁依据某一概率函数选择下一步要到的城市,该概率函数是城市间距离 dij 和边上的信息素 τij(t) 的函数。 τij(t) 表示 t 时刻在边 lij 上的信息素。
2. 每只蚂蚁只允许走合法路径(除非是一次周游,返回起点),不允许走已经访问过的城市。该过程由禁忌表 tabuk 来控制,蚂蚁 k 经过城市 ci 后,将其加入到禁忌表中,下次走时不能走禁忌表中的城市。 tabuk(s) 表示蚂蚁所走过的第 s 个城市。
3. 完成一次周游后,蚂蚁在其访问过的每一条边上留下相应的信息素。
蚁群算法解决TSP问题的大体步骤:
1. 初始化
1.1 位置初始化,将 m 只蚂蚁随机地放到 n 个城市每只蚂蚁的禁忌表的第一个元素设置为其当前所在城市。
1.2 信息素初始化,信息素量设为 τij(0)=常数 。
2. 路径查找
2.1 下一步路径查找,根据概率 pkij(t) 计算下一步城市,概率 pkij(t) 表示 t 时刻,蚂蚁 k 从城市 ci 转移到城市 cj 的概率。
pkij(t)=⎧⎩⎨⎪⎪[τij(t)]α∗[ηij(t)]β∑s∈Jk(i)[τis(t)]α∗[ηis(t)]β0j∈Jk(i)j∉Jk(i)
其中
Jk(i)=[1,2,3,...,n]−tabuk 表示蚂蚁
k 下一步允许选择的城市。当所有
n 个城市都在禁忌表中后,则蚂蚁
k 完成了一次周游,其所走过的路径
tabuk 是一个可行解。
ηij=1/dij 表示蚂蚁从城市
ci 转移到城市
cj 的期望程度。
α和β 分别分别表示信息素和其的相对重要程度。
2.2 所有蚂蚁查找完一次周游路径。
3. 更新信息素
τij(t+1)=(1−ρ)∗τij(t)+Δτij
Δτij=∑mk=1Δτkij
Δτkij={QLk0若蚂蚁k本次周游经过边lij否则
其中,
ρ(0<ρ<1) 表示边上信息素的蒸发系数,
1−ρ 表示信息素的持久系数。
Δτkij 表示第
k 只蚂蚁在本次迭代中留在边
lij 上的信息素。
Q 为正常数,
Lk 表示第
k 只蚂蚁在本次周游中所经过的路径的长度。
4. 是否符合终止条件(迭代次数),若不满足,则清空禁忌表(保留第一个值),保留信息素。返回第2步。
Δτkij 的另外几种形式。
Δτkij=⎧⎩⎨Qdij0若蚂蚁k本次周游经过边lij否则
Δτkij={Q0若蚂蚁k本次周游经过边lij否则
包括上面那种,分别称为
ant−cycle;ant−quantity;ant−density .信息素与目标函数息息相关,其中
Δτij 表征了代价的大小。
蚁群算法的优缺点:
1. 蚁群算法是一种自组织算法,基于简单规则(多样性和正反馈规则,前者表现创造力,后者是学习强化能力)。
2. 并行性。
3.
正反馈,引导系统向着最优解方向进化。
4. 对初始路线要求不高。
5. 参数初始选择原则暂无理论支持。
6. 搜索时间较长。
7. 会陷入局部解,停滞现象。
http://blog.163.com/ykn_2010/blog/static/1420333362012111411258466/ 一个蚁群算法的介绍博客。
http://www.ailab.cn/algorithm/ant/201110015765.html 蚁群算法的一些文献资源。
免疫算法
免疫算法是改进了遗传算法的退化问题,因为遗传算法的交叉和变异算子是固定的。
小结
仿生学。
应用广泛。
初始集为解集合,而不是单个解。
复杂系统,由简单规则支配。
(群体智能领域,自组织:组织力的获得来自系统内部,在没有外界作用下使得系统熵减小的过程,即系统从无序到有序的变化过程。)