有些理论特别厉害,市场涨了,它能解释;市场跌了,它也能解释。一个人成功了,是因为长期主义,失败了,则是方向没选对;坚持到底赢了,叫“坚持就是胜利”,及时退出躲过一劫,又叫“懂得止损”。这些话单独听起来似乎都有道理,可是放在一起,就会让人产生一种奇怪的感觉:如果无论发生什么,它都能宣布自己早已料到,那么它究竟告诉了我们什么?

我觉得,判断一个理论有没有价值,不能只看它解释了多少事情,还要看它为了维持这些解释,给自己留下了多少事后修改的余地。这里不妨把这种余地叫作“解释自由度”:一个系统在事实已经发生以后,可以多大程度地重新选择变量、补充条件、调整边界、改变口径,从而让原来的说法继续成立。这不是某个严格的数学量,而是一个用来观察认知方式的概念。

自由度本身并不是坏事。神经网络有很多参数,经济模型需要处理复杂变量,物理理论也离不开辅助假设。真正值得警惕的是另一种情况:一个解释系统不断增加对过去的适应能力,却几乎不增加对未来的约束。事情发生之前,它不肯说死;事情发生之后,它又什么都说得通。这样一来,解释就成了一种没有风险的生意。

算命先生说:“你今年会遇到贵人。”一年过去,并没有什么贵人出现,他便解释说,贵人未必是帮助你的人,也可能是一场挫折,因为挫折使你成长。这句话听上去甚至颇有哲理,但它真正增加的并不是预测能力,而是解释自由度。原先需要出现一个人,现在连没有出现这个人也可以算作应验。

所以,与其问一个理论听起来有没有道理,不如问一个更不客气的问题:到底有没有一种结果,能够让它真的输?

失败标准的事后改写

假设两个人预测明天的彩票。第一个人说:“明天一定会开 17。”开奖以后没有 17,那么事情很简单,他猜错了。第二个人则说:“明天的数字,会和你生命里某个重要数字产生联系。”开奖结果是 26,他说这代表你的年龄;你说自己才 25 岁,他说那是虚岁;你说虚岁也对不上,他便解释为 26 岁时将发生重要的事情。实在找不到联系,还可以说数字只是象征,不应该机械理解。

第二种预测最厉害的地方,不是它比第一种更准确,而是它可以在失败以后重新定义什么叫失败。17 没开,第一种预测就结束了;第二种预测却永远有下一句话。

这才是科学与许多“啥都能圆”的理论真正拉开距离的地方。科学家并不比普通人天然更聪明、更诚实,也不是科学里的每个理论都能做出精确预测。科学的特殊之处在于,它会努力把一部分解释权从提出理论的人手里拿走,让现实有机会对理论作出不利的裁决。

比如做一个药物实验,最好在数据出来之前就规定主要指标、比较对象、分析方法,以及什么结果能够支持假设。否则,研究者发现血压没有改善,就转而看心率;心率也没有改善,再去看睡眠;等到睡眠终于出现统计显著,便宣布新药取得突破。这当然可能发现有价值的线索,但如果把探索过程中找到的结果伪装成事先预测的成功,就相当于考试做完以后才决定这次究竟考哪一道题。

预注册的意义正在这里:开奖之前,先把自己的答案锁起来。研究者仍然可以探索,也可以提出新的假设,只是不能把看完答案以后找到的东西,说成自己从一开始就押中的东西。随机对照、盲法、独立复现、隐藏测试集、开放数据等制度虽然各有不同用途,却都在某种程度上限制研究者随意调整解释的空间。

科学之所以需要这些麻烦的程序,恰恰因为它没有假设科学家天然没有偏见。人会确认偏误,会更愿意看到支持自己的结果,会挑选显著的发现,也会讨厌承认自己错了。甚至完全不需要造假,一个诚实的人也可能在几十条分析路径里越走越顺,最后走到自己最希望看到的结论。所谓 p-hacking、选择性报告和事后提出假设,不过是这些普通人性在研究制度中的具体表现。

因此,科学真正聪明的地方,不是宣称“我们特别理性”,而是承认人没有自己想象得那么理性,所以最好连研究者自己一起防。盲法减少预期的干扰,独立复现避免一个现象只在提出者手里永远成功,隐藏测试集则防止模型针对已经看过的答案反复调参。它们共同维护一条原则:不能让运动员跑完比赛以后,自己回来改终点线。

机器学习里的 regularization 主要约束模型,而科学制度还要约束建模的人。谁有权修改规则,什么时候可以修改,看到什么数据以后还能不能修改,失败发生以后能否悄悄删除,这些问题都不只是技术细节,而是知识能否积累的前提。成熟的知识体系既要控制模型的自由度,也要限制解释者的自由度;不仅要让现实能够说“不”,还要让这个“不”不能被我们自己随手删掉。

从历史数据到未来的归纳缺口

不过,即使我们把事后作弊尽量堵住,事情也没有结束。研究者没有挑数据,没有改结果,历史记录全部真实可靠,就能够保证未来仍然如此吗?

罗素讲过一只著名的火鸡。假设农场里有一只聪明的火鸡,每天上午十点,主人都会准时来喂它。第一天如此,第二天如此,到了第一百天、第五百天、第一千天,规律依然稳定。如果这只火鸡会 Python,它大概已经把数据导进 pandas,画出漂亮的时间序列,并且得到了百分之百的历史准确率。样本越多,它对自己的理论越有信心,最后总结出一条伟大的火鸡定律:每天上午十点,主人都会给我送饭。

然后感恩节到了。上午十点,主人果然来了,只不过这一次不是来喂它,而是来抓它的。最讽刺的是,火鸡偏偏在最相信自己理论的那一天,被端上了餐桌。

火鸡的数据其实没有错,过去一千天,主人确实都在十点出现。真正出问题的是它对数据生成机制的理解。它把一个在特定条件下稳定成立的规律,当成了无条件成立的宇宙定律,却不知道主人之所以一直喂它,是因为主人暂时还想把它养肥。

