我们看着太阳东升西落,月亮阴晴圆缺,一年经历春夏秋冬,自然认为世界本质上就是周期性的。我们生活中的很多经验也是周期性的:人有生老病死,经济有热有冷,王朝有兴盛和衰落,我们相信未来出现的局面总能在过去找到相似的局面。我们相信历史经验是有用的,社会是有规律的,我们相信这一切都有“公式”。但其实,根本没有公式可以预测,也没有经验可循。
这里不得不提到美国数学家和气象学家爱德华·洛伦茨。1956年,洛伦茨产生了一个直觉,他觉得天气的变化不可能是周期性的,决心从数学上证明这一点。洛伦茨认为,他不需要直接证明大气系统是非周期性的,只要证明任何一个复杂系统都是非周期性的即可。为此,只要先找到一个比较简单的系统,证明它是非周期性的——那么可想而知,复杂系统就更是非周期性的。
洛伦茨设计了一个系统,也就是大家非常熟悉的洛伦茨吸引子。洛伦茨吸引子没有周期性,更重要的是,洛伦茨吸引子有一个怪异性质,是数学家和物理学家以前从来没想到过的,也就是如果初始值有一点变化,后面就会很不一样……
这是气象学家的噩梦。我们想想,如果要预测天气,你需要方程,需要初始值,然后进行计算机模拟。你的初始值都是对当前天气状况的观测,而你的观测必然会有误差。那如果初始值差一点点,后面的模拟结果就差很多,甚至面目全非。这样的话,这个所谓的模拟还有意义吗?
演化结果对初始值高度依赖的现象,就叫“混沌”(chaos)。洛伦茨发现了混沌。混沌就是混乱,就是不可预测。不管你的计算精度有多高,它总有误差;而任何误差经过一段时间总会被放大到你不认识的程度——混沌系统,总会超出你的预测。
科学家如梦方醒,很快意识到混沌系统其实无处不在:天气是这样的,股市是这样的,人口是这样的,世界本身也是这样的。这就意味着任何科学知识对你的帮助都是有限的,你永远都不可能预测遥远的未来。
混沌的关键特点是系统的初始值稍微变化一点点,后面的演化结果就会非常不同——这意味着最初的误差会被迅速放大,这样的系统将是难以预测和把握的。
这是一种什么局面呢?英文中有一段谚语,正好说明了误差被放大的过程:
因缺一钉,马蹄丢。
因失马蹄,战马丧。
因无战马,骑士亡。
因失骑士,战报没。
因无战报,战役败。
因战失败,国家灭。
一切根源于一颗马蹄钉。
这是典型的多米诺骨牌效应:最初小小的一件事出了错,导致最后巨大的灾难;而如果当初没有那个小错,可能一切都会不同。这样的过程可能发生在任何领域中,这就是混沌系统的可怕之处。
可是,世间大多数王国并没有因为少了一颗钉子而陷落啊!事实上,有些国家在腐败不堪、千疮百孔的情况下都能继续存在很多年,这种情况又怎么算呢?没错,即便是一个混沌系统,也不是到处都充满戏剧性。事实上,大多数复杂系统是非常安全的。
《怀疑的首要性》这本书的一个重要主题就是如何区分安全系统和不安全系统。你首先要知道,即便在洛伦茨吸引子之中,也有很多地方是非常安全的。
混沌系统未来会发生什么,跟初始值的选取范围关系非常密切。很多局面是非常安全的,我们的预测难点是那些不安全的局面。
你可能会说,难以预测也是可以预测的啊!现在计算机算力这么强,对于不安全的局面,如果把初始值的精确度再调高一点,让误差再减小一点,预测的时间范围不就更长了吗?
对洛伦茨吸引子来说,的确如此。但是对于更复杂的系统,精度再高也没用,比如说天气系统。天气预报的原理非常简单,你只要解一个关于地球大气的流体力学问题就能明白其原理。方程是现成的且是无比精确的,也就是纳维-斯托克斯方程。它基于牛顿力学,没有多余的假设,可以精准描述空气和水的运动。你要做的就是把大气中每一个位置的压强、密度、温度和速度输入方程,用计算机求解,然后就可以知道天气接下来会如何演化。
当然,这里面有个计算精度问题。你不可能照顾到每一个空气分子,你总需要构建一个模型。通常的做法是把大气打上方形的三维格子,通过观测给每个格子赋予各种物理量的初始值,然后对这些格子做计算。
气象学家用了几十年的天气预报模型是将格子的边长设定为100千米,这个精度不算太高。所有模型都默认每个小格子内部的大气是均匀的,也就是说,我们假定100千米以内发生的事情都可以忽略不计。我们假定比格子尺度小的物理学对全局没什么大影响。这其实是一个不得已的假定,毕竟你的计算分辨率总是有限的。而这个假定,其实是错的。
流体力学中有这么一种现象,就是小尺度范围内发生的事儿可以剧烈地影响到大尺度的事儿。这就是“湍流”。举个简单的例子。打开家里的自来水龙头,当你把流速控制到比较慢又不是特别慢的时候,你会发现刚出来的水柱可以又光滑又稳定,就好像静止似的。但如果你把水龙头开大,你会发现水流刚离开水管就开始四处飞溅,非常乱,这就是湍流。
物理学家至今都没有彻底想明白湍流到底是怎么回事。纳维-斯托克斯方程在这种复杂局面下的求解非常困难。最重要的是,湍流是流体中的各种漩涡导致的。大漩涡里套着小漩涡,小漩涡里又有更小的结构。也就是说,是小尺度上发生的一些事情导致了大尺度的湍流。要想用计算机模拟湍流,你的模型就必须精确到小尺度才行。对天气预报模型来说,麻烦就在于小尺度的湍流。
湍流现象说明小尺度流体力学是不可忽略的。你的模型把100千米以内的湍流排除在考虑范围之外,那如果这种小尺度湍流原本会导致更大的漩涡,再导致更大的风暴,这个模型不就没考虑这种情况吗?
洛伦茨在1963年发表的一篇论文中首先讲了这个问题。他在1972年的一次会议上提出的“当一只蝴蝶在巴西扇动了一下翅膀,这会不会在得克萨斯州引起一场龙卷风”,说的就是湍流,这就是后来“蝴蝶效应”这个术语的出处。请注意,严格说来,洛伦茨说的这个蝴蝶效应,是比我们前面说的洛伦茨吸引子更不好对付的混沌系统。
洛伦茨吸引子的某些区域的确会剧烈地放大误差,但是如果你最初的测量足够精确,你的计算精度足够高,原则上还是可以尽量延长能准确预测的时间。然而,天气预报里的蝴蝶效应,却是不管你怎么提高精度,你能预测的时间长度也有一个上限。
这个原理是这样的。比如一般气象模型的格子尺度是100千米,这种情况下你能预测未来一个星期的天气变化。你对此很不满意,你说我们现在有更强的计算机和更好的观测设备了,我们完全可以把格子精度提高1倍,达到50千米!那么,我们可预测的时间是否也会提高1倍呢?
洛伦茨认为,不会的。因为这里面有个难以细说的数学理论,简单来说,就是误差在小尺度上增长的幅度更小。把模型精度增加1倍,你可以预测的时间并不会从7天增加到14天——而是只能增加一半,也就是多预测3.5天。现在你可以做10.5天的天气预报。
要把精度再增加1倍呢?那么你可以预测的时间会再延长一半的一半,也就是1/4个7天。以此类推,如果你把模型精度无限提高,你最多能预测的天数就是7(1+1/2+1/4+1⁄16…)天。任何一个学过高等数学的人都知道,括号里无穷级数的和等于2。这也就是说,哪怕你的观测和计算精度是无限的,你的初始误差为0,你最多也只能提前预测14天的天气。
这个可预测天数的上限,就是奇异极限。因为奇异极限的存在,天气系统是比洛伦茨吸引子更可怕的系统。这是因为洛伦茨吸引子只有一个点的x、y、z三个变量,而天气系统中有非常多个变量。我们把洛伦茨吸引子称为“低阶混沌”,把天气这样的系统称为“高阶混沌”。所以这就给预测复杂现象提出了一个根本性的限制,特别复杂的现象本质上来说不可能做长期预测。
考虑到真实世界里的各种系统都更像天气一样复杂,而不是更像洛伦茨吸引子一样简单,我们不得不得出一个无比悲观的结论:世间的事情,本质上是你不可能提前很多天预测到的。不管科技怎么发达,我们也永远都不会知道14天之后的天气。
也就是说,第一,世界本质上是非周期性和不可预测的,你能耐再大也没用;第二,但世界大多数地方在大多数情况下并不是混乱的。就连洛伦茨吸引子上都有相对比较友好的区域,地球轨道几乎就是周期性的,地球上并不是处处天天刮飓风,昨天的经验常常约等于明天的预测。
复杂系统不能做长期的精准预测,但是未来也不能说是一片漆黑的,我们还是可以知道未来发生各种事情的概率。这已经非常有帮助了。
当谈论预测未来的时候
我们必须有概率意识
我们还是先讲天气。天气预报其实有两种。前面说的要精准预报某一天的天气怎么样,那属于短期天气预报,最长期限14天,需要的就是纳维-斯托克斯方程。
还有一种则是中长期天气预报。比如在未来一个月或者一个季度之内,这个地区会发生几场飓风,让你给一个大概的估计,那完全是另一种思路。
气象学家早在100多年前就已经知道,中长期的天气不是一个地区本身所能决定的,会受到全球气候的影响。青藏高原下多少雪会影响印度洋上空的季风,而印度洋上空的季风则会影响欧洲的天气。所以要做中长期天气预报,就必须把整个地球的大气和海洋看作一个整体。
20世纪60年代,气象学家发现了影响地球气候的一个关键区域,那就是太平洋上沿着赤道的一带。在正常年份下,这个区域东部的海水会比较冷,西部会比较暖。可是在有些年份下,海水温度会正好颠倒过来。秘鲁的渔民早就知道哪些年份正常,哪些年份不正常,因为海水温度的异常会导致鱼游去别的地方或者直接死掉。气象学家则注意到,当这个区域的海水温度不正常的时候,全球天气都会受到影响。这种情况的动力学过程大概是这样的:海水温度变化影响太平洋的信风,太平洋的信风影响印度洋季风,印度洋季风影响北大西洋,北大西洋影响全欧洲,最终影响全世界。这就是著名的“厄尔尼诺现象”。
统计表明,你只要看一看赤道附近哪个区域有没有发生厄尔尼诺现象,就能知道未来一个月到一个季度,大西洋上空大概会出现几场飓风。当然,你无法预知具体的一场飓风会发生在哪一天,这毕竟只是个统计结果。但是统计结果也很有用,如果知道飓风马上会增多,我们总可以提前做点准备。这就是中长期天气预报的意义所在:它能给你一个概率。
最初的预测思路完全是统计性的,依赖过去的经验,自己没有什么主动的计算。后来我们这本书的作者帕尔默加入了天气预报领域,他提出中长期天气预报也可以用物理模型。在他的推动下,科学家利用物理模型结合统计事实,做出了很不错的中长期天气预报产品。
这件事把气象学家的思路给打开了。尤其是帕尔默,他认为对短期天气预报也应该这么干。我们应该效法中长期天气预报的做法,对观测值主动制造一些不确定性,把不确定性输入模型。这也有一个现成的方法:蒙特卡洛方法。蒙特卡洛方法是基于概率的。该方法的基本思路非常简单:如果你想预测一件事情的结果,你只要用随机生成的各种输入值,把这件事模拟很多遍,看看你模拟出来的众多结果大概是什么情况。
蒙特卡洛方法在哲学上是一种随机实验,在物理学上是通过人为制造的随机性——噪声,来探索系统的多个可能性,在数学上,它还有一个惊喜:它能减少计算量!也许是因为噪声自动代表了多种可能性,有了噪声,你不用太高的分辨率和预测精度就能得到很不错的计算结果。
比如短期天气模型中的小尺度湍流。我们可以不管一个格子里有没有湍流,也不管湍流是什么样的,随机给它分配一个湍流,然后把各种情况都模拟一遍,取个平均值,就能得到一个很不错的预测。
但帕尔默认为,短期预报所谓的计算,其实是尽最大努力给一个最可能出现的结果,这种方法天然放弃了一些明明也有很大可能但没有被计算到的情形。你既然那么会算,为什么不把所有可能的状态都算一遍呢?
他找到一个特别好的例子。那是英国的一次天气预报,气象学家计算的结果中没有飓风,可后来却发生了破坏性很强的飓风,气象学家遭到了老百姓的嘲讽。帕尔默说这回咱们不算1次,咱们算50次——在每一次计算中把初始值稍微变动一下,给个随机的噪声,看看都有哪些结果。
结果就如书中的图5-2所示。这种图叫“邮票地图”,图中每个小“邮票”代表一次模拟结果。我们看到,50次模拟中有一些场景,真的发生了飓风。现在我们把所有50张“邮票”综合在一起,就可以给出英国各个地区发生飓风的概率有多大,就像书中图5—3显示的那样。可以看到,英国南部地区发生飓风的概率最高的可以达到30%,其他地区则几乎不会发生飓风。
这个结果是概率性的,但是这样的结果对老百姓是很有用的。如果你知道你家所在的地区明天有30%的概率会发生飓风,你大概不会把车停在户外,你可以稍微做点准备,这总比不知道强吧?
蒙特卡洛方法预测的不是一个结果,而是一个结果的集合。帕尔默在1985年开发了第一个集合式的短期天气预报模型,现在所有主流的天气模型已经都是这样的了。这里的操作不关心平均值,而关心各种情形出现的概率。
为什么现在的天气预报往往都会给你一个降雨概率,而不像以前那样直接说下不下雨。承认未来的不确定性并且能把那个不确定性量化给你,这是观念的升级。
其实天气预报这种概率预测有个哲学问题。你算出来的概率,说到底是你模拟的那个集合里发生的概率,那你这个概率岂不是很主观?我换一组预测集合,要是算出另一个概率,究竟哪个是对的呢?这个概率在真实世界的物理意义是什么呢?
比如天气预报说明天下雨的概率是80%,这句话是什么意思?明天难道不是只有一次吗?怎么还会有概率呢?唯一理想的定义是,在天气预报说下雨的概率是80%的那些日子里,事后经统计发现真的有80%的日子下雨了。你给出的概率必须达到这个水平,我们才能相信它是靠谱的。
而要做到这一点非常困难。实践表明,直接用完全随机的噪声生成初始值是不行的——那会低估系统的不确定性,往往预测出来的结果不如真实局面的戏剧性强。为了更接近真实局面,气象学家还必须对预测的初始值做一些手脚,你必须先考虑好哪儿更容易出状况,你得把气象知识结合到初始值的生成之中……那些都是细节问题,这里我们不用考虑。
总而言之,当我们谈论预测未来的时候,我们必须有概率意识。你知道我们对未来是无法精确预测的,只能知道各种场景的概率,那么我们就只能根据概率决策。
为了说明知道概率也很有用,帕尔默特意编了一个故事。帕尔默有个朋友准备在星期六举办一场户外聚会,他在想是否要租一个帐篷以防下雨。帕尔默说,那得看有什么重要人物要来参加你这个聚会,以及下雨的概率是多少。
如果英国女王要来,那你肯定非常不希望女王淋雨,所以只要下雨概率超过5%,你就应该租帐篷。如果本地市长要来,让他淋雨也不好,但是也不是那么难以接受,所以你可以设定下雨的概率超过20%就租帐篷。如果只是一个普通的家庭聚会,在场最大的人物是你岳母,那你完全可以只在下雨概率超过50%的情况下租帐篷。
因此你看,概率会影响决策。严格来说,光考虑概率和事情的严重程度还不行,还得考虑租帐篷的成本。如果帐篷是免费的,那不管下不下雨都可以租;如果租帐篷非常贵,你大概宁可让市长淋雨。
一般而论,你的决策需要考虑三个因素:
1.一旦灾难发生,你必须承受的损失,设为L。
2.灾难发生的概率,设为p。
3.如果要采取行动预防灾难,你必须花费的成本,设为c。
那么,你应该在什么情况下采取预防行动呢?
答案是:当c<p×L时,应该采取行动为灾难做好准备。
p×L,也就是损失乘以发生损失的概率,是这个灾难带给你的“预期损失”,也就是平均而言,你会承受这么大的损失。只要预期损失大于预防行动的成本,预防就是值得的。如果预期损失小于预防成本,那你完全可以认命,不值得预防。
其实做决策能有概率意识,还知道做一番量化计算,已经挺不容易了,绝大多数人都是凭感觉行事。现代人正在被慢慢训练这样的意识。
比如,我们经常听说关于极端天气的橙色预警、红色预警,这个预警的颜色是怎么定的呢?英国气象局有一个颜色标准,正是根据“灾难可能带来的损失有多大”和“灾难发生的概率有多大”这两个维度确定的。如果预报的这场灾难发生的概率特别大,损失也特别大,那就是红色预警。如果损失大,但是概率并不大,那就是橙色或者黄色预警。
有了这个意识,现在政府也好,国际组织也好,对灾难的援助已经在从事后援助往事前援助发展。也就是在灾难发生之前,如果预测模型算出来红色或者橙色预警,就应该提前把物资和应急资金准备好。事实证明这种预测性行动会大大提高救灾效率。联合国已经决心未来在人道主义领域把预测性行动作为核心。
道理的确是简单的道理,但是让道理发挥作用,带来切实的进步,还得看预测模型够不够好。
正因为有噪声
才让我们的大脑超越了算法
学习的一大乐趣就是你突然发现,本来看似不相关的两个东西,其实是一回事,它们背后有同一个原理。
帕尔默这本书还有一个关键元素是噪声,也就是人为添加的随机性。之前我们把噪声加入天气模型做预测,发现它可以大大节省算力,能迅速找到各种可能的结果,能预测比如说发生飓风的概率。噪声,可以用来替代精密的计算。
人的大脑就是一台会用噪声计算的机器。
先看一道算法题。想象你在探测一条山路,山路有上坡有下坡,有山峰有低谷。你的任务是在最少的步骤内找到路上尽可能高的一座山并且停留在那里。这个游戏的特点是你不用走:每一步,你或者选择从地图上的一个点跳跃到另一个点;或者选择随便报一个点,让系统告诉你那个点的高度是多少。请问你会用什么样的方式跳跃呢?
直观的办法是沿着路从左到右挨个位置查看高度,但这就太慢了。一个符合直觉的更快的算法是先随便选一个点,以这个点为基础,往左和往右各移动一步,看看哪边会升高,然后往升高的方向移动,继续探测下一个点。如果你发现两边都比这里低,那你就找到了一个高点。这个方法的问题在于,你很容易被卡在一个局部的山峰上,会错过更高的山。
有个特别好的算法叫“模拟退火算法”。设想你在地图中位于A点,你知道A点的高度。现在随机选择一个之前没去过的B点,如果B点高于A点,你就跳到B点;如果B点低于A点,那么你有两个选择。
l如果现在还处在探测的早期,那你就以一个比较高的概率跳到B点。这是因为地图对你来说还有很多不确定性,你随便跳一下将来碰到更高点的概率很大。
l如果已经在探测晚期,那就降低跳跃的概率。
其实这个过程很像跳槽换工作:如果你对行业还不太了解,有差不多的机会就可以跳;如果你已经很了解这个行业了,那就必须看到更高的工资才跳。
为啥叫模拟退火算法呢?因为这就好像是一块烧红了的铁,一开始非常热,它比较柔软,容易做出改变;随着时间的推移,铁慢慢冷却,就变硬了,就不容易改变了。时间越长,温度越低,铁越硬,你就越不爱改变。
如果我们把随机的跳跃想象成噪声,那么退火的过程就是一个噪声越来越小、行动越来越专注的过程。
模拟退火算法被证明是一种非常高效的探测方法。这个算法给了我们三个提示。
l第一,按部就班地行动,按照固定的方向一个一个地扫描,
l是非常低效的探测方式。
l第二,主动加入随机性,能迅速帮你找到更好的出路。
l第三,对随机性的使用要加以控制:早期可以多随机一点,
然后逐渐减少随机,后期的行动要越来越明确。这样把随机性和方向性结合起来,是解决问题的一个好办法。
可能你已经想到了,先发散后集中,人脑的创造性思维不就是这样的吗?我们解数学题从来不是把自己学过的所有解题技巧都拿出来,十八般兵器都摆在桌子上挨个试,那太慢了。我们往往是让思维先跳来跳去,有时候跳对了就直接找到了思路。
科学家做出重大发现的“尤里卡时刻”也是如此。比如诺贝尔物理学奖获得者罗杰·彭罗斯有一天在上班路上和一个同事边走边聊,等到过马路时,两人暂停了聊天,小心地注意车辆,过了马路继续聊,然后他就跟同事分开了。就在这个时候,彭罗斯突然感到一种莫名的欣喜!他觉得好像是有个好事儿发生了,但他想不起来是什么事。
于是他就开始回忆,从早餐吃什么一直回忆到过马路那一刻……他突然意识到,刚才过马路的时候,自己产生了一个想法,可以用来解决他最近一直在思考的时空奇点问题。他赶紧写成一篇论文。
这篇发表于1965年的论文,后来帮他拿到了诺贝尔物理学奖。
证明了费马大定理的数学家安德鲁·怀尔斯对此专门有个总结,说解决难题分三步。
l第一步,你必须先非常专注地一直想这个问题,把方方面面都想清楚。
l第二步,停下来,放松放松,暂时不要刻意思考这个问题。这时候潜意识就会出场……
l第三步,说不定在什么时候,灵感就突然出现了。
这个办法可能你早就知道,不过,帕尔默在书中给这种思考模式提供了一个非常有意思的解释。
我们知道丹尼尔·卡尼曼在《思考,快与慢》这本书中有个著名的说法,叫作系统1和系统2。系统1是毫不费力的、快速的、自动的思考;系统2是像解数学题一样、慢的、逻辑性强的、高度集中注意力的思考。
帕尔默说,如果你看大脑的功耗,不管大脑是处于系统1还是系统2,都是每秒钟消耗20焦耳的能量,等同于一个20瓦的电灯泡的能量消耗。那系统1和系统2的区别是什么呢?
当大脑处在系统1状态时,能耗被分散在好几个任务上,你同时在做几件事,每件事得到的思考功率都比较低。而当大脑处于系统2状态时,所有能耗都集中在一个任务上。这样说的话,系统1和系统2也可以叫低功率模式和功率密集模式。在系统1的情况下,就会产生噪声。
但正如我们前面说的,噪声不见得是坏事。噪声可以让思维跳跃,能给你带来灵感……这就是为什么当你处于多任务模式、心不在焉的时候,更容易出现灵感。
其实大脑根本离不开噪声。不可能每根神经元都能精确地传递信号,没有那么多能量可用。你平时看一张图片或者看窗外的景色,从来没有一个像素一个像素地看,你的神经元都已经做了四舍五入,用大量的噪声去填补空白。我们一直在使用噪声。
但如果你一直处在低功率模式,完全不集中注意力,那也不会取得任何成就。新想法来了你还得过滤它,好的就留下,不好的就舍弃——随着思考的深入,你会越来越倾向于某个方向,噪声就逐渐降低,信号逐渐加强,就好像模拟退火算法一样,你的想法越来越坚定。
用以前脑科学的说法来表达的话,这就是大脑要在默认模式网络、突显网络、中央执行网络之间快速切换,从而产生创造力。而在本书中,帕尔默用能耗和噪声解释了其中更底层的原理。噪声还有个更深刻的含义。
天气模型的噪声都不是它的本体算法生成的,噪声是研究者从外部强加的。对模拟退火算法来说,噪声是用随机数产生器加入的。对大脑来说,噪声是不能完全用你的思维控制的东西。
简单地说,因为噪声的存在,我们的大脑就不完全是算法。大脑不完全是算法,这正是彭罗斯的名著《皇帝新脑》那本书的核心思想。
彭罗斯说如果大脑完全是一个执行特定算法的机器,它就无法超越哥德尔的不完备性定理,它就不能够欣赏那些“不能用数学证明但又能感知到它是对的”东西。
“计算机科学之父”艾伦·图灵也有句名言:如果一个机器绝对不会犯错,它就不可能是智能的。正因为有噪声,我们的大脑才超越了算法。
你的思维跳跃、你的走神儿和溜号、你的白日梦、你模模糊糊记不清刚刚看见的东西,你稀里糊涂就敢接受一些不严格的观念,才让你成为一个人而不是一台机器。返回搜狐,查看更多