乐于分享
好东西不私藏

「用初中数学讲明白AI」第5章:万亿道题的考试——大模型怎么训练出来的

「用初中数学讲明白AI」第5章:万亿道题的考试——大模型怎么训练出来的

单击上方图灵人工智能”,选择“星标”公众号

您想知道的人工智能干货,第一时间送达

仅用于学术分享,如有侵权留言删除

📚 「大兰写给小兰的暑假阅读:用初中数学讲明白AI」

前四章,我们一块一块地把Transformer拆了个底朝天——分词、嵌入、注意力、前馈网络、残差连接、层归一化,零件全看过了。

现在你面前有一台结构精妙的机器。线路齐全,接口标准,看着就很厉害。

但它是个废物。

不是骂它,是陈述事实。GPT-3有1750亿个参数,刚造出来的时候,这些参数全是随机数。你输入"今天天气",它回答"恐龙"。你问它一加一等于几,它告诉你"炒饭"。

一个精密的傻子。

那问题来了:它到底怎么从一个对世界一无所知的白板,变成什么都能聊两句的ChatGPT?

答案朴素得让人有点不甘心——

做题。做海量的题。做到宇宙尽头的题。

课本有多厚?人读6万年,机器读几十天

先看看"教材"。

GPT-3的训练数据大约45TB文本。45TB是个很抽象的数字,我换个你能感受的说法。

一本普通的书大约10万字,差不多50万字节。45TB等于45万亿字节。我来算一下:

45,000,000,000,000 ÷ 500,000 = 90,000,000

9000万本书。

全世界自从印刷术发明以来,出版过的书大概一两亿本。GPT-3的训练数据量接近人类出版总量的一半。当然,它读的不全是书,还有网页、论坛帖子、维基百科、GitHub代码、Reddit吵架记录……什么都有。互联网上能扒下来的文字,基本都扒了。

这些数据让一个人来读,每天8小时,全年无休——大约需要6万年。

6万年。智人走出非洲到今天也就七八万年。你得从旧石器时代开始读,读穿整个人类文明史,读到今天还差一截。

机器呢?

3000张NVIDIA V100 GPU同时开工,几十天搞定。

不是它比你聪明。是它比你快了几十亿倍。

这种碾压不讲道理,但讲物理——3000块芯片并行运算,每秒处理的数据量相当于几万个人同时翻书。在算力面前,人类引以为豪的阅读能力简直像乌龟赛跑。

好了,课本的厚度你感受到了。现在来看这个傻子怎么"上课"。

一个训练目标:猜词,猜错了就挨打

从第一章讲到现在,核心始终是同一句话:猜下一个词。

模型看到"今天天气",要猜下一个词是什么。看到"今天天气真",再猜下一个词。训练数据里的原文是"今天天气真好",那正确答案就是"好"。

本质上就是一道填空题:"今天天气真___。"

从5万个候选词里挑一个填进去。

猜对了——很好,奖励一朵小红花(数学上就是损失值很小)。

猜错了——这才是关键——得有人告诉它错了多少,然后揍它一顿让它改。

"揍它一顿"这个说法当然不严谨,但精神是对的。整个训练过程就是一个大型"做题→批改→纠错→再做题"的循环。和你初中刷数学题的经历一模一样,只不过题量大了大概一万亿倍。

那谁来批改?总得有个阅卷老师吧。

阅卷老师:损失函数

这位"阅卷老师"的学名叫损失函数(Loss Function)。名字挺唬人,干的事其实非常直觉。

模型看到"今天天气真",要从5万个词里挑出"好"。它不是直接给一个答案,而是给5万个词各打一个概率分。比如:

  • "好":0.3
  • "不":0.25
  • "棒":0.15
  • "差":0.1
  • 其余几万个词瓜分剩下的0.2

正确答案"好"的理想概率是多少?1.0——百分之百确定就是它。

模型只给了0.3。

差距:1.0 - 0.3 = 0.7。

这个0.7就是"错得有多离谱"的一种直觉理解。实际计算用的是交叉熵损失,涉及对数运算——严格来说超出初中范围了,但核心逻辑完全一样:正确答案的概率越低,损失值越大,说明这道题答得越烂。

打个比方:你考试丢了70分和丢了5分,心情是两码事。损失函数就是那个冷冰冰的扣分单,不跟你讲感情,只跟你讲数字。

如果模型给正确答案打了0.01的概率——几乎不把它当回事——损失值巨大,相当于100分的卷子考了个位数。

如果模型给正确答案打了0.95——非常有信心——损失值很小,这道题接近满分。

每做完一批题,损失函数就给出一个总分。训练的目标就是让这个总分越来越低——从一开始的"全面崩盘",慢慢进步到"偶尔失手"。