这也让我想到《三体》里“智子锁死”的设定。火鸡至少还有一个幸运之处:它看到的数据,确实是那个世界正常生成的数据。如果连实验本身都受到外部干预,不同实验不断给出反常、随机、无法重复的结果,科学家面对的就不仅是“我的理论为什么解释不了这些数据”,还要进一步怀疑:“我手里的数据,究竟还是不是自然机制正常产生的数据?”

这两个故事指向不同层次的问题。火鸡不知道数据背后的机制,《三体》里的科学家则连数据生成过程是否可靠都开始怀疑。机器学习中的 distribution shift、数据污染、对抗样本、reward hacking 和 benchmark contamination,也都在不同层面提醒我们:不要只盯着数据长什么样,还要追问它为什么会以这种方式来到我们面前。

这就把我们带到了休谟的问题。

我们每天都在做一种非常自然的推理:太阳过去每天升起,所以明天还会升起;某种材料过去一百次受热都会膨胀,所以第一百零一次大概也会;一个策略过去五年赚钱,所以明年可能继续有效。这种从有限经验走向未知情况的推理,叫作归纳。

可休谟追问的是:凭什么?

如果你说,因为归纳过去一直很好用,那么你已经在用“归纳过去有效”证明“归纳未来也会有效”,这仍然是在用归纳为归纳作担保。如果你试图依靠纯粹的演绎逻辑,证明未来必须像过去,也做不到。明天太阳不升起当然极不可能,但“极不可能”与“逻辑矛盾”毕竟不是一回事。

休谟并不是劝人从明天开始拒绝吃饭、拒绝躲火,也不是要求我们放弃一切经验知识。他真正指出的是:经验的有效性与逻辑的必然性不能混为一谈。我们可以有极其充分的理由相信明天太阳仍会升起,却不能仅凭“过去一直如此”,在逻辑上推出“未来必然如此”。

从有限的过去走向未知的未来,中间没有一座由纯粹逻辑免费提供的桥。两个多世纪以后,这个哲学问题换了件格子衫,走进了计算机实验室,名字叫作泛化。

泛化必须支付结构的代价

机器学习给模型一批训练数据,表现很好;再给它一批测试数据,也表现不错。我们为什么敢期待它部署以后还能工作?因为我们其实已经加入了许多前提:训练数据与未来数据不能完全是两个世界,数据生成机制不能突然翻脸,模型最好学到稳定结构,而不是历史中的偶然巧合。说得直白一点,我们默认明天不会突然变成感恩节。

机器学习当然比那只火鸡严谨得多。我们会划分训练集和测试集,做交叉验证,研究分布外泛化、泛化误差和数据漂移。但这些方法并没有从逻辑上消灭休谟的问题,它们是在具体假设下,尽可能提高我们对未来表现的信心。机器学习的泛化问题,可以说是休谟归纳问题的一个工程化版本:哲学家把问题写在书里,工程师把它画成 loss curve,火鸡则把它写进了遗嘱。

这里还有一个很有名的结果,叫 No Free Lunch,没有免费的午餐。粗略地说,如果把所有可能的问题按照特定方式一视同仁地平均起来,就不存在一个学习算法能够在所有问题上永远优于其他算法。一个算法在图像上表现出色,不代表换到完全不同的问题以后仍然会赢。

这并不意味着所有算法在现实中都一样好。恰恰相反,现实世界并不是均匀撒在所有可能函数上的:猫的照片不是随机噪声,语言不是随机字符,流体也不会今天遵守连续性方程,明天心情不好就不遵守。现实存在结构,而学习算法能够成功,很大程度上正是因为它们利用了这些结构。

图像模型会利用局部像素与空间结构,语言模型会利用词语和上下文之间的统计规律,物理模型则会利用守恒、对称和局域性等约束。这些在学习之前就已经进入模型的偏好,叫作归纳偏置(inductive bias)。它并不一定是坏意义上的偏见,更像是模型对“这个世界大概长什么样”所作出的预先押注。

因此,No Free Lunch 留给我们的结论,不应该是“所有算法都一样”,而应该是:没有免费的泛化。一个算法之所以能够在某类问题上学得好,是因为它对这类问题的结构作出了有效押注。现实越符合这些假设,模型越容易泛化;一旦现实偏离,原先的优势也可能变成弱点。

问题在于,人类并不满足于预测。我们不只想知道明天会发生什么,还想知道它为什么会发生;而从“经常一起出现”走到“其中一个导致另一个”,又要跨过另一道并不免费的桥。

时间排序如何制造因果幻觉

我们为什么会觉得 A 是原因、B 是结果?最自然的判断方式之一,就是 A 先发生,B 后发生。杯子掉下去,然后碎了;按下开关,然后灯亮了;吃完饭,然后不饿了。久而久之,我们的大脑特别习惯在两件前后相继的事情之间,自动补上一个“所以”。

可这个办法经常翻车。公鸡每天打鸣以后,太阳升起来,并不能说明太阳是公鸡叫出来的。夏天冰淇淋销量和溺水人数可能一起增加,也不能证明冰淇淋会导致溺水;真正同时推动两件事的,可能只是天气变热了。

甚至“谁先发生”本身,有时也比想象中复杂。相对论告诉我们,对于某些彼此相隔遥远、无法发生信号传递的事件,不同运动状态的观察者可能对时间先后给出不同答案;但真正能够发生物理影响的事件,其因果先后并不会因此随意颠倒。这恰好说明,单纯的时间排序本来就不足以建立因果关系。

人类却特别容易越过这一步。蒙太奇之所以厉害,就是因为它能够利用我们自动补全因果的习惯。一个演员面无表情,下一个镜头切到一盘饭,我们会觉得他饿了;同样的表情后面换成一场葬礼,我们又会觉得他很悲伤。演员的表情没有变,变化的只是前后排列的画面,但观众会主动补出一套完全不同的心理故事。

