我们讲一个内容不仅仅把数学的概念同生活的智慧联系在一起,而是可以用数学来指导你做决定。我会用数学中的模拟退火算法,来跟你说说,为什么年轻人应该多出去闯闯,而年纪大以后,就应该更加专注自己的赛道。如果我们把人生当作爬坡的过程来说,那么谁开始都不是完美的,但是通过自己的不断努力提升自己,最后的目标,就是达到自己可能达到的最高的位置。这个人生的成长过程,很像数学问题中找到一个函数的最高点。比如说,我们要找一个函数y=−x^2+2x的最大值,这个函数的曲线,像是一个小山的抛物线。
我们如何找到这个曲线的最高点呢?一个最直接的方法就是求导数的方法,然后可以令导数为0,这样解出的方程就可以对应最高点的位置。这个例子中确实可以用求导数的方法。但是实际中,如果函数复杂一点,或者函数本身不可导,甚至明确的表达式不存在,那我们就需要数值解(numerical solution)了。数值解法有很多类方法,其中一种叫做爬山法。爬山法顾名思义,就像一个人爬山一样。当一个人爬一座陌生的山时,只需要时刻保证自己的位置比前一刻高,就能够最后爬到山顶。就算法而言,这个算法每次都从当前的位置附近,随机选一个位置,如果这个位置比当前的位置更高,就来到新的这个位置,反之重新再选择一次。以此类推,经过多轮迭代,我们可以找到整个函数的最高点。但是爬山法有一个很大的问题。我们来看一个形状稍微复杂一点的曲线,这个曲线有两个山峰,右边的山峰更高。如果初始值的位置在左边高点的山脚位置,那么经过多次迭代,一定会收敛到第一个矮的山峰处,这个数学上称之为局部最高点(local maximum)。之所以爬山法找到的是局部最高点,因为这个位置比周围的点都要高。而真正的全局最高点(global maximum)在右边那个更高的山峰处。也就是说,当函数的形式比较复杂的时候,用爬山法可能会陷入局部最高点。
这个也不难理解,试想一下,如果你在大雾天爬山的时候,因为视野有限,你按照爬山法,每次都要求比前一时刻更高,那么你很可能最后到达的是一个小山坡。虽然小山坡比周围的位置都要高,但距离真正的山顶还差得很远。那么爬山法这个问题该如何解决呢?我们首先分析一下为什么会出现这个问题。之所以算法不能从局部最高点跳出来,就是因为它每一步都试图比上一步要高。如果局部最高点的时候,我们可以接受右侧比它更低的点的位置,它就有可能来到那个更高的山峰的山脚下,从这个点迭代,就可以跳出局部最大值而到达全局最大值。换句话说,之所以这些数值解法会陷入局部最大值,是因为它们不能接受暂时的性能下降,每一步都追求性能提高。因此解决的思路就很直接了:接受暂时的不太完美,才有可能换取到一个更好的未来。
这就好比很多人在换工作的时候都一定要下一份工作的工资比当前的高。但如果新的公司的行业前景更好,那么更好的选择或许是应该接受当前薪资的退步,从而在以后达到一个更高的高度。那么如何接受这种不完美呢?爬山法利用了随机:具体来说,如果在当前位置的周围随机找到了一个点,该点的位置高度不如当前位置的话,那么我们也以一定的概率接受这个位置。这种随机,就是英国经济学家蒂姆·哈福德(Tim Harford)在他的畅销书《混乱》里所描述的“混乱”。哈福德说,“意外情况会扰乱我们的日常工作或生活,但是如果我们能够积极发挥我们的创造力,便能转悲为喜。意外的出现虽然导致艺术家、科学家和工程师们从山峰跌入谷底,一旦我们离开自己的山峰,来到一个新的谷底,便能化腐朽为神奇”。
我们已经知道了利用随机性,来接受暂时的不完美,以避免陷入局部最优点。现在我们还有最后一个问题要解决:这个接受不完美的随机概率大小,应该是多少呢?上世纪70年代末和80年代初,IBM的沃森实验室的两个科学家柯克帕特里克(S.Kirkpatrick)和格拉特(C.D.GelattJr)在研究优化算法的时候,从物理学得到了启发,发明了一个算法,叫做模拟退火算法(simulated annealing algorithm)。我们先说说退火(annealing)。我们都听说过淬火,就是铸造宝剑时师傅把烧得通红的宝剑丢入水里。淬火过程中金属会在液体中快速冷却,从而让宝剑的硬度大大提高。淬火是一种大家最熟悉的冷却工艺。除了“淬火”之外,还有一种冷却工艺,就是我们说的退火。退火的冷却速度比淬火慢得多。退火通过缓慢降低金属的温度,可以使金属内部组织达到或接近平衡状态,帮助金属内部释放应力、增加材料延展性和韧性,获得良好的工艺性能和使用性能。柯克帕特里克对于退火有一个洞见。他解释道,在退火过程中材料冷却的速度会对其内部结构产生很大的影响。而在物理学中,“温度”和“随机性”是对应的:温度越高,随机运动越大。那么退火过程,就代表着一种随机性从高到低的衰减。既然退火过程最终可以使得所有的金属晶体达到一个完美的平衡状态,那么爬山算法中的随机性,也应该随着时间不断降低。
具体来讲,在开始的时候,我们以较大的概率接受不完美,也就是下一刻的位置比当前的位置要低,但随着时间推移,这个接受不完美的概率应该慢慢变小。这就是模拟退火算法。模拟退火算法这个思想,被柯克帕特里克和格拉特发表在1983年的《科学》杂志上,文章的标题是《基于模拟退火的优化算法》“Optimization by Simulated Annealing”。模拟退火算法的效果令人吃惊地好:发表在《科学》的这篇文章中用模拟退火算法设计出了更好的芯片布局,而现在模拟退火算法已经成为优化算法中的一个经典算法。学完了模拟退火算法,我们就可以回答开始的那个问题。为什么年轻的时候应该去大城市闯一闯,并且应该多尝试一些职业呢?
首先,人生其实就是一个寻找最优解的过程。开始谁都不是完美的,但是我们通过不断努力,不断提升自己,最后的目标,就是达到自己可能达到的最优位置。这个过程,和爬山法的思想是一致的。在不断进步的过程中,很自然的一个选择,就是你要求自己在人生中的每一步,都要追求比前一步更优。例如很多人在换工作的时候,都要求下一份工作的工资比当前的要高,或者更稳定。这种选择看起来很自然,但是算法告诉我们,这种每一步都要求比上一步好的策略,容易让自己陷入局部最高点:你选择了一个工资更高,或者更稳定的行业,这导致你错过了另外一个虽然现在看起来不太靠谱,但是发展潜力巨大的赛道。解决的方法,就是引入随机性:以一定概率接受暂时的不完美,就可以有效地避免陷入局部最优点。这种随机性,就对应着去大城市闯一闯,多尝试各种职业,找到自己的兴趣和潜力所在,而不是安安稳稳地在一个职业上终老。
而模拟退火算法则进一步告诉我们,这个随机性应该随着你的年龄慢慢降低。当你年轻的时候,可以让这个随机性最强,充分地探索,让自己接受暂时的不完美,从而能够避免陷入局部的最优值,而在将来跃上一个更高的山峰。而到年龄大了以后,当你知道自己最适合什么以后,你就要控制随机性了,你应该在自己最适合的地方深耕,而不要轻易切换赛道。