用初中数学讲明白AI:第六章——海量练习如何锻造大模型
您想知道的人工智能干货,第一时间送达
📚 「大兰写给小兰的暑假阅读:用初中数学讲明白AI」
前面四章,咱们一块一块地把Transformer拆了个底朝天——分词、嵌入、注意力、前馈网络、残差连接、层归一化,零件全都过了一遍。
此刻你面前摆着一台构造精巧的机器。线路齐整,接口规范,乍一看相当唬人。
不过它毫无用处。
并非贬低,纯粹是在描述事实。GPT-3有1750亿个参数,初出茅庐之际,这些参数全部是随机数。你输入"今天天气",它回你"恐龙"。你问它一加一等于几,它告诉你"炒饭"。
一个高配的草包。
问题自然浮现:它究竟如何从一块对世界一无所知的白板,华丽变身为无所不知的ChatGPT?
答案朴素得近乎残酷——
刷题。疯狂刷题。刷到天荒地老。
先来瞅瞅"教材"的分量。
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万个词各打一个概率分。比如:
正确答案"好"的理想概率是多少?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万美元之间。
不同