知道错了多少,接下来就该改了。

但改什么?1750亿个参数,到底是哪些出了问题?

甩锅链条:反向传播

这就是反向传播干的事。

名字倒是挺贴切——"反向"传播,从结果开始往回查。我给它起了个更形象的名字:甩锅链条

想象一下:你们公司出了一个产品,客户投诉说质量太差。老板怒了,先问负责发货的最后一个环节:"你干了什么?"发货部说:"我就打了个包,产品是生产线给我的。"老板去问生产线:"你们怎么搞的?"生产线说:"原材料就有问题,去问采购。"采购说:"预算就那么点,你让我买什么好材料?"

一层一层往回追责。

反向传播做的就是这件事,只不过不是追人的责,是追参数的责。

GPT-3有96层Transformer Block。输出层发现答案错了,反向传播从最后一层开始,一层一层往回算:这一层的参数对最终错误贡献了多少?那一层呢?再上一层呢?

贡献大的参数,重重地调。贡献小的参数,轻轻地调。没什么贡献的,不调。

数学上,这用到了链式法则。链式法则是微积分里的东西,严格来说超出初中范围。但直觉特别好理解——

如果A影响B,B影响C,你想知道A对C的影响有多大,就把"A对B的影响"和"B对C的影响"乘起来。

就是个连乘。

你去超市买了3袋苹果,每袋5个,每个2块钱。总花费 = 3 × 5 × 2 = 30元。如果你想知道"多买一袋对总花费的影响",就是5 × 2 = 10元。一环扣一环,乘过去就行。

反向传播的链式法则,本质就是这种"一环扣一环的乘法"。只不过环数不是3个,而是96层,每层里面又有无数个参数节点。乘法链条长得吓人,但原理就是小学学的连乘。

说白了,反向传播就是一个大型甩锅现场。最后一层说"不是我的错",把锅甩给上一层;上一层说"也不全怪我",把锅分成几份继续往上甩。96层甩下来,每个参数都领到了属于自己的那一份"过错"。

然后各自闷头改正。

但改多少?这就引出了下一个问题。

学习率:步子大了容易扯到蛋

参数知道该往哪个方向调了,但调多大幅度?

这就是学习率要管的事。

我发现用数轴上找点的例子特别好懂。假设你站在数轴的0位置,目标在7.3的位置。你看不到目标在哪,但有个声音告诉你"往右走"。

步子太大的情况——每步走5:

第一步到5。第二步到10——跳过去了。往回走,到5——又跳过去了。

来来回回,永远停不到7.3上。在目标两边跳大绳,看着很努力,其实在做无用功。

步子太小的情况——每步走0.001:

从0到0.001,然后0.002,然后0.003……照这个速度走到7.3,需要7300步。要是中间有个坑(比如0.5的位置有个"假目标"),你可能就掉进去了,觉得"差不多到了吧",然后安心待着。

这叫陷入局部最优。通俗说就是——你以为自己到了山顶,其实只是爬上了一个小土坡。

合适的步子——也许0.5:

走15步左右到目标附近,然后自动缩小步子,精雕细琢。

实际训练中,学习率通常是一个小得不像话的数字,比如0.0001。而且不是一成不变的——训练初期步子稍大,快速找方向;训练后期步子缩小,精细打磨。这个过程叫学习率调度(Learning Rate Schedule)。

调学习率是训练大模型最重要的"手艺活"之一。

我犹豫了一下要不要说得这么绝对——但想了想,确实如此。没有公式能告诉你最优学习率是多少。靠经验,靠实验,靠反复试错,靠一点点运气。

调错了会怎样?

几百万美元打水漂。不是修辞,是字面意思。

烧钱实录:几千万美元买一个模型

说到钱,我们来聊聊训练成本。

训练一次GPT-3,需要大约3000张NVIDIA V100 GPU,昼夜不停跑几十天。

这什么概念?我来帮你算一笔账。

一张V100当年售价大约一万美元。3000张就是3000万美元——这还只是硬件采购。

电费呢?3000张显卡24小时满负荷运转,功耗大约是每张300瓦。3000 × 300 = 900,000瓦 = 900千瓦。一天的耗电量是900 × 24 = 21,600度。按工业电价每度0.1美元算,一天电费2160美元。跑30天就是6.5万美元。

等等,6.5万美元,听着也不多嘛?

别急。这只是电费。还有机房租金、散热系统(3000张显卡挤在一起产生的热量够供暖一栋写字楼)、网络带宽、存储设备、一整个工程师团队的工资。

综合下来,训练一次GPT-3的成本大约在400万到1200万美元之间。

