爱丁堡大学发布 20 页免费论文:教你用最简单的方法看懂 ChatGPT 背后的数学
- 一位搞了几十年统计建模的学者想读懂大模型,结果被 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(民主)拿到极低的概率。
它写文章的方式,就是把这个动作重复几百遍:算一遍概率,挑一个词接上去,把接上去的词也算进前文,再算下一个。下面这个演示可以自己点,一步一步走完这个循环。
为什么算一串词的概率就够了?概率论里有个恒等式叫链式法则(是恒等式,不是假设):一整段话出现的概率,可以拆成「第一个词的概率 × 给定第一个词、第二个词的概率 × 给定前两个词、第三个词的概率……」这样一串连乘。所以只要能算「给定前文,下一个词是什么」,整个语言就建模完了。大模型的全部任务就这一件。
难在哪:上下文的组合数比宇宙的原子还多
难点不在这个式子,在于「前文」有多少种。假设词表里有 5 万个 token,那 10 个词的上下文就有 5 万的 10 次方种组合,这个数比可观测宇宙里的原子总数还大。查表是不可能的,你没法给每一种前文都存一张概率表。
所以必须学一个能举一反三的函数:见过「猫坐在垫子上」,就该会处理「狗趴在地毯上」。整篇论文剩下的部分,都在讲这个函数长什么样。
机器不认字:先把词变成点,意思近的挨着放
最省事的做法是给每个 token 编个号:1 号词、2 号词……数学上写成一个只有一个位置是 1、其余全是 0 的长向量。但这么干等于宣布所有词彼此无关:「猫」和「狗」的距离,跟「猫」和「然而」的距离一样远。这显然不对,猫和狗都是动物、都是宠物、都是名词。
换个做法:把每个词表示成一个高维空间里的点(现实中通常是 1000 到 10000 维),意思或语法功能相近的词放得近,不相干的放得远。这些坐标由训练过程自己定出来,没有一个是人手工填的。这套表示法有个通用叫法:embedding(词向量),把一堆离散的词嵌进一个连续的空间里。用统计学的老概念对照,它干的事和主成分分析(PCA)同类:把一大堆属性压进比较少的几个维度,压出来的维度可能有直观含义,也可能没有。
这个思路有语言学的根:1957 年语言学家 J.R. Firth 说过一句后来被反复引用的话,「观其伴而知其词」(You shall know a word by the company it keeps)。出现在相似上下文里的词,意思往往相近。模型学词向量,靠的正是这条规律:能在很多句子里互相替换的词,最后拿到的向量就相似。2013 年的 word2vec 证明这条路走得通,还留下了那个著名的例子:king − man + woman ≈ queen。
可一个词常有好几个意思,一个点装不下
点画好了,新问题马上来。看英文里的 bank:
所以真正要算的是随上下文变形的点:同一个 bank,在存钱那句里靠近「钱」,在散步那句里靠近「河」,由周围的词把它塑形。给每个词配一个固定的点,到这里就不够用了。整个 transformer 架构的存在,就是为了完成这一次塑形。
attention 听着玄,其实就是算个加权平均分
到这里是全文的心脏。作者对 attention 的去魅只有一句话:它在数学上就是加权平均。唯一的巧妙之处在于,权重由模型从数据里学出来,没有一个是人定的。
算学期总评:平时分占 30%、期末占 70%。同样是把几个数合成一个,但每个数说话的分量不同。大模型给一个词算新表示时干的是同一件事,把周围所有词的向量加权平均起来,只不过「谁占几成」是模型自己学的。
拿「The cat sat on the mat」举例,现在要给 sat 算一个带上下文的新表示。cat 是主语(谁在坐),分量应该大;mat 是地点,分量中等;the 是个功能词,分量应该小。把这些分量当权重,把各个词的内容按权重平均一下,出来的就是「知道了上下文的 sat」。
这里作者换了两个词:他把行话里的 attention score 叫作影响力分数,把 attention weight 叫作影响力权重。理由是后者说清了这个数在计算里干什么,前者只是个拟人的比喻。
分量怎么算出来:点积
两个向量方向越一致,它们的点积越大;方向相反,点积是负数。选点积的理由有两条:它是所有关联度量里最简单的一个,算起来快;而且它可导,可导才能用梯度下降去学。
两个人推同一辆车:朝一个方向使劲,力气叠加到最大;一个往东一个往北,只叠加一部分;面对面推,互相抵消。点积量的就是这两股力气有多合拍。
为什么不直接拿词向量点积,非要先过三个矩阵
行话里那三个矩阵叫 Query、Key、Value;作者拒绝用这套数据库比喻,改用中性记号 WA、WB、WC,理由是位置 i 并没有在「查询」任何东西,这里既没有数据库,也没有什么被「查找」出来。
把词向量各自先过一道线性变换再点积,是为了解决两个具体的毛病:
cat 对 sat 的影响,和 sat 对 cat 的影响不是一回事。但点积天生对称(a·b 永远等于 b·a)。让两边各过一个不同的矩阵再点积,不对称才做得出来。
决定「该不该给分量」的特征,和「真正传过去的内容」不是同一批特征。一个矩阵管前者,另一个管后者,模型才学得出这个区别。
第二条用原文的例子最好懂。还是算 sat 的表示:
凭句法:它是这个动词的主语,是个处在主语位置上的名词。
是语义内容:这个主语是一只动物、体型小、家养。
「我跟这个动词有关系」和「我是一只猫」,本来就是两组不同的信息。把它们拆进两个矩阵,模型才有能力分开学。至于这三个矩阵里装的是什么,一开始全是随机数,什么也提取不出来;是在几万亿 token 的训练里被反复调整,才逐渐变成有用的特征提取器。这些结构是被找出来的,不是被规定的。
分数变成分量:softmax 的真名
点积出来的分数有正有负,不能直接当权重用。要先除以一个 √k(k 是向量的维度,除它是防止数值太大出问题),再套一次指数归一化,把一串实数变成一组非负、加起来正好等于 1 的权重。
神经网络管这一步叫 softmax。但统计学家早就认识它,这就是多项逻辑回归里「log-odds 变概率」的那个反变换。softmax 这个名字只描述了它的计算性质(它是 argmax 的平滑版本),完全没提它在统计上是什么。
再给数学口味的读者两条附注。其一,整个影响力分数在数学上是一个双线性形式,把它拆成两个较小的矩阵相乘叫低秩参数化,好处是参数更少、也起到防过拟合的作用。其二,这些矩阵不是唯一确定的:给它们同时乘一个正交矩阵,预测结果分毫不变。所以别指望拆开某个矩阵去读懂它「学到了什么」,这跟因子分析里因子只能确定到一个旋转为止,是同一个老问题。
「多头」不神秘:几十套一起学,分工自己长出来
一套 WA/WB/WC 只能学出一种影响力模式。可词与词之间的关系不止一种:主语和动词是句法关系,近义词之间是语义关系,代词指回前面的某个名词是指代关系,挨着的词又常有语法上的牵连。
做法:并行放 H 套矩阵,各学各的,最后把各套的输出拼起来再投影回原来的维度。实践中 H 通常是 12 到 96。
行话管每一套叫一个 attention head(注意力头)。这个词招来了作者全文最重的一段批评:head(头)暗示它是设计好的、各有分工的部件,像硬盘的读写头那样各自负责读取特定的数据。实际情况正相反,
没有任何指令规定第 7 套负责代词指代、第 12 套负责主谓一致。H 套矩阵结构完全相同、全部随机初始化、被同一个目标(预测下一个词)训练。分工是训练过程里自己长出来的:两套学成一模一样就是浪费容量,所以存在一股隐性的压力逼它们分化。
这件事在统计学里也有对应物:因子分析里各个因子也会分化,原因同样是分头解释不同的变异来源更划算,没有谁给它们分配过角色。所以作者建议把这些并行的东西叫「关系组」(relations),承认当初的架构灵感来自语言学,同时承认学出来的模式只是部分对得上语言学的分类。
堆几十层、记住谁先谁后,这台机器就齐了
一轮加权平均只够让每个词吸收近处的信息。可有些依赖跨得很远,比如这句:
「那位发现了高温超导体的科学家,获得了诺贝尔 ____ 奖。」
空格里大概率是「物理学」,但要判断出来,得把「诺贝尔奖」一路连回中间那个长长的从句之前的「超导体」和「科学家」。解法是把加权平均这个操作堆很多层,一层的输出当作下一层的输入。现代大模型堆 32 到 128 层,每层都有自己完整的一整套参数,层与层之间什么都不共享。这就是参数量爆炸的来源:一个 12288 维、96 层、每层 96 组关系的模型,光这些矩阵就是几百亿个数字。
每层配的三样东西,各治一个毛病
非线性变换治的是「白堆」。最常见的做法叫 ReLU,动作只有一个:把负数全变成 0。不加这一下,多层线性变换会塌缩成一层(线性套线性还是线性),堆再多层也等于没堆。
残差连接治的是训练传不回去。每层不重算整个表示,只做一次增量修正:输出 = 输入 + 修正量。训练时要把预测误差从最后一层反向传回第一层(这个算法叫反向传播),一路连乘的导数会指数级缩小,早期的层最后收不到任何信号,这就是「梯度消失」。加法结构保证导数里永远带着一条恒等通道,信号有路可回。
归一化治的是数值跑飞。每做完一步就把向量拉回均值 0、方差 1,免得数字在几十层里越滚越大或越滚越小。
还差一件事:这台机器天生不认座次
前面漏了个坑。加权平均这个操作,天然把上下文当成一袋词而不是一串词,把句子里的词打乱重排,算出来的影响力分数原封不动。可「狗咬人」和「人咬狗」显然不是一回事。
所以位置必须显式地喂进去。早期做法是给每个词向量直接加一个「位置向量」,标记它是第几个词。缺点是外推:训练时没见过第 10000 个位置,那个位置的向量就等于没练过,到了长文本上就不灵。
而语言学直觉说,真正要紧的是相对位置,一个动词和它的主语隔了两个词,这件事跟它们出现在第 5、第 3 位还是第 500、第 498 位没关系。现在主流的 RoPE(旋转位置编码)就照这个思路做:不加向量,改成按位置把向量旋转一个角度,点积时两个角度自动相减,结果只依赖两个词的距离差。另一条路 ALiBi 更省事:距离越远,影响力分数直接线性扣分,词向量本身一个字不改。
训练就一件事:猜错就调,直到越猜越准
结构齐了,几百亿个数字怎么定?先看出口:最后一层给出的表示,跟词表里每个词的输出向量做一次点积得分,再过一遍前面那个 softmax,就是下一个词的概率分布。作者顺手点破:这一步就是一个以最终表示为特征、有 5 万个类别的多项逻辑回归。
训练目标是最大似然,统计学里的标准配方:调参数,让模型给训练语料中真实出现过的那些句子打的概率尽可能大。取个对数把连乘变成连加,就等价于最小化交叉熵。
它量的是「模型被现实惊讶的程度」。天气预报员说明天 90% 下雨,结果真下了,几乎不意外;说 1% 下雨结果下了,那就是大翻车。训练做的事就是把这个翻车程度一步步压到最低。
怎么压?梯度下降。整个模型从词向量一路到输出概率,是一串可导函数的复合,微积分的链式法则能算出目标对任何一个参数的导数,剩下的交给软件自动完成。实际训练用的是随机梯度下降:每次只抽一小批数据来估这个导数,估得有噪声但没有偏,照样收敛。
作者提醒别把训练想象成「一锅炖」,那是一种误解。真实的前沿模型训练分成好几个阶段,每个阶段都是精心设计过的:
学习率先热身再衰减,训练数据常按从简单到复杂排序(这个技巧叫课程学习)。这一步学的是语言本身的规律。
监督微调让它变得好用,之后用人类反馈强化学习(RLHF)把输出对齐到人的偏好上。
他给的类比是人的教育:小孩分阶段上学,先打基础再上难度,没有谁被一次性泡进全部知识里。大模型的训练最后也走到了同一个思路上。
千亿至万亿
训练语料的 token 量:书、文章、网页、代码
数千块
专用处理器,连跑几周到几个月
数百万美元
一次训练的成本量级
练出来的这个东西,读过的文字比任何人一辈子能读完的都多;考虑到有多少文字写出来之后就再没人看过,它读过的可能比全人类累计读过的还多。
模型学会了很多,但有四件事天生做不到
解剖训练好的模型,能看到没人写进去的结构自己长了出来:有的关系组盯着句法,有的追着代词找它指的人;浅层的那些层多半在处理局部语法和词类,深层的转向语义、篇章结构,以及跨越大段文字的关系。规模够大之后,能力还会发生质变,从 GPT-3 的 1750 亿参数那一代起,连贯写作、看起来像在推理的问答、事实知识、翻译摘要写代码,都是这么冒出来的。
作者把这件事归进「涌现」这个大家族:热力学从统计力学里涌现,流体力学从分子相互作用里涌现,鸟群那些复杂的舞姿来自每只鸟遵守的几条简单规则。宏观现象从微观机制里长出来,而且盯着底层规则看是看不出来的。「预测下一个词」这么一个简单目标,规模拉满之后长出了没人明确写进去的能力,为什么会这样,仍是一个开放的科学问题。
另一半必须同时说:有四件事是这套机制天生做不到的。
它只从文字里学,没有任何感官经验,也就没有办法拿现实去核对自己说的话对不对。
模型优化的目标是似然,不是真相。考虑到训练语料里塞了海量小说和胡话,它是否具备「真」这个概念本身就存疑。
它是强大的模式匹配器,不做形式演绎。训练语料里常见的推理套路它能复现,但换掉变量名、把熟悉的题嵌进陌生的叙事、加几个无关细节,成绩就可能崩。懂逻辑的人不会被这种表面改动骗到。
窗口大小是设计时定死的,通常是几千到几万个 token。窗口之外的字,对模型来说根本不存在。
作者给出的应对方向是把大模型当调度员用:让它把人的意图翻译成一个界定清楚的问题,转交给专门的求解器(定理证明器、符号数学系统、数据库),再把结果翻译回人话。这类混合架构正在冒头,但成熟度还赶不上单体路线。
最后带走:一张黑话翻译表,和这 20 页论文
把全篇的翻译工作收成一张表。左边是你在别处会读到的词,右边是它在数学上的本名,最后一列是那个词坏在哪。
| 你读到的行话 | 数学上的本名 | 原来那个词坏在哪 |
|---|---|---|
| attention score | 影响力分数 | 拟人的比喻,遮住了它在计算里的角色 |
| attention weight | 影响力权重 | 就是加权平均里的那个权重,没有更多 |
| Query / Key / Value | 三个学出来的投影矩阵 | 借自数据库检索。可这里没有数据库,没人在查询,也没有东西被查找出来 |
| attention head | 关系组 | 「头」暗示各有分工、设计好的部件,但它们结构相同、随机起步,分工是训练里自己分化的 |
| softmax | 多项 logit 反变换 | 只描述了计算性质,没说它在统计上是什么,统计学家其实早就认识它 |
全文的结论压成几句:大模型是一个「给定上下文、下一个词是什么」的条件概率分布;核心机制是学出来的加权平均;影响力用投影之后的点积来量;堆很多层、每层放很多组并行关系,就能学出多个层次的复杂关系。用到的数学不出三样,线性代数(矩阵乘法、点积)、概率(条件分布、指数归一化)、优化(梯度下降)。真正了不起的地方在于组合与规模:这些平常的零件被这样搭起来、放大到这个量级之后,长出了看起来像在形成概念、识别复杂关系的能力。
读懂 ChatGPT 的数学不难,难的是那堆唬人的黑话
一位统计老兵把 attention、Query、Key 这些黑话翻译回统计学的标准说法,这一页把整套翻译过程画给你看
↓ 一页读完 · 有一张会动的图
数学专家也被这堆黑话拦在门外
Breeden 做了几十年统计建模和信用风险预测,本以为读懂大模型的数学不难,结果卡在词上:token(模型处理文字的最小单位)不是 query,语言学家从不说 key,head 到底是什么头。他判断这些词是从数据库、心理学、电气工程里硬借来的比喻,借得不准,还挡住了背后本来平常的数学。于是他把整套机制换成统计学的标准说法,重讲了一遍,这就是这篇 20 页免费论文。
- Query、Key、Value、attention head
- 借自数据库和硬件的比喻,没人告诉你它们数学上到底是什么
- 三个投影矩阵、加权平均、并行学出来的关系组
- 会矩阵乘法、条件概率就能看懂
大模型只干一件事:猜下一个词该是谁
给一段文字,模型要算的是下一个词的概率:「The cat sat on the___」,mat 概率高,democracy 概率几乎是零。用概率的链式法则,这本身是概率论里的恒等式,一整段话的概率能拆成一串条件概率连乘,模型的全部任务就是把它算出来。难点是组合太多:词表 5 万个 token,10 个词的上下文就有 5 万的 10 次方种组合,比可观测宇宙的原子还多,查表不可能,只能学一个能举一反三的函数。
被吹得最神的 attention,其实是个加权平均分
词得先变成数学能处理的点,丢进一个高维空间,意思相近的词离得近,坐标是训练学出来的;可一个词常有好几个意思,bank 在「存钱」和「河边」里是两码事,一个固定的点装不下,真正要算的是会随上下文挪位置的点。这是全篇最重的一次去魅:负责挪位置的这套机制叫 attention,数学上就是加权平均,跟算总评成绩一样,平时分占三成、期末占七成,把几个数按不同分量合成一个,权重这里是从数据里学出来的。
怎么拼成一整套:并行几十路,再摞几十层
一套矩阵只学得出一种关系模式,但词与词的关系不止一种,句法、语义、指代、邻近都不一样,所以并行放 H 套矩阵,各学各的。这套东西行话叫「注意力头」,而这个词是全篇被批得最重的一个:它暗示每一套都有设计好的分工,实际上 H 套全部随机起步、被同一个目标训练,分工是自己长出来的。一轮加权平均只够看到附近的词,长距离的依赖得靠往上摞很多层。
模型学会了很多,但有四件事天生做不到
训练完的模型里,确实能看到没人写进去的结构自己长出来,有的关系组追句法,有的追指代;规模够大后能力还会发生质变,从连贯写作到翻译摘要写代码都是这么冒出来的,为什么会这样,仍是个没解开的科学问题。但这套机制画着四条死线,是论文原文列的。
✔ 规模拉到 GPT-3 那个量级后,连贯生成、翻译、看着像推理的问答都冒出来了
✘ 无接地:只学文字,没法拿现实核对自己说的话
✘ 会一本正经地编:优化的目标是概率,不是真相
✘ 不做严格推理:换个变量名、塞进陌生的叙事,模式匹配就可能翻车
✘ 上下文有边界:窗口外的字,模型原理上看不见
论文给的出路:别让它单打独斗,把它当调度员,翻译问题、转给定理证明器或符号数学系统求解,再把结果翻译回来
全篇做的其实是一件事:把黑话换回人话。
- attention → 加权平均,权重是学出来的,没有更多
- Query / Key / Value → 三个投影矩阵,没有数据库,没人在「查询」什么
- attention head → 关系组,结构相同、随机起步,分工是训练自己分化出来的
- softmax → 统计学的老熟人,多项逻辑回归里「log-odds 变概率」的反变换
什么意思
砸过来
democracy不像
还多
会举一反三的东西
「坐」是什么意思
分工吗
是练出来的
指代一组
到底行不行
- × 无接地,核对不了现实
- × 会一本正经编
- × 不做真推理
- × 窗口外看不见
学界没公认