所谓“蒙太奇谎言”并不一定需要伪造镜头。只要决定哪些镜头被保留、哪些被删除、如何排序,观众便可能自己把故事补完。历史叙事也有类似的危险:一个王朝已经灭亡,一家公司已经倒闭,一个人已经成功,我们再回过头去看那些政策、性格、技术路线、会议、错误决策和偶然机遇,就会突然变得特别会挑重点。

如果结果是成功,当年的冒险便叫远见,固执叫长期主义;如果结果是失败,同样的冒险就成了鲁莽,固执则成了听不进意见。事情发生的时候,它们只是成百上千个历史碎片中的几个;结局出现以后,我们却很容易挑出最符合这个结局的一组,再把它们连成一条仿佛早已注定的线。

Steve Jobs 说过,只有回头看,才能把那些点连起来。这句话很有力量,但它还有另一面:回头以后能连成一条线,并不代表当时只有这一条线。心理学把这种事后觉得“一切早有预兆”的倾向称为后见之明偏差。我们往往不是先掌握了全部原因,再准确预测结果,而是先知道了结果,然后才发现自己原来如此擅长解释原因。

于是问题来了:如果时间先后不够,相关不够,事后讲得通也不够,那么科学究竟凭什么说 A 真的导致了 B?

从相关到干预的因果识别

假设一家 App 发现,允许推送通知的用户,七日留存率明显更高。产品经理一拍桌子,认为推送可以提高留存,于是下一版本开始疯狂提醒:“你已经三小时没打开我们了”“这里有五条你可能感兴趣的消息”“你的朋友都在看”。结果用户被提醒得受不了,干脆卸载了 App。

问题可能出在因果方向。并不是开启通知使人更喜欢 App,而是本来就喜欢 App 的人,更愿意开启通知。还有一种可能是背后存在第三个因素,例如原本使用频率较高的人,既更可能开启通知,也更容易留下来。后台数据只能告诉我们,这两件事情经常一起出现,却不能自动告诉我们改变其中一个,另一个会不会跟着改变。

现代因果推断最重要的转向,就在于把问题从“谁和谁一起出现”,推进到“如果我主动改变它,会发生什么”。随机对照实验是其中一种有力的方法:通过随机分组,让不同组在期望上尽量保持可比,再观察处理带来的差异。随机化的价值,正是减少那些我们知道或不知道的混杂因素对判断的干扰。

当然,现实中很多问题无法进行随机试验。你不能为了研究辍学对未来收入的影响,就随机抽一半学生让他们退学。因此,因果推断才发展出自然实验、工具变量、因果图和反事实等方法。Judea Pearl 的因果推断体系尤其强调区分几种问题:我观察到了什么;如果主动改变某个变量,会发生什么;如果当时没有这样做,结果又会如何。它们分别对应观察、干预和反事实这几个不同层次。

但这些方法也不会自动给我们上帝视角。因果图里的箭头、哪些变量被认为是混杂因素、哪些关系可以排除、是否存在未观测的重要因素,都需要研究者作出假设。数据不会自己从屏幕里跳出来,告诉你哪一根线叫作“因果”。

因此,因果推断并没有消灭休谟的问题,而是把我们额外使用的假设尽量写清楚,让别人能够检查、质疑和比较。它的成熟之处,不在于宣称自己已经摆脱一切前提,而在于承认从相关走向因果必须付出结构性假设的代价。

多因素结果的错误归因

因果问题还有一个特别容易被忽略的地方:我们总想给一件事情找出一个唯一的元凶。考试没考好,是不是学校不好?项目失败,是不是技术不行?找工作没拿到 offer,是不是学历不够?公司销量下降,是不是广告投少了?一件结果对应一个原因,简单、清楚,特别适合写标题,但现实经常不给这个面子。

“因为今天下雨,所以我的鞋湿了”是一句小孩都听得懂的话,可仔细想想,如果我没出门呢?如果穿了雨鞋呢?如果雨很小、路上没有积水呢?鞋湿这件事背后可能同时有下雨、出门、鞋子的材质、路面积水、行走时间等许多条件。你很难把其中某一个单独拎出来,说“就是你,其他人都出去”。

网上有个人讲过,她本科上心理学统计课时,老师要求学生在作业里反复手写一句“Correlation does not imply causation”,也就是相关性不等于因果性。当时可能觉得老师实在啰嗦,后来才明白,老师大概是真的怕学生统计学学上头:看到两个变量高度相关,就急着宣布自己发现了原因。

这件事放到人生里尤其麻烦。一个人失败了,可能同时受到能力、环境、机会、信息、家庭资源、时间点、行业周期和运气的影响,但人在结果出来以后,很容易抓住一个最显眼的标签,把复杂结果压缩成一句“因为我学历不行”“因为我来自这里”或者“因为我性格不好”。

错误归因真正危险的地方,不是它在哲学上不够优雅,而是人会按照自己的解释行动。公司明明受到行业整体需求下降的影响,却认定广告投放不足,于是继续烧钱;一个人学习效率低,真正需要改善的是睡眠和方法,却认定自己“就是不聪明”,最后连方法都懒得改。

成熟的因果思维,不是遇到事情以后非要找到那个神奇按钮,而是进一步估计:改变这个因素,结果会跟着变吗?它的贡献有多大?是否存在其他因素共同作用?它是不是只有在某些条件下才重要?现实决策更接近在一堆不确定因素中判断哪个更重要、哪个更可控、先动哪个最划算。

“相关性不等于因果性”不是让我们永远不敢说“因为”,而是要求我们在说出这个词之前,先想清楚自己究竟掌握了什么证据。

统计检验与证据的强弱

到了医学、心理学和生物学,研究对象复杂,变量众多,许多条件又无法完全控制,于是科学家必须面对另一个问题:一个观察到的差异,究竟只是随机波动,还是真的有东西发生了?

比如一种新药,一组人服用以后表现更好,我们不能马上断定药物有效,因为即使药物完全没有作用,两组人之间也可能由于随机性出现差异。经典的统计检验会先建立一个原假设,例如“药物没有效果”,然后问:如果这个假设是真的,观察到当前这样大或更极端的差异,有多不寻常?

如果结果非常罕见,我们便开始怀疑原假设。这个思路乍看有点像数学反证法,先假设一个东西,再看它会不会出问题,但二者的逻辑性质并不相同。数学反证如果在既定规则下真正推出矛盾,那么假设就不能成立;统计检验得到的却通常只是某类结果在原假设下比较罕见。罕见不等于不可能,连续扔十次硬币,十次全是正面虽然离谱,却并不违反逻辑。

因此,p < 0.05 并不是说“原假设只有 5% 的概率是真的”,更不是说“我的新理论有 95% 的概率正确”。它描述的是在原假设和相应统计模型成立的条件下,观察到这类结果的概率。把它直接翻译成理论为真的概率,相当于把条件概率的方向弄反了。

经验科学里的失败,往往不是一个 TRUE/FALSE 开关,而是证据不断增加或减少我们对某种解释的信任。这也是为什么一次统计显著远远不够,我们还要看效应量、置信区间、样本量、多重比较、预注册和独立复现。

2015 年那次著名的心理学复现项目就是一个提醒:原研究几乎都报告了统计显著,但复现实验中再次获得统计显著结果的比例大约只有 36%。这个数字当然不能翻译成“心理学只有 36% 是真的”,它真正说明的是,当研究对象复杂、效应较小、研究自由度又很高时,一次漂亮的结果并不足以建立稳定的知识。

数学反证为什么显得比统计检验硬得多?因为数学运行在一套明确的形式规则里,结论可以在前提之下被严格推出。至于这些规则本身是否也有前提,我们后面再往下挖一层。现在先回到科学哲学中一个更实际的问题:实验真的出现反例以后,理论就必须立刻被扔掉吗?

反例、辅助假设与补丁机制

波普尔特别强调,经验理论必须承担失败风险。“所有天鹅都是白色的”是一句危险的话,因为只要找到一只真正的黑天鹅,它就遇到了麻烦;而“宇宙中存在一种永远无法测量、也不会和任何东西发生作用的神秘力量”,则几乎没有实验能够让它输。可证伪性的价值,正在于要求理论不能在所有可能结果下自动获胜。

但现实科学并不是发现一个反例,理论就立刻从 TRUE 变成 FALSE。假设某个物理理论预测仪器中应该出现一个信号,结果信号没有出现,究竟是理论错了,还是仪器校准、边界条件、背景噪声、参数设置出了问题?甚至程序里一个 bug,也可能让整个实验看上去与理论矛盾。

现实里的实验通常不是单独检验一条理论,而是同时检验理论、仪器、辅助假设和背景知识组成的一整套东西。这就是杜恒—奎因问题所揭示的困难:现实可以告诉你“这里有问题”,却不会自动告诉你究竟是哪一环出了问题。

于是科学家也可以说:“理论没错,是实验的问题。”这句话听起来突然有点像算命先生的“贵人没错,是你理解错了”。那么,允许理论在失败以后修改,到底算不算耍赖?

我认为,关键不在于有没有修改,而在于修改以后究竟增加了什么。

假设一个理论遇到了异常,科学家提出一个新机制,这个机制不仅解释了旧异常,还提前预测了一个从来没人见过的新现象,后来这个现象真的被发现了,那么这种修改就值得认真对待。它不仅把过去讲通,还对未来下了新的赌注,让理论承担了更多风险。

反过来,如果每次失败以后都是“特殊情况”“未知因素”“环境复杂”“隐藏条件”,而这些新增解释唯一的作用,就是把已经发生的错误重新塞回旧故事里,那么它增加的并不是知识,而是逃生通道。

拉卡托斯的研究纲领思想,正适合帮助我们理解这种区别。理论的核心不一定遇到一次异常就立刻扔掉,外围假设也当然可以修改,但要看这些修改能否持续带来新的、成功的预测,还是一直追着失败结果打补丁。

用本文的语言来说,好的修改会增加未来的经验约束,坏的修改则只是在扩大过去的解释空间。一个在承担新的风险,一个在购买后悔药。解释自由度的问题,绕了一圈又回到了这里。

不同学科如何建立约束

既然科学都讲证据,是不是物理、医学、心理学和经济学就应该使用同一套标准?我觉得这种想法本身就容易造成误解,因为不同学科面对的研究对象,客观上允许它们采用的验证方式并不相同。

物理学可以进行高精度测量和大量重复实验,但物理理论同样有适用范围,牛顿力学在低速、弱引力等适用条件下仍然极其成功,却不能因此被当作一切尺度上的最终理论。天文学无法随意复制两颗太阳,安排一颗进入实验组、另一颗进入对照组,只能依赖不同波段、不同仪器和不同模型之间的交叉约束。

进化生物学也不能重新播放一次寒武纪,却可以利用化石、DNA、比较解剖、生物地理和实验演化等证据,让不同来源的信息共同约束一个解释。医学面对年龄、遗传、饮食、生活环境和其他药物等复杂变量,因此高度依赖随机试验与统计设计。心理学要处理情境、测量方式和文化差异,透明分析与复现便格外重要。

经济学还有一种特殊困难:它研究的对象会读新闻,会形成预期,会看到政策以后主动改变行为,甚至一条规律被广泛发现以后,这条规律本身也可能因此发生变化。研究对象具有反身性,意味着某些稳定关系更容易随着制度和行为的改变而改变。

所以,拿物理 95 分、心理 40 分、经济 30 分来排一个“学科战力榜”,并没有多少意义。真正值得比较的是:在研究对象客观允许的条件下,一门学科究竟建立了多强的约束机制,能够让自己的解释接受现实的检验?

科学的强弱不完全取决于公式有多漂亮,也不取决于论文里出现了多少复杂术语,而取决于现实究竟能在多大程度上卡住你的解释。一个学科越能清楚地说明自己的证据、误差、适用范围和失败条件,它的知识就越有可能被可靠地积累。

