模拟退火算法用于求解全局最优解。鸡汤式的说法是:
要敢于跳出舒适区。
当我们在一个局部最优解附近扰动的时候,如果只根据目标函数是否增长来决定是否要移动,那就有可能停在局部最优。
局部最优可以理解成我们通常的舒适区。习惯了当前的状态,有点小扰动,还是习惯性地回到舒适区。那么你这一辈子就可能止步于此。
想要有可能到达更好的位置,就要冒险。哪怕当前的举措会导致利益受损,也要勇于跳出舒适区。
注意只是有可能,有可能更好,也有可能更差。光讲道理是不够的,要量化。
鸡汤和干货的区别就在于有没有数学。
我们考虑最小化问题
我们在当前的解 领域附近随机选择一个点
, 如果函数值下降了,我们当然就移动到
。这是 naive 的随机扰动算法。模拟退火算法是说,即便函数值上升了,我们仍然要以一定的概率移动到
。
怎么选取移动的概率?这个是模拟退火算法名字的来源。
模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。
来源:百度百科
按照热力学的原理,在当前温度 T 下,出现能量差为 df 的降温概率为
对同样的能量差,温度越低,概率越小。同样的温度,能量差越大,概率越小。慢慢地把温度减小到零,就不会跳出当前的最低能量态。
这里温度就成了最关键的参数。常用的公式是:
其中是和问题相关的参数,要足够大,能够跳出局部最优。k 是迭代步数。
Hajek 1988 年证明了这样的选择能够保证算法收敛到全局最优。
这个是理论上的保证。收敛是可以收敛,要多长时间就不知道了,等到天老地荒也是有可能。所以在实际中,能否在可以等待的时间里收敛到全局最优,就要看运气了。
是的,要看运气,因为这是一个随机算法。