We Do Not Know We Know——《无穷的开始》读后感

Posted by shengliangd's blog on March 6, 2022

从找规律填数说起

想必读者曾经做过“找规律填数”的题目,例如:3, 5, 9, 15, 23, __, __ 。想到正确答案应该不难:3+2=5,5+4=9,9+6=15,15+8=23,23+10=33,33+12=45。写个递推公式:$a_1=3, a_i=a_{i-1}+2(i-1)$。但为什么不能是别的答案?小时候做这种题的时候,特别是想不出合适的答案的时候,我就会开始想一些奇奇怪怪的问题,比如为什么这个“规律”就不能是某个表格的第 $i$ 项,而这个表格是下面这样:

编号 1 2 3 4 5 6 7
数值 3 5 9 15 23 1234 5678

或者为什么这就不能是一个标着 3、5、9、15、23 以及另外一个随便什么数的骰子掷出来的结果?或者干脆是日历上的一只蜜蜂,它依次停在了 3、5、9、15、23 这五个日期上,至于后面两次停在哪,得去问问那只蜜蜂!

这些想法颇有抬杠的味道了,在当时如果向老师或者同学提出这些问题,得到的答案极有可能是“显然不对”。然而,“显然”一词往往被用作指代模模糊糊不清不楚的直觉,我们想找的对的答案,也就是所谓的“规律”,到底是怎样的呢?另外,虽然找规律填数是一个极简的例子,但它包含了科学探索的一些要素:发现一些现象(已知的几个数)、寻找规律(关于第几个数是怎么来的)、预测更多的现象(预测未知的数)、推翻旧的规律(如果不幸找到一个规律符合前四个数而不符合第五个数的话)。核心的便是寻找合适的规律,也就是关于“第 $i$ 个数为何是这样而不是那样”的解释,为了和《无穷的开始》这本书中的用词保持一致,接下来就都用“解释”一词了。

寻找解释的行为也并不局限于科学探索之中,在我们身边也时不时会听到一些有趣(并且会让人毛骨悚然)的解释:小孩爱哭闹是因为被吓丢了魂,需要通过一种仪式招回来;有一个路段频繁发生交通事故是因为最初发生事故死去的人冤魂不散……在这本书中作者则举了古希腊神话如何解释季节变化的例子:

很久以前,冥王哈迪斯绑架并强暴了春天女神普西芬尼。后来,普西芬尼的母亲、大地和农业女神得墨忒耳同他谈妥了释放她女儿的契约,规定普西芬尼要嫁给哈迪斯,并吃下一粒神奇的种子,迫使她必须一年一度去探访他。每当普西芬尼离开母亲去履行这项义务时,得墨忒耳就会很伤心,命令世界变得冷漠凄凉,什么都不能生长。

看起来,不论是古代还是现代,不论是科学探索还是日常生活,人们都乐于寻找解释。尽管解释的风格千变万化,现象背后那些看不见的东西总能激起人们的好奇心,人们也总是相信,关于现象背后看不见的东西的知识能够帮助我们更好地生活——不论是利用自然规律来获得更高的生产力,还是向神明祈祷以期降下福祉。

科学寻求的是好解释

作者指出,区分科学与非科学的是好解释。好解释有两个特点,第一个特点是难以改变:好解释不包含可有可无或者可以轻易变动的细节。比如,当我们用递推公式来解释前面那个数列的时候,没法随意地增加或减去任何细节而保持其解释数列中每一项是多少的功能;相比之下,基于表格的解释可以随意地再添上很多项,或者改变最后两个常数,而仍然能解释已知数。古希腊神话对于季节变化的解释中,神奇的种子则完全可以换成某种奇妙的咒语(比如《哈利$\cdot$波特》中的牢不可破誓言)。

难以改变的一个隐含意义可能比较戏剧性——好解释除了很难被轻微改动而保持其原有的解释能力以外,也很难被轻微改动用来解释与原解释不相符的现象。例如,为了解释微观世界而提出的量子力学与原本用于解释宏观、低速世界的牛顿力学天差地别。再例如,假如我现在告诉你,其实前面那个数列的第三项是 10 而不是 9,我写错了,那么,基于递推公式的解释就完全失效了,我们没法轻松地改进一下递推公式让它既保持现有的简洁性又解释已知项;而其他几种解释只需稍作修改(表格、骰子)或者完全不用改(蜜蜂),从结果上仍然是对的。这是因为,好解释的每个部分都是为了完成其解释目的,而其他解释则包含无关紧要的细节,具有很大的可变空间。

好解释的第二个特点是具有延伸性:好解释不仅能解释它原本想要被用来解释的现象,还能解释先前完全没有观测到的现象。在找规律填数的例子里,基于递推公式的解释不仅能给出我们想要的第六项第七项,还有往后的无穷多项,而这解释本身并不需要把自己变得无穷长。相比之下,基于表格的解释需要给出一个无穷长的表格;骰子和蜜蜂似乎不具有这样的问题,因为对它们来说只是重复一下先前的操作而已。古希腊神话对季节变化的解释则只适用于北半球,当然,古希腊人并不知道在世界的另一部分,季节变化情况是另一个样子。

延伸性似乎还有着更深刻的物理内涵。找规律填数的例子里,这个数列能够被简单的递推公式描述完全是因为我是按照递推公式写出来的嘛,假如我故意把其中几项替换成随便其他什么数字,就会让做这个题的人感到很困惑了,比如:3, 5, 100, 15, 23, __, __。这个时候,递推公式就需要加一条 $a_3=100$,完全破坏了原有的简洁,变得和打表格差不多了!幸运的是目前看来我们所处的物理世界并没有这么无赖——一个不受外力作用的(宏观、低速)球体的位移总是能被 $x=vt$ 相当准确地描述,不需要加上诸如 $t=3s$ 时 $x=5m$ 这样的限制。假如物理世界遵循其他奇奇怪怪的规律,比如一个描述了各种特例的表格,又或者简洁的公式附带某个范围内的特殊值,那么物理学的发展必定会更加困难。我们所处的物理世界似乎本身就遵循着一些具有延伸性的好解释。为什么不能是一些丑陋的表格呢?是因为只有遵循好解释的宇宙才能存在吗?是我们恰好待在一个遵循好解释的宇宙中吗?还是只有遵循好解释的宇宙才能产生能够思考这类问题的存在?回答这些问题都有待科学进一步发展。

顺带一提,人们也经常把这类难题归因给一些具有主观能动性并且能超越物理规律操纵事物的神秘存在,比如“上帝创造了这个宇宙”、“我们不能以凡人之思想去窥测上帝的想法”。这样的归因导致这类解释不具备“难以改变”这一特点,因为“上帝的想法”就具有无限变化能力——对于任何现象都可以用“上帝是这样想的而不是那样想的”、“上帝认为这样更好,只是我们不理解”来解释。它们看似具有很强的延伸性——神秘存在可以为一切现象背锅,但实际上它们的延伸性极差:借助那些解释,你只能对每件事情本身说“神秘存在是这么决定的”,这无异于给每种情况打个表格(想想前面找规律填数里打表格的耍赖方法)。

除了提出关于好解释的观点,作者还批评了一个被广为接受的观念,奥卡姆剃刀原则,即追求最简单的解释。作者评价其为“一种错误观念”。我个人的理解是,作者想强调“难以改变”比“简单”更重要。一方面,难以改变的解释本身就应该足够简单,因为容易改变的部分都已经被剔除了;另一方面,简单的解释仍然可以是坏解释,比如“找规律填数中的数字完全是骰子结果”这一解释就很简单,但它并不是我们想要的答案。

在讨论了书中关于“科学寻求的是好解释”的观点后,接下来就该说说好解释如何产生了,具体来说,是人们如何从观察到的现象中得到好解释。

再看找规律填数

小时候做找规律填数题的时候很好奇一件事:老师会教我们如何做加法、减法、乘法、除法等,这些都有固定的套路,但是对于找规律填数,老师能告诉我们的最多是,多猜猜、多试试、把相邻两项的差写出来看看等等,难道没有一个固定的套路来解决所有的找规律填数问题吗?

在那个时候我还没有足够的知识去思考这个问题背后的深刻内涵,随着了解到的东西越来越多,越发觉得一个能解决找规律填数问题的固定套路很重要,因为它本质上是一个机器学习问题:给定一组输入与输出的对应关系,寻找一组规则/一个程序来根据输入算出输出。这涵盖了很多有实际应用价值的问题,包括从照片中分辨人脸、从基因序列推测蛋白质结构、从医学图像中识别疾病……如果找规律填数的问题得到解决,扩展到高维不就可以解决这些问题了?为什么关于机器学习的教材里(据我所知)都没有讨论过这样的问题?它不可解吗?

让我们先来设想一下,我们想要找到的“规律”应该是什么样的东西。

首先它应该是一段清晰明确的描述,人可以根据这一描述,按部就班地计算出数列中的任意一项。当然,也可以把这段描述翻译成程序让计算机帮我们算。或者干脆直接就找这样一段程序就好了。(关于什么是“按部就班”地计算,计算机科学的先驱们给出了不同的数学模型,包括寄存器机$\lambda$-演算图灵机等,并证明了相互等价,我们通常用图灵机来代表它们,并称它们能够实现的计算过程为“图灵可计算的”。)

然后,在保持其清晰明确的前提下,描述越短越好,因为冗长的描述将有空间包含不重要的细节。这也是奥卡姆剃刀原则的体现。

Ok,这么说来,我们是要找一段最短的、能将 $i$ 作为输入,输出 $a_i$ 的程序嘛,接下来就简称最短程序(注意,不是指最短的可以运行的程序,而是最短的、可以计算 $a_i$ 的程序)。另外它也取决于采用的编程语言,不同编程语言由于语法的区别会带来不同的长度,比如用 Python 来描述之前的规则:

def f(i):
    return 3 if i == 1 else f(i-1)+2*(i-1)

或用 Haskell 来描述之前的规则:

f 1 = 3
f i = f (i-1) + 2*(i-1)

算法信息论正是研究关于最短程序及其长度的理论,想要进一步了解可以参考这篇文章。算法信息论的第一个重要结论是:不同语言的最短程序长度的差只取决于语言的选择,与被描述的对象无关。也就是说,语言的选择对最短程序长度影响不大。可以这么想:生成同一个数列,可以先用 Haskell 写一个 Python 解释器,然后把生成这个数列的 Python 程序喂给这个解释器,于是用 Haskell 最短程序的长度不会超过 Python 最短程序长度加上用 Haskell 写的 Python 解释器的长度。所以我们考虑最短程序长度的时候可以独立于编程语言,任选一种,或者干脆用通用图灵机作为参照。

算法信息论的另一个重要结论是:最短程序长度是不可计算的。也就是说,没有程序能够对给定对象计算出生成该对象的最短程序的长度。这是一个很大的限制——假如我们能求出最短程序,那只要看一下这个程序有多长,就求出最短程序长度了。于是,最短程序也是不可计算的。

这是一个惊人的限制,如果我们要找的规律的确等同于最短程序的话,这个限制意味着梦寐以求的自动找规律的程序根本不存在!难怪至今最先进的方法(深度学习,在一定程度上模仿了生物大脑中神经网络的运作方式)并非从 0 开始机械地推演出求解问题的程序,而是预设一个参数化的结构(超参数),再基于反向传播算法调整这个结构之下的参数,而其准确性往往与随机数种子及超参数的选取有不小的联系。

注意,这个限制并不阻止我们获得最短程序。我们完全有可能运气足够好随机拼凑出或者写出了最短的程序。这个限制导致的后果是,我们无法判断获得的是不是已经是最短程序,也就是说:You know, but you do not know you know(Barron and Cover [1991], Minimum complexity density estimation)。

不过这和书中探讨的关于好解释的来源的问题有什么关系?

好解释通过猜想和批评获得

在书中作者指出,“在科学史的大部分时间里,人们错误地相信,理论是从人类的感觉证据“推演”出来的——哲学上称之为经验主义”。这一总结不得不说比较难懂,特别是“推演”一词的含义,作者在文中对其进行了多次阐述(参考原文),最后总结道,“经验主义树立另外两个错误的权威:感觉经验,以及某种虚构的“推演”过程,比如归纳,人们幻想用这样的过程来从经验提取理论”。按照我的理解,作者是否定了知识(理论、解释)能够从观察到的现象中以某种机械的方式得到。目前也确实没有发现这种机械推演方式,否则科学家需要做的就仅仅是把这种机械推演写成程序,然后做实验,然后把数据喂给这个程序了。