证据更新与范式转换

科学理论并不总是在一次实验以后被彻底判死刑。更多时候,证据会逐渐改变我们对不同解释的信任程度,这也是贝叶斯思想特别吸引人的地方。如果用一个不太严格但容易理解的比方,科学有时很像在不断给理论重新定价:一个理论刚提出,证据很少,就不宜投入过高信任;后来它解释了一些旧现象,又提前预测了新现象,我们便有理由提高信心;连续出现异常,或者竞争理论表现更好,就需要重新分配信任。

当然,科学变化并不永远是在同一套坐标系里缓慢调价格。科学史学家库恩提出的范式转换提醒我们,正常科学时期,研究者往往在既有框架里解决难题、处理异常、修正模型;但当异常积累到一定程度,整个领域可能进入危机,随后发生更深刻的变化。变化的不只是某个理论的得分,连什么问题值得研究、什么证据算重要、哪些概念算基础,都可能一起改变。

有时候不是股票重新定价,而是交易所换了计价单位。

贝叶斯式更新与库恩式范式转换,并不需要被写成一场非此即彼的战争。前者帮助我们理解如何在既定模型和假设下更新信念,后者提醒我们,科学共同体使用的框架本身也可能发生历史变化。它们关注的层次不同,而共同留下的启发是:任何特别顺畅的解释,都应该知道自己在哪些条件下成立,又在哪些地方需要重新审视。

测试集的时序约束

机器学习里的测试集,放在这个视角下就非常有意思。训练准确率达到 99.9%,还不够;没见过的数据呢?一个时间段表现很好,换一年呢?一个城市很好,换另一个城市呢?一个设备表现稳定,换型号以后呢?进入分布外场景又会怎样?

这些问题都在努力寻找模型尚未来得及针对性修改的现实。只要你看完测试集以后继续针对它调模型,测试集就不再是独立的最终检验;如果反复这样做,原本用于估计泛化能力的东西,也会逐渐变成训练过程的一部分。

这与科学里的预注册有一种深刻的相似性。关键并不只是“参数少一点”,而是锁定时序:先作出押注,再让未知数据检验它。否则,我们可以不断修改模型,直到它在已经看过的题目上取得漂亮成绩,却无法知道它面对真正的新问题时会怎样。

这里也可以把文章开头的“解释自由度”稍微讲得技术一些。很多人第一反应是参数越多,自由度越高,但现代机器学习并没有这么简单。统计学习理论中的 VC dimension、Rademacher complexity 等工具,试图刻画模型或假设集合的复杂性;而在深度学习里,优化算法、网络结构、初始化、数据增强和参数化方式,也都会产生隐式约束。double descent 等现象进一步说明,“模型越大,过拟合一定单调变严重”并不是一条普遍规律。

所以,本文所谓的解释自由度,不能机械地等同于参数数量。更值得观察的是,一个系统究竟有多大能力迁就已经看过的数据,却不承担新的样本外约束。它有多少种办法能够把过去讲通?又有多少办法能够让未来的事实真正限制它?

然后,一个把这种能力放大到极高程度的系统出现了。

大模型的叙事生成机制

大语言模型特别擅长解释。你问它为什么一家公司成功,它可以从组织文化、战略选择、创始人性格、技术积累和时代红利讲出一套完整故事;你再问另一家公司为什么在相似条件下失败,它也能重新选择因素、关系、权重和叙事路径,把失败讲得同样合理。

前面谈过蒙太奇和历史叙事以后,这件事就显得更有意思了。剪辑师可以重新排列镜头,历史叙述者可以重新选择过去的碎片,而大模型则能够在巨大的语言空间里,迅速找到一条通向既定结果的解释路径。它的语言能力越强,这种解释就越可能完整、流畅、富有说服力。

但我们不能把这个问题简单归结为“AI 爱编故事”。人类自己本来就是一种非常擅长在事情发生以后,把世界重新讲顺的动物。叙事谬误、后见之明偏差、确认偏误和结果偏差,并不是大模型发明的,它只是通过学习海量人类文本,把这种能力极大地放大并外化了。

从这个意义上说,大模型像一面有点尴尬的镜子。我们批评它“怎么什么都能解释”,它可能只是把人类自己的叙事习惯压缩以后,又完整地返还给了我们。

不过,这也恰恰是它有机会被改造的原因。人的解释偏差藏在脑子里,很难审计;大模型的输出却可以保存、对比、复跑,可以打 benchmark、接 verifier、做第三方评测。它把原本内隐的叙事癖,变成了一个可以接受外部检验的对象。

如果模型说代码能跑,就真正运行;如果它说论文存在,就去检索;如果它声称数学证明成立,就交给适用的 proof checker;如果它预测某个实验结果,就让实验来检验。工具调用、检索、代码执行和验证器的重要性,不只是给模型外挂更多知识,更是在给现实装回否决权。

但仅仅有 verifier 仍然不够。如果模型可以自己决定什么时候调用,失败以后重试十次只展示成功的一次,或者不同验证器冲突时只挑选自己喜欢的结果,那么它照样可能退化成一个更高级的算命系统。工具存在,不等于工具具有约束力。

真正可靠的 AI 系统,还需要固定评测规则、隐藏测试集、外部审计、不可随意删除的执行日志、第三方 benchmark,以及在适当任务中强制执行的验证流程。科学共同体面对的问题,在这里又出现了一遍:现实必须能够说“不”,而且这个“不”必须进账。

物理先验与结构泛化

前面一直说泛化不是免费的,那么为什么物理学看起来特别能够泛化?牛顿第二定律并不是看了一千万个苹果掉下来,然后机械地猜测第一千万零一个也会掉。物理学真正厉害的地方,在于它试图寻找能够跨越具体样本的结构关系:在适用条件下,改变质量、速度或初始位置,仍然能够用同一组关系进行推演。