不同来源给的数字差异不小,因为算法不同。但数量级是确定的:百万美元级别。

而且——这只是GPT-3。

GPT-4的训练成本据传超过1亿美元。到了最新一代的模型,有些传言说单次训练成本已经逼近10亿美元。虽然没有官方确认,但趋势是清楚的:每一代都贵得多。

这意味着什么?

全世界能玩这个游戏的玩家,一只手数得过来。这不是技术门槛——论文是公开的,算法是公开的,GitHub上连参考实现都有。

门槛是钱。

纯粹的、赤裸裸的、资本的门槛。

你可以把大模型训练想象成建造航空母舰。设计图纸谁都能看,但掏出几十亿美元把它造出来?全世界没几个玩家。

好了,最烧钱的部分聊完了。现在来聊一个我觉得更有意思的问题——模型训练好了,它怎么"说话"?

模型怎么选词:贪心策略和它的无聊人生

模型训练完了。它脑子里装着一堆概率——对任何输入,它能给5万个词各打一个概率分。

问题是:怎么从这5万个概率里选一个词,拼出一句完整的话?

最直觉的做法:每次都选概率最高的那个词。

这叫贪心解码(Greedy Decoding)。听着特别合理——既然你觉得"好"的概率最高,那就选"好"呗,稳赚不亏。

但我跟你说,贪心解码生成的文字,无聊到让人想摔键盘。

我试过把ChatGPT的温度调到最低(约等于贪心模式),让它写个故事。写了三段我就不看了——不是因为错,恰恰是因为太"对"了。句式重复,用词保守,像一个永远背标准答案的三好学生。安全,正确,但无聊透顶。

更要命的是,贪心解码特别容易陷入循环。模型发现某个句式概率很高,就一直重复——"这是一个非常重要的问题,因为它非常重要,所以我们要重视这个非常重要的问题。"

跟小学生凑字数一个德性。

所以实际使用中,我们不会只挑概率最高的。我们需要给模型加一点"随机性",让它不那么死板。

这就引出了温度参数。

温度:把好学生灌醉的旋钮

温度(Temperature)控制的是概率分布的"尖锐程度"。这话有点抽象,用数字说就清楚了。

假设模型给出三个候选词的原始概率:

  • "好":0.7
  • "棒":0.2
  • "美":0.1

现在我们调温度。

温度 = 0.5(低温度),概率变成大约:

  • "好":0.85
  • "棒":0.12
  • "美":0.03

高的更高,低的更低。分布变"尖"了,像一根针。"好"这个词几乎板上钉钉。

温度 = 2.0(高温度),概率变成大约:

  • "好":0.40
  • "棒":0.33
  • "美":0.27

分布变"平"了。三个词被选中的概率差不多,随机性大大增加。

我来真的算一遍,让你看看温度到底在干什么。

原始的概率计算是这样的:模型先输出三个"原始分数"(学名叫logits),假设分别是2.0、1.0、0.5。正常情况下通过softmax函数把它们变成概率(具体就是各自取e的次方然后除以总和),大约得到0.7、0.2、0.1。

温度的作用是:在softmax之前,把原始分数除以温度值。

温度 = 0.5时,分数变成 2.0/0.5 = 4.0,1.0/0.5 = 2.0,0.5/0.5 = 1.0。分数差距被拉大了,softmax之后大的更大、小的更小——0.85、0.12、0.03。

温度 = 2.0时,分数变成 2.0/2.0 = 1.0,1.0/2.0 = 0.5,0.5/2.0 = 0.25。分数差距被压缩了,softmax之后三个概率接近——0.40、0.33、0.27。

就这么一除,效果天差地别。

温度低,模型像一个严谨的会计——每个字都经过反复确认,决不冒险。安全,但了无生趣。

温度高,模型像一个喝了二两白酒的诗人——偶尔蹦出惊艳的句子,但也可能蹦出不知所云的东西。

温度再高呢?比如10.0?原始分数除以10,差距几乎被抹平,概率分布接近一条平线。模型基本就是在5万个词里抽签。输出的是纯粹的胡言乱语——就像那个诗人不是喝了二两,而是灌了两瓶,直接趴桌上说梦话。

反过来,温度降到接近0?分数除以一个极小的数,差距被放大到无穷大。概率分布变成一根针尖,永远选概率最高的那个词。退化成贪心解码——无聊,但安全。

所以你在用ChatGPT的时候,想让它写诗、编故事、搞头脑风暴——调高温度。想让它答事实题、写代码、做数学——调低温度。

一个参数,就能切换模型的"性格"。

有没有完美的温度?

没有。取决于你在干什么,甚至取决于你个人的品味。有人觉得ChatGPT太保守,有人觉得刚刚好。这不是一个有标准答案的事。

