研究解读 · 小互解读

爱丁堡大学发布 20 页免费论文:教你用最简单的方法看懂 ChatGPT 背后的数学

一位统计学者被 AI 行话挡在门外之后,用统计学的标准语言把大语言模型从头到尾重讲了一遍
一分钟速览
  • 一位搞了几十年统计建模的学者想读懂大模型,结果被 attention、Query、Key 这些词拦住了,他的结论是:数学本身不难,难的全是黑话。
  • 于是他写了 20 页免费论文,把 ChatGPT 内部的数学换成统计学的标准说法重讲一遍,前置知识只有三条,都是大学一年级的东西。
  • 被吹得最神的 attention,在他笔下只是一个中学生就懂的操作,真正难的地方另有其处。
起因

数学专家也读不懂 AI 论文,他说全怪那堆黑话

爱丁堡大学商学院的信用研究中心(CRC)挂出了一份 20 页的免费论文,标题就叫《大语言模型的简单数学》。读完它,你能说清 ChatGPT 和 Claude 内部到底在算什么,不用去啃几百页的深度学习教科书。它要求的底子只有三样:会矩阵乘法、知道条件概率、明白统计模型的参数是拿数据拟合出来的。

写这份东西的人叫 Joseph L. Breeden,做了几十年非线性系统建模、统计和语言学研究,自己开着一家分析公司。他本来以为读懂大模型不费劲,结果卡在了词上:

「token 不是一个『query』。语言学家不说『key』。『head』又是什么?我能猜到这些词来自计算机科学,但连号称『无行话』的科普,开口也是 query、key、value。那就从头来过吧。」

Joseph L. Breeden,《The Simple Mathematics of Large Language Models》

attention、Query、Key、Value、head,这些词是从数据库、认知科学、电气工程里搬过来的。搬得不贴切,还挡住了后面那层其实很平常的数学。所以他把这些词全换成了统计学里早就有的名字,每换一个都说明白原来那个词错在哪。这套换名工作是全篇的第二条线,我们放到文章最后收成一张对照表。

问题

大模型只干一件事:猜下一个词

一个语言模型,就是给它一段文字,它给出「下一个词可能是什么」的概率。给它「The cat sat on the(猫坐在……)」,mat(垫子)、floor(地板)、chair(椅子)会拿到高概率,democracy(民主)拿到极低的概率。

它写文章的方式,就是把这个动作重复几百遍:算一遍概率,挑一个词接上去,把接上去的词也算进前文,再算下一个。下面这个演示可以自己点,一步一步走完这个循环。

点一步,模型就多写一个词
The cat sat on the
mat 垫子42%
floor 地板18%
chair 椅子9%
democracy 民主≈0%
这一步模型只做一件事:给词表里每个词打一个概率。挑走概率最高的 mat。
The cat sat on the mat
. 句号37%
and 而且14%
while 当……时8%
purple 紫色≈0%
刚写下的 mat 立刻变成前文的一部分。同样的动作再来一遍,这次概率分布已经完全不同了。
The cat sat on the mat. It
was 是25%
looked 看起来12%
purred 打呼噜7%
democracy 民主≈0%
前文越长,可选的词越收敛。此刻「It」指的是猫,这件事必须靠前面那半句才判断得出来,怎么做到的,是后面几节的主题。
病人被诊断出一种罕见的
血液病29%
遗传病21%
肿瘤12%
星期二≈0%
换个语种、换个题材,动作一模一样。你自己读到这半句时,脑子里也知道接下来该是个病名,模型学的就是这份可预测性。
可点击演示(本站制作,百分比为示意值,非实测):四步走完「算概率 → 挑词 → 把它并入前文 → 再算」的完整循环。模型写一整篇文章,就是这个循环重复几百上千遍。

为什么算一串词的概率就够了?概率论里有个恒等式叫链式法则(是恒等式,不是假设):一整段话出现的概率,可以拆成「第一个词的概率 × 给定第一个词、第二个词的概率 × 给定前两个词、第三个词的概率……」这样一串连乘。所以只要能算「给定前文,下一个词是什么」,整个语言就建模完了。大模型的全部任务就这一件。

难在哪:上下文的组合数比宇宙的原子还多

难点不在这个式子,在于「前文」有多少种。假设词表里有 5 万个 token,那 10 个词的上下文就有 5 万的 10 次方种组合,这个数比可观测宇宙里的原子总数还大。查表是不可能的,你没法给每一种前文都存一张概率表。

所以必须学一个能举一反三的函数:见过「猫坐在垫子上」,就该会处理「狗趴在地毯上」。整篇论文剩下的部分,都在讲这个函数长什么样。

顺带两个清醒剂。其一,把大模型贬成「随机鹦鹉」并不成立,鹦鹉是按几个词的短语频率瞎接话,大模型是扫完一大段前文再接,前文如果是「Genie 解释说她没法清理地板,因为……」,接下去几乎是唯一的。其二,往另一个方向泼冷水:大模型在严格意义上仍然是「有限阶马尔可夫模型」,上下文窗口是写死的,窗口之外的字它原理上就看不见,喂再多数据也不行。
表示

机器不认字:先把词变成点,意思近的挨着放

最省事的做法是给每个 token 编个号:1 号词、2 号词……数学上写成一个只有一个位置是 1、其余全是 0 的长向量。但这么干等于宣布所有词彼此无关:「猫」和「狗」的距离,跟「猫」和「然而」的距离一样远。这显然不对,猫和狗都是动物、都是宠物、都是名词。

换个做法:把每个词表示成一个高维空间里的点(现实中通常是 1000 到 10000 维),意思或语法功能相近的词放得近,不相干的放得远。这些坐标由训练过程自己定出来,没有一个是人手工填的。这套表示法有个通用叫法:embedding(词向量),把一堆离散的词嵌进一个连续的空间里。用统计学的老概念对照,它干的事和主成分分析(PCA)同类:把一大堆属性压进比较少的几个维度,压出来的维度可能有直观含义,也可能没有。

意思近的词,点也挨着 兔子 动物挤成一团 垫子 地毯 家居用品另成一团 然而(远远的) 点之间还能做加减法 king − man + woman ≈ queen (word2vec 里最有名的一条)
示意图(本站绘制):把词表示成空间里的点之后,「相似」变成了可以量的距离,「男女之别」变成了可以加减的方向。