这是一种很强的结构泛化。它不只是记住过去发生过什么,而是建立一套能够约束许多尚未观察到的情况的关系。

当然,物理也没有因此站到休谟问题之外。守恒律、对称性和各种有效方程,并不是上帝直接刻进教科书的,它们同样经历观察、理论竞争、实验淘汰和适用范围的不断修正。如果借用机器学习的语言,物理先验可以被看作一批经过现实长期筛选的强归纳偏置。

它们不是免费获得的绝对真理,而是人类目前找到的、在各自适用范围内极其成功的结构押注。这也与 No Free Lunch 接上了:泛化需要 bias,而物理学积累的许多结构,正是我们能够利用的最有价值的 bias 之一。

AI4Science 如何借用结构

这也是 PINN(Physics-Informed Neural Network,物理信息神经网络)特别有意思的地方。普通数据模型面对有限数据点,可能存在许多条函数都能贴合这些点;PINN 则进一步引入物理方程、边界条件和初始条件等约束,让模型不仅要拟合数据,还要尽量符合我们已经掌握的物理结构。

原本许多能够解释数据的函数,可能因为违反物理约束而不再被接受。这里,“正则化”终于可以以一种更具体的方式重新登场:物理约束能够压缩或重塑可接受的函数空间,使模型不必完全依赖有限样本去猜测所有关系。

AI4Science 的有趣之处,并不是 AI 宣布传统科学过时了,而是当 AI 面对现实世界中昂贵、稀缺、难以无限采集的数据时,反而重新发现了物理结构的价值。互联网可以提供海量文本,却不能随便提供一千万次真实的高成本实验;在这种情况下,已经积累的科学知识就成了一种极其宝贵的先验。

当然,加入物理方程并不意味着模型自动无敌。PINN 仍然会遇到优化困难、多尺度、激波、强对流等问题,物理约束的形式和权重也需要认真处理。现实从来不是塞进一个 PDE loss,就会自动投降。

工程中的误差边界

再看 CFD、有限元等成熟数值模拟方法,它们可能慢、复杂、计算成本高,网格一细,服务器风扇就先发表意见。但这些方法有一个特别宝贵的东西:它们不仅给出答案,还建立了一套分析答案如何出错的机制。

一个模拟结果是 3.7,工程师不会只看这个数字,还会追问网格是否收敛、时间步是否合适、残差如何、守恒是否满足、边界条件是否可靠、模型是否适用,以及计算结果有没有与实验对上。这里涉及工程中重要的 V&V:Verification 关心方程有没有被正确求解,Validation 关心所采用的模型能否充分代表现实;再往后还有 UQ(Uncertainty Quantification),用于分析和量化结果中的不确定性。

工程真正害怕的,并不是模型会犯错,因为所有模型都有误差。更危险的是不知道它会在哪里错。平均误差 3% 未必可怕,可怕的是模型进入陌生工况以后,突然给出一个平滑、自信、漂亮,同时完全错误的结果。

工业最需要的,不只是一个数值,而是这个数值背后的误差结构、适用范围和失效条件。一个能够告诉你“我在这里可能不可靠”的模型,往往比一个永远给出精确小数、却不知道自己何时已经越界的模型更值得信任。

混沌与预测期限

即使我们找到了正确的物理规律,也不代表能够无限预测未来。混沌系统就提供了一种非常反直觉的情况:系统可以完全由确定性方程描述,没有随机骰子,但初始条件只要存在一点点差异,长期演化结果就可能出现巨大的分歧。

天气预报的困难,并不是我们完全不知道大气如何运动,而是初始观测不可能无限精确,混沌又会不断放大某些误差。于是,即使规律是确定的,长期的具体预测仍然可能受到根本性的限制。

这让几个经常被混在一起的词必须分开:可解释、可预测、可干预、可计算,并不是同一件事。一个系统可以有清楚的规律,却难以长期预测;一个结果可以容易验证,却难以找到;一个问题也可能在原则上存在算法,却因为计算成本太高而无法实际求解。

沿着这些区别继续往下走,我们会遇到几堵性质完全不同的墙。

可验证与可高效求解的区别

有些问题,别人把答案交给你,你很容易检查它是否符合要求,但让你自己从巨大的搜索空间里把答案找出来,却可能极其困难。这就是 P vs NP 问题背后一个重要的直觉:验证候选解与寻找候选解,不一定具有相同的计算难度。

比如一个巨大的组合优化问题,别人给你一套方案,你可能很快就能检查它是否满足约束、成本是多少;但如果要求你从大量可能的组合里找出最优方案,搜索成本就可能高得惊人。当然,这只是帮助理解复杂性问题的例子,并不是说每一个优化问题都具有相同的复杂性。

这里面对的是计算资源的边界。算法可能存在,答案也可能存在,只是我们付不起计算代价。它与“根本不存在算法”不是同一种困难。

停机问题与通用算法的边界

图灵的停机问题又往下挖了一层。它问的是:能不能写出一个万能程序,输入任意程序及其输入,都能够正确判断这个程序最后会停止,还是会永远运行?

答案是不能。这里已经不是电脑不够快、算法太贵、算几年算不完,而是不存在能够解决所有这类情况的通用算法。

这与前面的复杂性问题有根本区别。前面问的是能不能算得足够快,这里问的是你想要的那种万能算法究竟存不存在。把两者都笼统地称为“AI 还不够聪明”,就会掩盖真正的问题:有些困难可以靠更好的算法和更多算力缓解,有些则不是增加算力就能消除的。

然后,数学还可以继续往下挖。

真与可证明的形式边界

哥德尔不完备定理特别容易被科普成一句“数学是不完备的”,接着变成“所以数学不是真理”,最后又被引申为“人类理性失败了”或者“人脑一定比 AI 高级”。这些说法都已经跑得太远。

哥德尔讨论的是满足特定条件的形式系统。对于足够强、能够表达相应算术内容,并且满足有效公理化等条件的一致形式系统,会出现系统内部无法证明也无法否定的命题。关键在于“这套系统内部”,而不是宇宙中的一切问题都无法认识。

