您的位置:首页 > 其它

参数寻优:启发式搜索方法

2015-08-24 23:12 323 查看
  前面介绍了参数寻优的传统方法,梯度下降,牛顿下降等,传统的参数寻优方法,都是提供了下降的方向和大小参考。如果参数非常多,成千上万个参数,很多峰谷时,有没有较好的方法去估计最优解呢。本文介绍的方法就是在没有下降参考的情况下,如何去估计最优解,其中包括遗传算法,粒子群算法,蚁群算法,都是仿生物学算法。

启发式搜索

  启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置搜索直到目标。由部分信息对计算产生推理,个体能够基于经验或者个体经验交流改变搜索方式。不同于穷举搜索(网格法)和随机搜索(模拟退火算法)。

遗传算法

  遗传算法(GA)的思想来自于进化论,生物种群具有自我进化的能力,能够不断适应环境,优势劣汰之后得到最优的种群个体。进化的行为主要有选择,遗传,变异,遗传算法希望能够通过将初始解空间进化到一个较好的解空间。

  遗传算法的大体步骤:

  1. 初始化候选参数集,并编码为基因序列{ 初始化种群,一组参数编码为一个种群个体,共M个种群个体 }。设定进化代数T。

  2. 个体评估,计算各个种群个体的适应度{ 适应度描述了该个体对自然环境的适应能力,表征了其个体存活能力和生殖机会}。

  3. 选择运算,选择是模拟自然选择,把优秀的个体选择出来{基于适应度},以进行后续的遗传和变异。

  4. 交叉运算,交叉是模拟繁殖后代的基因重组

  5. 变异运算,变异是模拟基因突变

  6. 经过选择,交叉,变异,生产下一代群体,重复此过程,直到停止条件。

  适应度函数的设计要求(由目标函数而来):

  1. 单值,连续,非负,最大化;

  2. 合理,一致性;

  3. 计算量小。

  将目标函数,或者线性变化Fitness(x)=α∗F(x)+βFitness(x)=\alpha * F(x) + \beta,或者幂函数变换Fitness(x)=F(x)kFitness(x)=F(x)^{k},或者指数变换Fitness(x)=e−α∗F(x)Fitness(x)=e^{-\alpha * F(x)},或者Goldbery线性拉伸变换Fitness(x)=(Cmult−1)∗FavgFmax−Favg∗F(x)+Fmax−Cmult∗FavgFmax−Favg∗FavgFitness(x)=\frac {(C_{mult}-1)*F_{avg}}{F_{max}-F_{avg}}*F(x)+\frac{F_{max}-C_{mult}*F_{avg}}{F_{max}-F_{avg}}*F_{avg},或者Fitness(x)=⌊n√m⌋F(x),其中m=1+lnT,n为当前进化代数,分子取不大于其内置数据的整数值Fitness(x)=\frac{\left \lfloor \sqrt[m]{n}\right \rfloor } {F(x)}, 其中m=1+\ln {T}, 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) \theta_{i}=(\theta_{i,1}, \theta_{i,2}, ... , \theta_{i, n}) ,初始速度ViV_{i},权重C1,C2C_{1}, C_{2}

  2. 分别搜索各个参数附近的局部最优解pbestp_{best},选择历史最好的局部最优解作为当前的全局最优解gbestg_{best}。

  3. 更新速度:

  Vk+1=W∗Vk+C1∗rand()∗(pbest−θ)+C2∗rand()∗(gbest−θ)V^{k+1}=W*V^{k}+C_{1}*rand()*(p_{best}-\theta)+C_{2}*rand()*(g_{best}-\theta)

   更新位置(参数):θk+1=θk+r∗Vk+1\theta^{k+1} = \theta^{k} + r*V^{k+1}

  4. 判断终止条件,不符合则否则重复2,3,4步骤。

  其中WW是惯性权重,表示保持原来速度的惯性。

  C1C_{1}是跟踪自己历史最优值的权重系数,表示对自身的认识。

  C2C_{2}是跟踪群体最优的权重系数,表示对整个群体的认识。

  rand()rand()是[0,1]内均匀分布的随机数,表示系统受到的随机影响。

  rr是速度的约束系数。

  粒子群算法的优缺点:

  1. 算法规则简单,容易实现。

  2. 收敛速度快,有很多措施避免陷入局部最优。

  3. 可调参数少,参数选择有理论支持(Eberhart-A modified particle swarm optimizer)。

