4. 群智能算法简介
“认识世界,建设世界”是人类的一切活动的根本。认识世界靠的是建立模型,建设世界靠的是优化模型。特别是在大数据时代,模型越来越复杂,数据越来越多,优化模型就变得更加重要了。
前面我么说了很多种优化模型的算法以及对应的优化思想,但它们都存在这一些本质上的局限性,单点的计算使得效率很难提高,向改进的方向迭代很容易就会陷入局部最优,而且对目标函数的各种约束大大限制了优化算法的使用范围。所以,在大规模,分布式的情况下,为了取得更好的训练效果,我们必须对多个模型进行优化,这就用到群智能算法了。
群智能的算法有很多种,但大多数都有一个共性,那就是模仿。比如遗传算法的思想来源于生物进化,粒子群算法来源于鸟群,鱼群或者蜂群的运动规律,模拟退火算法来源于物理学,等等。本文并不能穷尽所有群智能算法,所以挑选比较常用且典型的智能优化算法来讨论。
4.1 遗传算法
前面说到的梯度下降法是在单点下进行计算的,但现在计算的数据量非常大,单点计算使得效率很难提高,当梯度下降时,很容易就陷入了局部最优里去,因为梯度下降法是针对凸目标函数的,所以就需要一些更好的算法,在不同的应用场景中使用,而遗传算法属于群智能算法中的一种,针对大规模数据和模型有非常好的效果,且操作和实现都比较简单。因此,本文将着重讲解遗传算法。
遗传算法的思想主要借鉴于达尔文的自然选择进化论和有性生殖的过程。物种进化主要通过遗传变异和生存竞争,在繁殖过程中,染色体交叉重组,或者基因变异带来了形形色色的不同个体。基于此,可以模仿得到遗传算法的计算步骤如下:
- 首先随机化地产生一个初始种群
- 然后根据优化问题的目标函数确定一个适应度函数,计算个体的适应值,适应值代表群体中个体的生存机会
- 根据适应值的大小决定的概率分布来进行选择,适应值越大,该个体遗传到下一代的概率就越大
- 根据特定的交叉概率和交叉方法,生成新的个体
- 根据变异概率和变异方法,生成新的个体
- 由4,5步产生新的种群,返回到2
为了实现算法,我们需对适应度进行计算,一般可以对适应值按比例来分配,也就是按照各个个体适应值的概率来选择,假设每个个体i的适应值为,则它被选取的概率计算公式如下:
父代:00000000001111111111
母代:00011100001100011100
子代:00000000001101011100
如上,便是完成了一次交叉组合及突变。笔者对算法进行了Python代码实现,为了便于可视化,把二进制转换成十进制,如下图代表不同的DNA片段,纵轴表示适应值,对迭代的过程进行可视化,如图4为迭代终止图:
图4
可得该遗传算法能得到的最优解确实为适应值最高的那个点。
4.2 模拟退火算法
在一般的优化问题中,防止算法陷入局部最优解一直是某些算法的难点,对于基于梯度的算法,如果优化的目标函数不是一个凸函数,那它的表现就会很差,因为它非常地容易陷入局部的最优解。如果能在算法达到最优解之后,仍然有一定的概率能在最优解附近选择,继续寻找最优解,就有可能发现目前的解只是局部的最优解,这也是模拟退火算法的一个优点。
模拟退火算法是模仿物理学中的退火现象的。在热力学中,如果一块金属物体被加热到一定程度,撤去外部热源,物体的温度就比日常温度高,热量是从高温物体转向低温物体的,所以金属物体的温度会逐渐降低,这个过程就成为退火。
如图所示,模拟退火算法在找到局部最低点后,并没有停止迭代,而是以一定的概率继续向前走,这个概率根据退火的原理,是越来越小的,由此可以跳出局部最优,进而找到全局最优解。接下来的问题是我们该如何确定这样的概率呢?
温度为 Tk T k 时,在系统退火过程的n个状态中,处于状态 i i 的概率为:
该方程被称为Boltzmann方程。对于两个状态 i,i+1 i , i + 1 :
- 如果对应的能量状态 Ei>Ei+1 E i > E i + 1 ,则接受能量状态从 i i 转到
- 否则,以概率