它迫使我们区分“真”与“在某套形式系统中可证明”,同时也提醒我们,不完备定理有明确的适用条件,并不是任何数学系统都会自动不完备。某些较弱的形式系统,就可能具有完全不同的性质。

数学真正令人佩服的地方,也不是它宣称自己没有任何前提。恰恰相反,数学特别喜欢把前提写出来:公理是什么,语言是什么,推理规则是什么,都尽量说明。公理不是数学偷偷藏起来的漏洞,更像是写在合同第一页的游戏规则。数学所承诺的是,在这些前提和规则之下,结论必须按照相应的逻辑关系被推出。

因此,数学的强,并不在于没有假设,而在于它把假设暴露得特别彻底。一旦前提与推理规则确定,证明就不能靠解释者的心情随意改写。

反证法背后的逻辑选择

这也能解释,为什么数学反证看起来比统计检验硬得多。我们从中学开始就熟悉反证法:先假设命题不成立,再由此推出矛盾,于是得出原命题成立。它在经典逻辑中非常自然,而经典逻辑里一个重要原则就是排中律,即一个命题或者成立,或者不成立。

但数学家也研究过不同的逻辑体系,例如直觉主义逻辑。它对于某些经典证明方式有不同要求,尤其重视构造性证明。用一个不严格但容易理解的比方,有人说仓库里一定有一只猫,并通过反证说明“仓库里没有猫”会产生矛盾;构造性思路则可能进一步要求,你能不能真的把这只猫找出来?

这个比方当然不是数学定义,但它抓住了一个有趣的分歧:排除某种可能,与直接构造一个对象,在不同逻辑体系中并不总能被当作完全相同的事情。

程序员对非经典逻辑也并非毫无接触。SQL 中就存在 UNKNOWN 这样的第三种逻辑值,除此之外还有多值逻辑、模糊逻辑、直觉主义逻辑、量子逻辑等不同体系。它们并不意味着“世界上其实没有真假”,更不能被理解成“量子力学证明 1+1 可以等于 3”。真正值得注意的是,我们以为最底层、最不需要解释的推理规则,本身也有不同的形式框架。

经典逻辑当然极其成功,现代数学大量建立在它的基础之上,我们完全没有必要因为存在其他逻辑体系,就开始怀疑小学数学。更有意思的是,平时我们说“这个结论是必然的”,其实经常省略了前半句:在这套规则下。

于是,全文前面的许多问题突然连在了一起。机器学习从训练集走向未来,需要归纳偏置;因果推断从相关走向因果,需要结构假设;统计检验判断结果是否异常,需要统计模型;数学定理需要公理,连反证法也运行在某套逻辑规则之中。

我更愿意把数学里的“必然”理解成:不是没有前提,而是前提定下来以后,不能随意退让。哥德尔不完备定理也因此不再像一场“数学塌了”的灾难,而是在告诉我们,即使把规则写得非常清楚,足够强大的形式系统内部,依然可能存在自己的边界。

1930 年柯尼斯堡的两条思想线

这也是为什么我很喜欢 1930 年的柯尼斯堡。9 月 7 日,年轻的哥德尔在数学基础讨论中宣布了第一不完备性结果的核心内容;第二天,9 月 8 日,希尔伯特在同一座城市发表了著名演讲,最后留下那句:

Wir müssen wissen. Wir werden wissen.

We must know. We will know.

我们必须知道。我们终将知道。

这个故事不必被写成哥德尔现场打脸希尔伯特的戏剧性场面,真正迷人的地方是,两条关于理性力量与理性边界的思想线,在同一座城市、几乎同一时间擦肩而过。一边是“我们终将知道”的信念,另一边则刚刚发现,“知道”这件事本身,比人们原先想象得复杂得多。

哥德尔不完备定理不是“宇宙不可理解定理”,也不是“人脑必然战胜 AI 定理”,更不是“科学最终证明自己错了”。它讨论的是严格条件下的形式系统,却让我们有理由认真区分真、可证明、可计算、可高效计算、可预测、可解释与可干预这些不同概念。

到了这里,“AI 能不能解决所有问题”这个问题本身,就开始显得过于笼统。因为“解决不了”三个字里面,可能藏着完全不同的墙。

不知道的不同机制

未来如果一个 AI 说“这个问题我解决不了”,真正有价值的下一句应该是:为什么?

如果是数据不够,我们可以继续收集数据;如果是训练分布外,就需要研究泛化与分布转移;如果存在无法排除的混杂因素,因果效应可能无法在当前假设下识别;如果计算成本太高,那是复杂性问题;如果不存在所要求的通用算法,就进入可计算性问题;如果某个命题在当前公理体系里无法证明,也无法否定,则涉及形式系统的边界。

这些问题当然都可以被日常语言概括成“不知道”,但它们对应的解决途径完全不同。把所有困难混成一团,只会让我们误以为增加数据、算力或者模型参数,就能够解决一切。

真正成熟的智能,不应该只会不停输出答案,还应该能够识别自己究竟撞上了哪一堵墙。知道问题的类型,有时比勉强给出一个看似完整的答案更重要。

AGI 的拒答与校准能力

这就到了一个非常实际的问题:成熟的 AI 应该知道,哪些事情自己很有把握,哪些只是猜测,哪些需要查资料、跑代码或做实验,哪些超出当前能力范围,哪些无法验证,以及什么时候应该明确说“我不知道”。

这不是一句空洞的 AI 伦理口号,它已经对应许多真实的机器学习研究。例如 calibration(校准)关心的是,模型声称自己有 90% 把握的一批预测,长期来看是否真的大约有九成正确。如果一个模型永远表现得有 99% 的信心,实际准确率却只有六成,那么这种自信就会成为风险。