蚁群算法

  蚁群算法(ACO)是一种模拟蚂蚁觅食行为的模拟优化算法,其基本思想是:当蚂蚁沿着一条路径到达终点以后会马上返回来,这样,短的路径蚂蚁往返一次的时间就短,意味着重复频率快,因而在单位时间内走过的蚂蚁数量就多,洒下的信息素也就多,自然会有更多的蚂蚁被吸引过来,从而洒下更多的信息素;而长路径则相反,因此最后越来越多的蚂蚁集中到了较短的路径上,最短路径也就近似找到了。

  信息素:蚂蚁留在路径上用于间接交流的物质,可挥发,。信息素多的地方显然经过的蚂蚁多,也会吸引更多的蚂蚁过来。

  正反馈:在某一路径走过的蚂蚁越多,信息素越多,蚂蚁选择该路径的概率越大。

  例子:由蚁群算法解决TSP(Traveling Salesman Problem)问题。TSP问题,在多个城市中,找到访问完所有城市的最短路径。设C=c1,c2,...cnC={c_{1}, c_{2}, ... c_{n}}为nn个城市的集合;L=lij|ci,cj∈CL={l_{ij}|c_{i},c_{j} \in C}是CC中元素两两连接的集合,代表城市之间的路径;dijd_{ij}表示城市ci,cjc_i,c_j之间的距离。G=(C,L)G=(C,L)是一个结构图。

  蚂蚁系统中的人工蚂蚁特点:

  1. 蚂蚁依据某一概率函数选择下一步要到的城市,该概率函数是城市间距离dijd_{ij}和边上的信息素τij(t)\tau _{ij}(t)的函数。τij(t)\tau _{ij}(t)表示tt时刻在边lijl_{ij}上的信息素。

  2. 每只蚂蚁只允许走合法路径(除非是一次周游,返回起点),不允许走已经访问过的城市。该过程由禁忌表tabuktabu_{k}来控制,蚂蚁kk经过城市cic_i后,将其加入到禁忌表中,下次走时不能走禁忌表中的城市。tabuk(s)tabu_{k}(s)表示蚂蚁所走过的第ss个城市。

  3. 完成一次周游后,蚂蚁在其访问过的每一条边上留下相应的信息素。

  蚁群算法解决TSP问题的大体步骤

  1. 初始化

   1.1 位置初始化,将mm只蚂蚁随机地放到nn个城市每只蚂蚁的禁忌表的第一个元素设置为其当前所在城市。

   1.2 信息素初始化,信息素量设为τij(0)=常数\tau_{ij}(0)=常数。

  2. 路径查找

   2.1 下一步路径查找,根据概率pkij(t)p_{ij}^{k}(t)计算下一步城市,概率pkij(t)p_{ij}^{k}(t)表示tt时刻,蚂蚁kk从城市cic_i转移到城市cjc_j的概率。

  
pkij(t)=⎧⎩⎨⎪⎪[τij(t)]α∗[ηij(t)]β∑s∈Jk(i)[τis(t)]α∗[ηis(t)]β0j∈Jk(i)j∉Jk(i)p_{ij}^{k}(t)=\left\{\begin{matrix} \frac {[\tau_{ij}(t)]^\alpha * [\eta_{ij}(t)]^\beta}{\sum_{s \in J_k(i)}[\tau_{is}(t)]^\alpha * [\eta_{is}(t)]^\beta} & j\in J_k(i) \\ 0 & j \notin J_k(i) \end{matrix}\right.  

   其中Jk(i)=[1,2,3,...,n]−tabukJ_k(i)= [{ 1,2,3,...,n }]-tabu_k表示蚂蚁kk下一步允许选择的城市。当所有nn个城市都在禁忌表中后,则蚂蚁kk完成了一次周游,其所走过的路径tabuktabu_k是一个可行解。ηij=1/dij\eta_{ij}=1/d_{ij}表示蚂蚁从城市cic_i转移到城市cjc_j的期望程度。α和β\alpha 和 \beta分别分别表示信息素和其的相对重要程度。

   2.2 所有蚂蚁查找完一次周游路径。

  3. 更新信息素

   τij(t+1)=(1−ρ)∗τij(t)+Δτij\tau_{ij}(t+1)=(1-\rho)*\tau_{ij}(t)+ \Delta \tau_{ij}

   Δτij=∑mk=1Δτkij\Delta \tau_{ij}=\sum_{k=1}^{m} \Delta \tau_{ij}^k

   Δτkij={QLk0若蚂蚁k本次周游经过边lij否则\Delta \tau_{ij}^k = \left\{\begin{matrix} \frac{Q}{L_k}& 若蚂蚁k本次周游经过边l_{ij} \\ 0 & 否则 \end{matrix}\right.

   其中,ρ(0<ρ<1)\rho(0<\rho<1)表示边上信息素的蒸发系数,1−ρ1-\rho表示信息素的持久系数。Δτkij\Delta \tau_{ij}^k表示第kk只蚂蚁在本次迭代中留在边lijl_{ij}上的信息素。QQ为正常数,LkL_k表示第kk只蚂蚁在本次周游中所经过的路径的长度。

  4. 是否符合终止条件(迭代次数),若不满足,则清空禁忌表(保留第一个值),保留信息素。返回第2步。

  

  Δτkij\Delta \tau_{ij}^k的另外几种形式。

  Δτkij=⎧⎩⎨Qdij0若蚂蚁k本次周游经过边lij否则\Delta \tau_{ij}^k = \left\{\begin{matrix} \frac{Q}{d_{ij}}& 若蚂蚁k本次周游经过边l_{ij} \\ 0 & 否则 \end{matrix}\right.

  Δτkij={Q0若蚂蚁k本次周游经过边lij否则\Delta \tau_{ij}^k = \left\{\begin{matrix} Q & 若蚂蚁k本次周游经过边l_{ij} \\ 0 & 否则 \end{matrix}\right.

  包括上面那种,分别称为ant−cycle;ant−quantity;ant−densityant-cycle; ant-quantity; ant-density.信息素与目标函数息息相关,其中Δτij\Delta \tau_{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 蚁群算法的一些文献资源。

免疫算法

  免疫算法是改进了遗传算法的退化问题,因为遗传算法的交叉和变异算子是固定的。

小结

  仿生学。

  应用广泛。

  初始集为解集合,而不是单个解。

  复杂系统,由简单规则支配。

  (群体智能领域,自组织:组织力的获得来自系统内部,在没有外界作用下使得系统熵减小的过程,即系统从无序到有序的变化过程。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: