《理性:从人工智能到僵尸 – 地图与真实的土地 – 第三部分:注意困惑 – 奥卡姆剃刀》
一种解释越复杂,仅仅在信念空间中找到它就需要越多的证据。(在传统理性中,它常被表述得颇有歧义,“一个命题越复杂,就需要越多的证据去证明。”)我们如何衡量一种解释的复杂度?又如何决定需要多少证据?
奥卡姆剃刀原理常常被表述为“符合事实的最简单的解释”。罗伯特·海因莱因[1]罗伯特·海因莱因:美国硬科幻小说作家,人称“科幻先生”。详见:https://zh.wikipedia.org/wiki/%E7%BE%85%E4%BC%AF%E7%89%B9%C2%B7%E6%B5%B7%E8%90%8A%E5%9B%A0曾回应说,最简单的解释是“街上那个人是女巫;是她干的”。
通过观察可以发现,句子的长度并不是衡量“复杂度”的好方法。仅仅“不禁止某事发生”的拟合是不充分的。
为什么一个句子的长度不足以衡量其复杂度?因为当你大声说出一句话的时候,你在使用听众共有的概念标签——听众事先内置了这些标签的复杂度。假设我们把海因莱因的整句话缩写为“Tldtsiawsdi”,整个解释就可以用一个单词来传达了;或者更进一步,我们给这个句子随意贴上个“蜜汁”[2]原文为Fnord。在《光明会》三部曲中,政府通过这一意义模糊的单词影响和操纵人群的潜意识,从而确保自己的权威。现常见于电脑程序中的变量命名,也可作为阴谋论的代名词。详见:https://en.wikipedia.org/wiki/Fnord之类的标签。这样就减少了复杂性了吗?没有,因为你需要提前告诉听众,“Tldtsiawsdi”的意思是“街上那个人是女巫;是她干的”。而且“女巫”这个词本身也是个标签,代表着一个极为匪夷所思的断言——仅仅因为我们都知道这个概念是什么,并不代表这个概念很简单。
当空中划过一道巨大的闪电并击中某物,古斯堪的纳维亚的一个部落民说,“可能是一位强大的神灵发怒,丢下了一道闪电”。人类大脑是宇宙中已知的最复杂的工艺品。如果你以为愤怒看起来很简单,那是因为我们看不到这种情绪背后的神经环路。(想象你对根本没有幽默感的外星人解释为什么《吐槽大会》很好笑。但别觉得有什么了不起;你自己也没有(他们所拥有的)蜜汁感。)愤怒的复杂性,还有智慧的复杂性,被人们用想象中的雷神索尔一笔带过。
比起解释雷神索尔,向一个人类解释麦克斯韦方程所花费的时间要多得多。人类有关于愤怒的内置词汇,却没有关于微积分的内置词汇。在你开始描述电流之前,你得先解释你的语言,这种语言背后的语义,再是微积分这一数学概念。
但从某种意义上来讲,麦克斯韦方程式似乎比人脑或者雷神索尔更简单。
是的。相比于写电脑程序来模拟像索尔一样的智慧头脑,写程序模拟麦克斯韦方程式要简单得多得多。
所罗门诺夫归纳法的形式衡量“描述复杂度”的方法,是列出所有能输出该描述的电脑程序,然后用其中最短电脑程序的长度作为描述的复杂度。如果要讨论“最短的电脑程序”,需要明确电脑程序所占的空间;为此,需要明确编程语言和解释器。所罗门诺夫归纳法使用图灵机,或者更确切地说,指定图灵机的比特串(bitstring)。如果你不喜欢图灵机怎么办?那你可以设计自己的通用图灵机——就相差一个复杂度惩罚项常数而已,用你喜欢的任意编程语言解释你输入的任意代码。不同的归纳形式相互之间只相差一个最差情况时的常数因子,该因子取决于不同形式对应的解释器大小。
所罗门诺夫[3]所罗门诺夫:算法信息论的创始人,其归纳推理理论是对奥卡姆剃刀叙述的数学化描述。详见:https://en.wikipedia.org/wiki/Ray_Solomonoff归纳法的一个更好(以我谦卑的观点来看)的版本中,电脑程序并没有产生任何决定性的预测,而是给字符串分配了不同的概率。例如,我们能写出一个程序,给2^N种长度为N的序列分配相同概率,从而解释抛硬币的结果。这就是所罗门诺夫归纳法拟合观测数据的方式。一个程序给观测数据分配的概率越高,它“拟合”得也就越好。所有的概率加起来必须等于1,因此一个程序想要更好地拟合一种可能性,就必须从其他的可能性中偷概率,而那些可能性拟合的结果将会变得差。没有一个“超公平”的硬币可以有100%的可能性正面朝上,且同时有100%的可能性反面朝上。
那么,我们如何在数据的拟合和程序的复杂度之间找到平衡呢?如果忽略复杂度亏损,只考虑拟合,那么你会一直倾向于那些声称能决定性地预测观测数据、给它分配百分百可能性的程序。如果抛硬币的结果是“正反反正正反”,那么相比于一个描述正反出现概率相同的程序,一个宣称抛硬币结果为“正反反正正反”的程序就好了64倍。相反,如果你忽略拟合,而只考虑减少复杂度,那么“公平硬币”的假设就会比任何其他假设看起来都更简单,即便抛硬币结果是“正反正正反正正正反正正正正反正正正正正反……”确实,公平硬币更简单,而且它拟合这一串数据的能力和拟合其他任何20次抛硬币的结果一样好——不多也不少——但我们能看到另一种假设,似乎也并不太复杂,拟合数据的能力却好得多。
程序每多存储一个二进制数元,概率空间就会被砍掉一半,空间中剩余可能性的概率就会因此变成两倍。 这表明,1比特的程序复杂度在拟合中至少等价于2增益[4]增益(Gain):此处应指信息增益(Information Gain),代表了在一个条件下,信息复杂度(不确定性)减少的程度。详见:https://baike.baidu.com/item/%E4%BF%A1%E6%81%AF%E5%A2%9E%E7%9B%8A的因子。 如果你试图设计一个电脑程序,对类似于“正反反正正反”的结果都施行显式存储,那么对该种特殊情况的拟合度会提高64倍;这也同时会使概率空间损失6比特的复杂度,摧毁相当于6比特复杂度的其它可能性。 否则,你迟早会决定所有硬币序列都是固定的。
除非你的程序很聪明,压缩了数据,否则就算移动数据中的一个bit到程序描述中也没有任何好处。
所罗门诺夫归纳法用来预测序列的方式是,汇总所有有效的计算机程序——如果任何程序都被视为有效,所罗门诺夫归纳法将变得不可计算——每个程序的先验概率为 1/2 ^N,N为其代码长度,每个程序将与到目前为止观察到的所有数据进行拟合,然后根据各自拟合结果的好坏进一步加权。这就提供了一个由不同程序组成的加权组合,可以预测未来的比特。
最小信息长度形式主义几乎等同于所罗门诺夫归纳法。你发送一个描述代码的字符串,然后发送一个描述代码对应数据的字符串。总信息长度最短的解释是最好的。 如果你将合法的代码集合视为计算机程序空间,而将代码描述语言视为通用机器,那么最小消息长度几乎等同于所罗门诺夫归纳法。 (说“几乎”是因为它选择了最短的程序,而不是汇总所有程序。)
这使我们清楚地看到,当使用 “街上的女士是女巫; 是她干的” 来解释0101010101这个序列中的生成模式时,会产生什么问题。如果您要向朋友发送消息,尝试描述所观察到的序列,那么你必须说:“街上那个人是女巫; 她让这个序列生成了 0101010101。” 对巫术的指责不会缩短信息的其余部分; 你必须详细描述巫术生成的数据。
巫术在质性上允许我们拟合自己的观察数据,但这是因为巫术允许一切,比如说“ 燃素!” 因此,即使提到“女巫”,你仍然必须详细描述所有观测到的数据。你没法通过传输有关巫术的消息来压缩描述观测数据的总长度;这只是添加了一个无用的前沿,增加了了总长度。
真正的鬼祟被隐藏在“这事是女巫干的!”的指示代词“这事”一词中。 女巫做了什么?
当然,由于事后的偏见,锚定效应,虚假的解释,虚假的因果关系,积极的偏见和激情认知,如果一个女人是个女巫,那么她当然会让硬币序列生成出 0101010101的样子。不过马上会讲到那里……
翻译:yzhaobk,糖颗颗
校对:潜艇,塞门
注释