selective prediction 研究模型能否有选择地回答自己有把握的问题,abstention 研究什么时候应该拒答,conformal prediction 则在相应假设下,为预测集合或区间提供一定的覆盖保证。这些看起来都是工程问题,往深处看,却都在回答一个古老的问题:一个认知系统什么时候应该承认,现有证据不足以支撑它继续说下去?

真正成熟的 AGI,未必是一个永远不会沉默的超级问答机。它应该能够区分“我知道”“我大概知道”“我需要更多证据”“我需要外部工具”“我需要人类介入”,以及“这个问题我目前不知道”。

如果一个系统永远不说不知道,并不一定是因为它已经全知,还有一种更危险的可能:它只是拥有太大的解释自由度。无论什么输入,都能生成一套话;无论什么结果,都能产生一个像答案的答案。那就又回到了文章开头,只不过这一次,算命先生有了巨大的参数量。

让现实拥有最后的否决权

所以到最后,我还是很喜欢希尔伯特那句话:We must know. We will know. 只是今天再看,我不愿意把它理解成“终有一天,我们会拿到宇宙的全部答案”。更值得保留下来的,是一种不断追求知识,同时认真追问知识凭什么成立的态度。

休谟让我们看到,过去与未来之间没有免费的逻辑桥;No Free Lunch 说明,泛化必须依赖某种结构性押注;因果推断则要求我们在相关之外,进一步说明干预、反事实和结构假设。统计学提醒我们,经验世界里的失败往往不是逻辑矛盾,一次漂亮结果远远不够;而蒙太奇与后见之明又让我们看到,人脑本来就擅长在事情结束以后,重新排列过去的碎片,把噪声剪成伏笔,把相关剪成因果。

波普尔要求理论承担失败风险,杜恒—奎因问题提醒我们失败并不自动指出哪一环有错,拉卡托斯则继续追问,修改究竟是在创造新的预测,还是在购买逃生通道。科学共同体后来建立的预注册、盲法、复现和独立验证,则把这种要求从哲学原则变成了具体制度。

机器学习的测试集告诉我们,拟合过去不等于泛化未来;大模型则像一面镜子,把人类本来就有的叙事癖放大以后摆在我们面前。它的特殊优势,是输出可以被记录、执行、审计和验证,因此我们有机会给一个高自由度的叙事生成器装上外部否决机制。物理与 AI4Science 让我们重新看到结构的价值,工业工程要求我们理解误差和适用边界,混沌提醒我们知道规律也未必能够无限预测。

再往理性的边界走,复杂性告诉我们有答案不代表找得动,图灵告诉我们有些一般问题不存在万能算法,哥德尔则让我们区分真与在特定形式系统中可证明。连经典逻辑与直觉主义之间的差异,也提醒我们,所谓必然推理,总是在某套明确的规则之下进行。

这些发现看起来似乎一直在削弱“我们终将知道”的信念,但我反而觉得,它们让这句话变得更成熟了。因为知识的进步,从来不只是知道越来越多答案,还包括知道答案用了什么假设,为什么值得相信,能够泛化多远,什么证据会改变我们的判断,以及我们究竟为什么不知道。

这才是科学真正和“啥都能圆”不同的地方。算命最擅长的是给自己留下无限退路,科学真正做的,却是不断把这些退路堵上。不是因为科学家天生比别人理性,恰恰相反,是因为科学默认人类并没有自己想象得那么理性,所以它才需要预注册、对照、盲法、复现、同行监督、隐藏测试和独立验证,让提出理论的人不能永远同时当运动员、裁判和记分员。

如果还要借一次机器学习的语言,科学当然包含许多类似正则化的结构约束,但它做的其实更多:它不仅约束模型,还约束建模的人。它真正保护的,也不是某一条永远正确的理论,而是一条更加朴素的原则:让现实永远拥有说“不”的权力。

或者换成全文更容易理解的说法:让一个理论真的有可能输,而且输了以后,这局不能被我们自己随手删掉。

也许这才是 We Must Know, We Will Know 到今天最值得保留下来的意思。我们必须知道,我们终将知道;不仅要知道答案,还要知道答案的条件、前提、误差和边界,以及什么时候,我们还不知道。


资料与延伸阅读

  1. David Hume, An Enquiry Concerning Human Understanding。
  2. Bertrand Russell, The Problems of Philosophy。
  3. Karl Popper, The Logic of Scientific Discovery。
  4. Pierre Duhem, The Aim and Structure of Physical Theory。
  5. W. V. O. Quine, “Two Dogmas of Empiricism”。
  6. Imre Lakatos, The Methodology of Scientific Research Programmes。
  7. Thomas S. Kuhn, The Structure of Scientific Revolutions。
  8. Judea Pearl, Causality。
  9. Judea Pearl & Dana Mackenzie, The Book of Why。
  10. Wolpert, D. H. & Macready, W. G. (1997), “No Free Lunch Theorems for Optimization”。
  11. Open Science Collaboration (2015), “Estimating the reproducibility of psychological science”, Science。
  12. Belkin, M. et al. (2019), “Reconciling modern machine-learning practice and the classical bias–variance trade-off”, PNAS。
  13. Krishnapriyan, A. S. et al. (2021), “Characterizing possible failure modes in physics-informed neural networks”, NeurIPS。
  14. ASME, Verification, Validation and Uncertainty Quantification (VVUQ) Standards。
  15. Alan Turing (1936), “On Computable Numbers, with an Application to the Entscheidungsproblem”。
  16. Kurt Gödel (1931), “Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I”。
  17. David Hilbert, 1930 Königsberg Address,“Wir müssen wissen. Wir werden wissen.”。
  18. Arend Heyting, Intuitionism: An Introduction。
  19. Graham Priest, An Introduction to Non-Classical Logic。
  20. Garrett Birkhoff & John von Neumann (1936), “The Logic of Quantum Mechanics”。
  21. 关于 VC dimension、Rademacher complexity、calibration、selective prediction、abstention 与 conformal prediction,可进一步参考统计学习理论与 trustworthy machine learning 相关文献。