用 8 分钟把 ChatGPT 背后的原理讲清楚:一个庞大到难以想象、却只做一件事的数学函数——预测下一个词。
▶ 观看原视频想象你看到一段没写完的话,让你猜下一个词最可能是什么。大语言模型做的就是这件事——而且它不是只猜一个词,而是给每一个可能的词都打上一个概率。
给它一段文本,它输出的不是「答案」,而是一张覆盖整个词表的概率分布:某些词概率高,某些词概率低。这就是模型唯一会做的事。
既然模型只会预测下一个词,那它怎么能写出一整段回答?答案简单到有点反直觉:反复预测。
要做一个聊天机器人,先铺一段「剧本」:描述这是一段用户和 AI 助手的对话,把用户刚输入的话填进去,然后让模型预测助手会说的第一个词。预测出来后,把这个词接到文本末尾,再让模型预测下一个词……如此循环,一个词一个词地把回答「长」出来。
如果每次都死板地选概率最高的词,回答会很僵硬。所以系统会按概率随机采样:大多时候选高概率的词,但偶尔也挑一个稍微不那么靠前的词。正是这点随机性,让文字读起来更自然,也让你问同一个问题时,会得到略有不同的回答。
模型的全部行为,由一堆叫做参数(也叫权重)的连续数值决定。它们就像无数个旋钮,每个旋钮的位置都会微调函数的输出。
这些旋钮有多少?现代大模型动辄几千亿个。这就是 large language model 里 large 的真正含义——不是文本大,而是参数多。没有人手动设定过任何一个旋钮的值;它们完全是训练「拧」出来的。
在拆解训练之前,得先看清楚网络里最小的零件——一个神经元到底在算什么。整张几千亿参数的网络,不过是这个简单运算重复了亿万次。
一个神经元接收上一层若干个数字作为输入。每条输入连线上都挂着一个权重 w(一个旋钮)。神经元做三件事:
① 把每个输入乘以它的权重,再全部加起来(加权求和);② 再加上一个属于自己的偏置 b(决定它有多「容易被激活」);③ 把这个结果塞进一个激活函数,挤压成最终输出。写成一行就是:
关键就在这里:权重和偏置就是「参数」,就是上一节那面墙里的旋钮。改变它们,就改变了这个神经元对输入的反应——训练要拧的,正是这些数。
如果只有加权求和,无论叠多少层,整个网络合起来仍然只是一个「线性」函数,画不出任何弯曲的边界,表达力极弱。激活函数(如 ReLU、Sigmoid)给每个神经元加了一道非线性的弯折——正是这点弯曲,让层层叠加后的网络能逼近任意复杂的关系。
把成千上万个这样的神经元排成一层一层,前一层的输出当作后一层的输入,信号就从输入端一路计算到输出端,最后得到一个预测。这个从左到右、层层求值的过程,就叫前向传播(forward pass)。
把网络的预测和「正确答案」一比,用一个损失函数算出差距有多大——预测越离谱,损失越高。训练的唯一目标,就是把损失降到最低。
现在到了核心。我们有几千亿个旋钮,怎么知道每一个该往哪拧、拧多少,才能让损失变小?答案是求梯度。
把损失想象成一片高低起伏的山地,你站在某一点,想走到谷底(损失最小)。梯度就是当前位置「最陡的上坡方向」,那么反方向就是下坡最快的方向。沿着它迈一小步,损失就降一点——这就是梯度下降。
反向传播正是高效算出「每个权重对损失的影响(偏导数)」的算法:它从输出端的误差出发,利用链式法则把误差逐层往回传,一次性求出所有旋钮该拧的方向和幅度。然后每个权重朝下坡方向挪一丁点,一轮训练就完成了。
把「前向预测 → 算损失 → 反向传播求梯度 → 微调权重」这一整套,在数万亿个文本例子上重复,随机的旋钮就被慢慢拧成了一个能流畅接龙的语言模型。下面这张图把前向(蓝)与反向(粉)合在一张真实网络上看:
一段文本只把旋钮拧一丁点,但亿万次重复之后,模型就学会了语言的规律。这第一个阶段叫预训练(pre-training)。
预训练完,模型只会「续写互联网」,还不懂怎么当助手。于是有了第二阶段——人类反馈强化学习(RLHF):人类标注员会标出哪些回答不好、哪些更受欢迎,模型据此进一步调整参数,逐渐对齐到「乐于助人、符合用户期待」的行为上。
2017 年,Google 的研究者提出了 Transformer。在它之前,模型大多按顺序一个词一个词地读;Transformer 的突破在于——并行处理整段文本,所有词同时被「读」进来。这正好对上了 GPU 擅长并行的胃口,也是大模型得以做大的关键。
计算机不认字,只认数字。所以每个词(更准确说是「token」)先被编码成一长串数字,也就是一个向量。这串数字往往有几百甚至上万维。神奇的是,它能编码词的含义:意思相近的词,向量在这个高维空间里也彼此靠近,而且方向本身有意义——「国王→王后」的位移,和「男人→女人」是同一个方向。
同一个词在不同语境里意思可能完全不同。比如「河 bank」是河岸,「bank 取钱」是银行。一个词的真正含义,取决于它周围的词。注意力(attention)就是做这件事的操作:它让每个词去「看」上下文里的其他词,按相关性吸收信息,从而更新自己的含义。
注意力之后,向量会经过一个前馈网络(MLP),它给模型提供额外的「容量」去存储训练中学到的各种模式与知识。注意力与前馈网络这一对操作会一层层反复堆叠很多次,数据在其中不断流动、含义被层层精炼。最后,模型拿出最末尾那个向量,对它做一次运算,得到「下一个词」的概率分布。
这里藏着一个深刻的事实:模型的具体行为,是几千亿个被调出来的参数共同涌现的结果,没有人为任何一个具体预测写过规则。
正因如此,要解释「模型为什么偏偏在这里给出这个预测」极其困难。我们能精确描述架构(注意力、前馈、堆叠),也能描述训练流程(反向传播、RLHF),但具体到某一次输出背后的原因,往往连开发者都难以完全说清。这就是为什么大语言模型常被形容为「即使对创造者也是神秘的」。