把教堂倒过来,人工智能就从绳子上长出来了——这种反直觉的建造法,是不是比代码更像魔法?
高迪在一间工棚里用绳子和沙袋模拟整座教堂的结构。一百多年后,这套靠重力求解的方法,竟和训练大语言模型的核心算法如出一辙。从反向传播到梯度下降,从悬挂的绳索到神经元参数,理解这套机制,等于看透了语言模型如何从错误中学会下一个字。
高迪是西班牙建筑大师,一辈子就干了一件事:让房子自己“长”出来。他从小观察蜗牛和山脊,认定自然界没有直线,所以建筑全用曲线。他用绳子吊沙袋模拟重力,让物理定律帮他设计受力路径,圣家堂的树状柱子就是这样诞生的。他43年没盖完圣家堂,最后被电车撞倒时穿着破烂被误认成流浪汉,葬在自己没完成的教堂地下室,成了全城的遗憾。
重量不会骗人
绳子挂在两颗钉子之间。弯弯地垂下来,像一道软桥。这颗钉子拉住它,那颗钉子也拉住它。每根绳子的每一点都在被拽着。那力量不只是一股蛮力。力带着方向。从上往下拉,从旁边扯,弯度就不同。绳子自己没法决定弯成什么样。它只回应所有拉扯它的东西。一个点受力,它动了。旁边的点跟着动。接着整个网都在动。
高迪的工棚里挂了成百上千条这样的绳子。绳子上还吊着小布袋,袋里装着铅粒。那些铅粒的重量不是随便给的。它们按比例对应着真实建筑要承受的负载。柱子多重,屋顶多重,都换算成铅粒挂在相应的绳结上。你碰一下某个结。它旁边的绳子就偏了。偏了之后,它的拉力变了。别的结感觉到变化,也跟着调整。整个网动个不停,直到所有力量重新配平。这个时候,每一段绳子都不再晃动。每一个结都稳稳地停在那个位置。
你拿出镜子。把倒挂的模型映在镜面上。镜子里,那座教堂正了过来。本来下垂的拱顶,镜中变成向上撑起。软塌塌的绳子,变成了硬挺挺的石柱。所有的弯曲都变成了支撑。所有的拉力都变成了压力。石头怕被拉开,却不怕被压紧。绳子提供的是拉力的路径。反过来看,那就是压力传递的路径。一个力怎么流,形状就怎么长。高迪没有在纸上算过每一块石头的角度。他让重力替他算了。
吊起来的教堂长出了舌头
你现在可以做一件事。拿一根细线,两端系上重物。松开手。它自然会绷直。但如果你把线弯成一个圈,那些相互拉扯的力会找到一个稳态。高迪的模型就是这样。每个节点同时被好几段绳子拽着。每一段绳子都带着方向。那些方向互相抵消又互相成全。一个结被向东拉两格,被向西拉一格,净效果就是向东动一格。但东边那个结动了之后,又会反过来拉它。这就像一群人拔河,绳子不是直的,而是弯的。胜负不是一边倒,而是所有力量达成一个临时协议。
模型里没有人在喊口令。没有总指挥去安排每个结该往哪挪。每个结只知道自己被哪些方向拉着,然后往合力方向挪一点。挪完之后,新的拉力又来了。再挪一点。这个过程持续不断,直到整张网放弃挣扎。这放弃不是垮掉,而是找到了一个所有人都没意见的位置。
高迪的高明之处在于,他先把问题变成物理。建筑学里那些复杂的微分方程,被他替换成了绳子和铅粒。他用重力当计算器。用绳子的弯曲当答案。一座复杂的教堂结构,不是靠画图推出来的,而是靠悬吊测出来的。镜子里的正像,就是最终的施工方案。那些倾斜的柱子和分叉的拱顶,全是力的路径的可视化。每一条线都有它的理由。每一个弯都有它的来历。
那语言模型呢?它学说话的方式,和绳子找平衡的方式几乎一样。模型里面也有成千上万个“结”。它们叫参数。参数之间也有无数条“绳子”连着。那些绳子就是权重。一个参数变了,它会拉别的参数。别的参数变回来,又影响它。整个网络在一个巨大的空间里寻找稳态。这个稳态不是物理上的静止,而是预测上的准确。
接错话的惩罚
随便拿一句英文。Once upon a. 正常人会接 time。因为听得太多,太熟了。大语言模型在训练之前,什么都不会。你给它前半句,它可能接 refrigerator,也可能接 purple elephant。反正不对。训练开始之后,每接一次话,就有一个标准答案在旁边等着它。正确答案是 time。
如果它说错了,模型内部会算一笔账,这笔账叫损失。损失是一个数。这个数越大,说明错得越离谱。训练的目标就是把这个数往下压,压到最低。
但怎么压呢?模型里有几千亿个参数。每一个参数都对最终的输出有影响。你说把损失降低一点。那到底应该动哪个参数?动多少?往哪个方向动?这就像你面前有一块巨大的黏土。你捏了一下左边,右边鼓起来。你捏上面,下面塌下去。你根本没法单独控制任何一处。那些参数互相缠绕。动一个,所有的都跟着变。这和倒挂的教堂模型一模一样。碰一个结,整张网都在抖。
解决这个问题的方法,叫反向传播。反向传播的数学细节可以先放一边。它的原理却很像高迪模型里的那些绳子。你知道了最终的输出错了。这个错误就是一个力。这个力从输出端往回传。穿过一层又一层的计算。每一层都收到一个信号。信号告诉他们,你们这一层的参数对最终的损失贡献了多少。贡献大的,就多动一点。贡献小的,就少动一点。方向也一并算出来了。是加大还是减小。这个信号一直传到最前面。于是,每一个参数都知道了自己该往哪边挪。
你仔细听。这和高迪模型里的“每一个结感觉到拉力后自行调整”是不是同一回事?高迪的结收到的是物理的力。反向传播里的参数收到的是数学的梯度。梯度就是一个带方向的力量。只不过它不在三维空间里拉,而是在几万维的参数空间里拉。方向就是那个空间的“往下走”。目标是让损失更低。
沿着坡往下滚
有了梯度,接下来就是跟着它走。这步叫梯度下降。想象你站在一座山上。雾很大。你看不见山谷在哪。但你能感觉到脚下的坡度。脚底告诉你是朝哪个方向斜下去的。你往那个方向迈一步。海拔低了一点。再感觉一次,再迈一步。反复走,就能走到谷底。参数空间里也是这个道理。高维空间看不见。但梯度告诉你哪个方向是“下坡”。你让每个参数往坡下挪一小步。损失就降一点点。再算一次梯度。再挪一小步。一直走到损失再也降不下去为止。
这个下山的过程,和吊教堂的物理过程惊人地相似。高迪的每个结也是在下山。它在力的作用下往势能最低的地方走。整张网的势能降到最低,它就不动了。那个位置就是平衡位置。神经网络的训练,就是让整个系统的损失函数降到最低。那个最低点,就是模型学到的知识。下降的每一步,都像是给模型一次重挂的机会。绳子重新分布,结重新定位。损失重新计算,参数重新调整。
唯一的不同在于,高迪的沙袋重量是不变的。教堂不会中途变重。但语言模型的错误会变。第一次调整之后,模型已经不一样了。同样的输入,它可能给出新的输出。新的输出会带来新的损失。新的损失产生新的梯度。所以训练不是挂一次就完事。它是反复挂,挂几百万次。每一次都稍微动一动。每一次都重新找平衡。最终,once upon a 后面的概率最大的词变成了 time。
没有人手动把“time”这个词塞进某个参数里。那个行为是从千百亿次下山运动中涌现出来的。
看不见的手
高迪没有亲自去摆每一个绳结。他只是设定了绳子的连接方式和沙袋的重量。然后放手。系统自己动。最后那座教堂的形状就浮现出来。语言模型的设计师也没有亲自去调几千亿个参数。他们设定了网络的结构、训练的数据、优化的算法。然后把数据喂进去。让反向传播和梯度下降去干。参数自己找到了合适的值。那些值决定了模型会怎么接话。会怎么回答问题。会怎么写出像人话的句子。
但这不意味着设计师什么都没做。
高迪的模型能成立,是因为他选对了绳子该连到哪些锚点。他算对了沙袋该挂多重。他把约束给对了。模型才能在这个约束下找到一个好答案。
神经网络也一样。架构选得对,数据选得对,目标函数选得对,训练出来的模型才能好用。
约束给错了,挂出来就是一座歪的教堂。数据给错了,模型学会的就是一堆胡话。
这座倒挂的教堂最终只建成了地下室。地上部分没有盖起来。但那个工棚里诞生的方法,彻底改变了高迪后来的设计。圣家堂那些倾斜的立柱、分叉的树状支撑,都可以追溯到那个工棚里的绳子和铅粒。他没有把形状强加给石头。他让力先画出形状,再用石头去跟随那形状。
语言模型也是同一回事:工程师没有把规则一条一条写进去,他们构造了一个学习的环境,让模型自己去找那些规则。那些规则最后变成了参数分布,看不见摸不着,但能用。
看完教堂再看电脑
高迪的模型有一个镜面。镜子把倒的变正。语言模型的输出就是那面镜子。训练时它是倒的。所有的错误信号往回流。推理时它是正的。输入问句,输出答案。但答案底下是同一个过程:信息在参数之间传递,像力在绳结之间传递。每个节点只处理它收到的信号。然后把它往下一层推。推的过程中,根据梯度的记忆做了修改。最后,一个预测从出口掉了出来。
你回头去看那些绳子,它们什么都不懂。不懂建筑,不懂美学,不懂承重。但它们能让一座教堂立住。因为物理定律替它们工作。再看那些参数。它们也不懂语法,不懂逻辑,不懂常识。但它们能写出通顺的句子。因为数学定律替它们工作。高迪的模型里,每个结只跟相邻的绳打交道。神经网络的每个参数也只跟相邻的层打交道。没有中心调度。没有总指挥部。局部的相互作用,最后汇聚成全局的有序。
那座未完工的教堂现在还在巴塞罗那站着。每年几百万人抬头看那些树一样的柱子。他们看到的是一座建筑。但如果你换一个角度看,你看到的是一张倒挂的网被翻了过来。每一个弧都是力的遗迹。每一根斜柱都是平衡的化身。
大语言模型也是:你看它生成的一段文字,流畅、连贯、像是有人在思考。但背后是一张高维的网。每个参数都在别的参数的拉扯下。它们一起静止在某个能量最低的地方。那个地方,叫做学习完成。
绳子的时代过去了!算法的时代正在眼前。但底层的意象没有变:先搭好骨架,再放手让力去说话。
高迪让重力说话。工程师让梯度说话。说的话不一样,但句法相同。