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

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

启发式搜索

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

遗传算法

  遗传算法(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)=(Cmult1)FavgFmaxFavgF(x)+FmaxCmultFavgFmaxFavgFavg ,或者 Fitness(x)=nmF(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=WVk+C1rand()(pbestθ)+C2rand()(gbestθ)
   更新位置(参数): θk+1=θk+rVk+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,cjC 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)]βsJk(i)[τis(t)]α[ηis(t)]β0jJk(i)jJk(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={QLk0klij

   其中, ρ(0<ρ<1) 表示边上信息素的蒸发系数, 1ρ 表示信息素的持久系数。 Δτkij 表示第 k 只蚂蚁在本次迭代中留在边 lij 上的信息素。 Q 为正常数, Lk 表示第 k 只蚂蚁在本次周游中所经过的路径的长度。
   4. 是否符合终止条件(迭代次数),若不满足,则清空禁忌表(保留第一个值),保留信息素。返回第2步。
  
   Δτkij 的另外几种形式。
   Δτkij=Qdij0klij
   Δτkij={Q0klij
  包括上面那种,分别称为 antcycle;antquantity;antdensity .信息素与目标函数息息相关,其中 Δτ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 蚁群算法的一些文献资源。

免疫算法

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

小结

  仿生学。
  应用广泛。
  初始集为解集合,而不是单个解。
  复杂系统,由简单规则支配。
  (群体智能领域,自组织:组织力的获得来自系统内部,在没有外界作用下使得系统熵减小的过程,即系统从无序到有序的变化过程。)

你可能感兴趣的:(技术博客)