既然知识不能通过机械推演得到,那又是怎么来的呢?人们常说的“创造力”、“灵感”这些词又是怎么回事?

作者指出,好解释的产生如同发生在头脑中的自然选择。自然选择大致是这样运作:最初有很多生物个体,适应环境的活下来,不适应环境的死亡,适应环境的产生后代,后代会继承亲代的大部分特征,但一些基因突变导致它们会变得更加适应环境或更加不适应环境,这样的过程持续进行,不仅创造了如今丰富多彩的生物世界,还创造了知识——写在基因里的知识,这些知识包括如何储存来自阳光的能量、如何飞行、甚至如何思考。发生在头脑中的自然选择与之相似:首先产生猜想,而观察到的事实扮演大自然的角色排除掉错误的猜想,如果足够幸运的话至少会有一个猜想得以保留,而被排除掉的猜想不会完全死亡,它们可能给后来的新猜想提供启发,或者在某种更狭隘的情形下继续工作。

在思考一些困难问题的时候似乎尤其能感受到这样的过程,虽然我们大多数人可能不会直接参与伟大的科学理论的创造,但面对数学题、算法题、以至推理游戏时的感受都可以参考:我们脑海中会不断产生一些感觉可能有效的方向,然后去具体地考查一下,可能对也可能不对,不完全对的想法也可能揭示了问题的某些性质,直到某一刻灵光乍现,各种碎片被拼在一起,“Eureka”!

哲学上把这样的主张称为易谬主义,当然相关的讨论会更严肃。易谬主义认为,并不存在权威的知识来源,不存在从现象中机械推演得到理论的方法,也不存在任何可靠手段能证明某种理论是真实的;理论(解释)只能通过猜想获得,而经验和现象的作用就是排除错误的猜想,作为检验标准

易谬主义意味着,我们永远无法证明一个理论为真,而只能通过现象排除掉为伪的理论;因此,我们可能会发现看上去正确的科学理论,它能够解释已发现的所有现象,它也许确实就是世界所遵循的规律本身,但我们却无法证明它是,只能期待未来不会有任何新的现象来证伪这一理论。于是再一次,You know, but you do not know you know

关于最短程序的探索与关于科学理论的寻求的哲学讨论引向了相同的结论,You know, but you do not know you know,这是一个巧合吗?有这样一个著名的假设(Church–Turing–Deutsch principle,正是本书作者提出的)认为,任何物理上能够发生的过程都是图灵可计算的。让我们来看看如果这个假设是真的,意味着什么:既然任何物理上能够发生的过程都是图灵可计算的,那么我们要寻找的任何科学理论也就都是一段程序,并且根据先前的讨论,应该是最短程序;既然人脑也是一个物理系统,那么人脑也不会超过图灵机的计算能力;于是,寻找科学理论的过程很可能就是用图灵机寻找最短程序,而根据算法信息论,最短程序是不可计算的;于是寻找科学理论只能通过不断提出更好的猜想以及用现象排除错误的猜想来达到,其本质是在巨大的假设空间中做搜索。根据易谬主义,我们最多也只能对 CTD 原理证伪而不能证真,但在找到反例前,不妨继续相信现实世界与我们头脑中的理论世界有着如此优雅的统一。

也许“好解释从猜想中产生”很不可思议:猜想为何能够如此高效?我们在思考问题时为何没有被巨量的不合理的猜想淹没?或许是我们的大脑在进化中获得了下意识地排除掉明显错误的猜想的能力;或许是因为我们能够在合适的抽象层次进行猜想从而极大地缩小了猜想的空间(比如在思考算法问题的时候脑子里活跃着的概念不会是逻辑门,也不会是汇编指令,而是排序、动态规划、分治等更高层次的东西;在求解数学题的时候,知道一条公式或定理会显著减少错误的尝试)。科学的发展也必定会给这些疑问以好的解释。

结语

这些想法大概是我二十四年以来接触到的对这个世界最深刻的认识,它们或许只有很小的现实意义,不能帮助提高生产力、对抗新冠、缓解战争冲突,甚至也不能帮我毕业,限于时间和水平也远谈不上严谨,但在我看来这些想法极具吸引力,因为它们关乎我们不能知道什么、能知道什么、以及如何知道。