意识的窄门

世界是并发的,机器是并行的,可从上到下每一层,都在花大价钱给我们讲一个顺序的故事

有一个听起来不值一提的断言,我却越来越相信,它解释了计算机科学里出奇多的东西:人是单核动物。 我们跟一条论证,只能一步一步跟。我们握不住两条同时展开的思路——我们来回切换,而且切得很糟。把这件事当真,你会看见一个模式,在我们造的每一层系统里同时对上焦。

机器在每一层对我们撒谎

你的 CPU 并不按顺序运行你的程序。它疯狂乱序地执行指令,数百条同时在飞——然后严格按程序顺序退役(retire)它们,耗费数量惊人的硅,只为让这场混乱从外面看去,像你的代码在一行一行地跑。编译器在上一层玩同一套把戏:在「as-if」规则下,它可以任意重排,只要可观测的行为与你的顺序程序一致。TCP 收到乱七八糟到达的包,也绝不肯乱序交付哪怕一个字节——哪怕这意味着一切都堵在一个丢失的分段后面。

数据库把这场虚构升格成金标准,还给它起了名字。一次并发执行是可串行化的(serializable),若其结果等价于事务的某个串行顺序。不是某个特定的顺序——随便哪个串行故事都行,只要存在一个。共享内存有自己的版本:顺序一致性(sequential consistency),Lamport 在 1979 年一篇不到两页的论文里给出定义——任何执行的结果,都仿佛所有操作按某个先后顺序依次运行。那个「仿佛」,把整个领域扛在背上;它正是 CPU 和编译器在兜售的同一个「仿佛」。一年之前,他已证明分布式系统中的事件天生只有偏序,而分布式计算的立国之举,就是人工制造一个全序。区块链是极端案例:全世界约半个百分点的电力,烧掉,只为让互不信任的各方就一件事达成一致——账本里条目的顺序

模式是:世界是并发的,硬件是并行的,而每一层我们都在付账——付晶体管,付延迟,付千兆瓦——去维持一个串行的虚构。那么问一句:这场虚构是演给看的?机器不需要它。买主是我们。

单核动物

这道瓶颈不是习惯,是能测出来的。让人几乎同时做两个简单决定,第二个总是乖乖排队——哪怕给钱让人并行处理,人也做不到。往两只耳朵各放一段对话,跟着其中一段的听者,对另一段几乎什么都说不出——有时连那是哪种语言都不知道。意识的工作台,大约只放得下四样东西。而言语,在所有人类语言里,收敛到同一条窄道:每个音节装的信息越多的语言,说得越慢;装得越少的,说得越快;乘积对所有语言都落在每秒四十比特上下。瓶颈不在嘴上。有人论证过——我觉得有说服力——大脑是大规模并行的硬件,上面跑着一台串行的虚拟机,名叫意识;又慢又贵,一如所有仿真。

这就是并发对我们难的原因:对交错的推理,等于在单线程机器上仿真一台并行机器。

这也是写作有效的原因。头脑中的想法不是序列,是一团乱麻——关联同时指向四面八方。而文章是一条线。写作就是拓扑排序: 它强迫这团乱麻排成一个顺序,让每一步为下一步作保,于是每一个暗藏的环、每一道缺口、每一处自相矛盾,都在排序中现形。「写作即思考」的真正意思就是这个;它还给出一个干净的理解力测试:你能把它串行化吗?一团你理不成线的乱麻,就是一团你还没懂的乱麻。

按顺序说话的机器

现在到了奇怪的部分。我们终于用并行硬件造出了心智,而顺序的问题跟着搬了过去。

Transformer 并行地读——注意力把每个词元对它之前的一切同时计算,这正是这些模型能以行星尺度训练的原因。可它一次只说一个词元。我从前把这归入实现细节。两件事改了我的想法。

第一,思维链。强迫模型先把推理串行成一步步,再作答,它就变聪明——测得出来地变聪明;而这如今是理论,不是民间传说。一次前向传播是一张常数深度的并行电路,而复杂性理论几十年前就告诉我们:有些问题据信是天生串行的——再多并行硬件也摊不平它们。给同一个 transformer 足够多的串行步骤,让它把思考说出来,天花板就可证明地抬高。串行化不是机器出于礼貌容忍的人类拐杖。它是摊不平的计算本身。

第二,货真价实的并行心智反正正在到来。扩散语言模型一次起草整个答案,再用几轮精化。投机解码并行猜出许多词元,只保留串行过程本会产出的那段前缀——又是重排序缓冲,只是高了一层。而在研究原型里,模型直接用原始向量推理,不经词语,几个候选的下一步在叠加态中并存。真正并行的思考。它有效。而且没法读。

串行,是我们校验的方式

我想,这才是真正的要点。

上面每一场串行虚构,买的都是同一样东西,而且不是速度——它们付出的恰恰是速度。买的是可校验性。要信一个结果,总得有人从前提走到结论,一步一步,查无缺口。信任要求审计;审计要求重放;重放要求一个顺序。推理轨迹,就是思想的可串行化:里面的计算尽可以狂野而并行,但它欠我们一个解释结果的串行故事。(即便现在,这份轨迹也可能是一纸新闻稿——模型有时汇报它并没有做过的推理——这正是我把它当验证问题、而非产品功能来看的原因。)

AI 最终会怎样并行地思考,我不知道;我想诚实地说,没人知道。但如果机器把真正的思考搬进并行的向量,串行轨迹就成了它们的认知与我们的认知之间最后的接口——而当这个接口消失,我们失去的不是思考。思考,机器会做得很多。我们失去的是校验

串行是好的。不因为它快——它从来不快。因为它是单核动物唯一验得动的东西。