我倒觉得这是最有意思的地方:一个纯粹的数学系统,最终的使用效果居然要靠人的主观判断来调。数学给了你工具,但拿这个工具做什么、怎么做,还是你说了算。

机器负责计算,人类负责审美。这个分工,我觉得还挺好。

串一遍:从白痴到ChatGPT的完整流程

让我把整个训练过程用最简洁的方式过一遍。

第一步,准备数据。45TB文本,从互联网上扒下来,清洗、去重、过滤掉垃圾内容。这一步本身就是个大工程——互联网上有多少乱七八糟的东西你心里有数。

第二步,初始化模型。1750亿个参数,全部设为随机数。此刻的模型是一个纯粹的白痴。

第三步,喂一批数据。模型看到一段文本的前半句,预测下一个词。

第四步,算损失。损失函数告诉它猜得有多离谱。

第五步,反向传播。沿着甩锅链条一层层往回查,算出每个参数该怎么调。

第六步,更新参数。按照学习率控制的步幅,调整参数。

然后回到第三步。

就这六步,一直循环。循环多久?直到损失值降到足够低——或者预算花光了。哪个先到就停。说实话,经常是后者先到。

通常要循环几千亿次预测之后,模型才开始"开窍"。

一开始,它连"句号后面通常大写"都不知道(对英文来说)。

训练一阵子,它学会了基本语法——"我"后面可以接"是""要""在",但不能接"了的是"。

再训练一阵子,它学会了常识——知道"水往低处流",知道"巴黎是法国首都",知道"太阳从东边升起"。

训练到后期,进步越来越慢。从95分往96分爬,每提高0.1分都要烧掉海量算力。

但正是在这个"缓慢爬分"的阶段,奇怪的事情发生了——模型突然能做简单的数学题了。突然能写还算像样的代码了。突然能做多步推理了。

没有人专门教过它这些。它只是把填空题做得够多了。

量变引发质变。这不是玄学,是统计规律在天文数字的数据上涌现的结果。

不过这个话题值得单开一章——后面聊"涌现"时再展开。

一个微妙的事实

最后说一件容易被忽略的事。

训练出来的模型,严格来说只会做一件事:给定前文,续写下文。

你问它"中国的首都是什么?",它可能不回答"北京",而是接着写——"这是一道常见的地理考试题,答案是北京。通常这类题目出现在初中地理课本的第三章——"

它在"续写",不是在"回答"。

因为它的训练数据里,这种问句后面往往就跟着这种教辅材料式的内容。它只是在忠实地做它唯一会做的事:根据前文统计规律,预测最可能出现的后文。

想让它从一台"自说自话的文字补全机"变成"有问必答的聪明助手",还需要后面的步骤——微调和对齐。那是下一章的事。

但不管后面怎么调教,预训练才是地基。没有这个地基,后面一切都是空中楼阁。

而打这个地基的方式,朴素得近乎可笑:

做填空题。做错了就改。改完接着做。做了几万亿道。

花费:3000张GPU,几十天,数百万到上千万美元。

就这样。一个什么都不会的随机数生成器,靠着做了人类无法想象的题量,变成了一个什么都能聊两句的"百科全书"。

没有魔法。没有灵光一现。

只有算力、数据和一个简单到不能再简单的训练目标——猜下一个词。

猜了万亿次之后,它看起来就像是在"思考"了。


这是「用初中数学讲明白AI」系列文章。一套普通人也能听懂的AI世界观。

文章精选:

1.图灵奖得主姚期智最新演讲: AI有边界,恰恰是好事

2.图灵奖得主本吉奥警告全网:AI已经学会“演给安全测试看”,下一代我们可能真的抓不住了!
3.图灵奖得主萨顿 WAIC 2026 最新演讲:现在的 AI 还不算真智能,我们正迈入经验时代
4.菲尔兹奖得主陶哲轩最新访谈:未来数学属于人类与 AI 的混合体
5.图灵奖得主、AI教父辛顿:AI已具备意识,且将进化成远超人类的智能生命体
6.图灵奖得主、“AI教父”辛顿认错:我当年想得太简单!卡死医疗AI落地的,其实是背后的法律
7.图灵奖得主Bengio预言o1无法抵达AGI!Nature权威解读AI智能惊人进化,终极边界就在眼前
8.图灵奖得主、强化学习之父Rich Sutton:大语言模型是一个错误的起点
9.图灵奖得主杨立昆:大语言模型缺乏对物理世界的理解和推理能力,无法实现人类水平智能
10.压缩即是全部 —— 菲尔兹奖得主 Michael Freedman 给数学和 AI 的一封信