ChatGPT的本质——从数学函数到训练的秘密
上篇Vibe-Spec-Coding——从“写代码”到“表达意图”学了Vibe-Spec-Coding,说到底是AI能力的外在表现。那底层的大模型到底是个啥?为啥它能听懂人话、还能写出代码?
这块我也刚学,试着用咱们写代码的思维来理解一下。
不就是个函数嘛
先说我以前的认知:模型嘛,就是喂很多数据训练出来的东西,具体是啥说不上来。
后来发现,用程序员的视角去看,它就是个函数。
int add(int a, int b) {
return a + b;
}
输入1和2,输出3。ChatGPT也一样:你输入一段文字,它算一通,输出一段文字。
回答 = ChatGPT(问题)
说白了就是一个输入到输出的映射,跟 y = f(x) 没本质区别。
但区别在规模。add函数参数就俩,ChatGPT呢?1750亿个(GPT-3的数据,后面版本不公布了)。
1750亿什么概念?一个人每秒数一个数,数5000多年。用A4纸打出来堆得比珠穆朗玛峰还高20倍。这还只是GPT-3(2020年的数据),现在的模型更大,只是OpenAI从GPT-4开始不公布了。

关于这个数字的说明: 1750亿是GPT-3在2020年公开的参数量。为什么不用最新模型的数据?因为OpenAI从GPT-4开始就不再公布参数量这些技术细节了,GPT-3是最后一个公开了完整技术参数(多少层网络、多大嵌入维度等)的版本。后续GPT-3.5、GPT-4、GPT-5参数量都未公开,但据估计只会更大。不过所有GPT模型的核心工作原理是一样的——不管是1750亿还是万亿级别,机制不变。所以用这个确切的数字来讲,反而更直观。
说实话第一次看到这个数字挺懵的。一个函数有1750亿个参数,这跟咱们平时写的代码完全不在一个量级上。
参数里存的不是答案
这么多参数,存的啥?我以前理解是:把海量问答背下来了。你问"你好吗",它查到"我很好"。
不是的。存的是规律,不是答案。
比如说,你学英语不会把每句话背下来吧?你学的是语法——"第三人称单数动词加s"。掌握了这个,He plays、She runs,不管碰到啥你都能套。
模型的参数也是干这个的。只不过它"悟"出来的规律比语法复杂得多:
-
"打"这个字,"打人"、"打车"、"打牌",意思完全不一样——参数得捕捉这种差异
-
"老张跟老李说他的方案没过"——"他的"指谁?老张还是老李?人能靠上下文推断,参数也得学会这个
-
"外面下雨了,衣服没收"——谁都能猜到后半句的言外之意是"赶紧收衣服",参数得存储这种生活常识
说白了,每一个语言细节——近义词的微妙差异、成语背后的文化典故、不同语气的情绪色彩——背后都需要参数来承载。有人估算过,人类语言里大概有几十万词汇、几百万常见搭配、几千万事实性知识。1750亿参数看着多,从覆盖语言复杂度来说,可能还真不算多。
这也是为啥越大的模型通常越"聪明"——参数多了,能捕捉的规律就多了。
为啥不直接解方程?
既然是函数,1750亿个参数,列1750亿个方程解出来不就行了?咱们中学不都学过消元法嘛。
不行。两个原因。
第一,这"方程"不是线性的。
先插一句,什么是线性与非线性?
线性就是输入和输出成正比。比如买苹果,1斤5块,2斤10块,3斤15块——画出来是一条直线,很好算。
非线性就是有转折。比如学习时间跟考试成绩:从0小时学到1小时,分数涨很多;但从10小时学到11小时,可能几乎不涨了。再比如吃药:1粒有效,2粒可能就中毒——不是简单的翻倍关系。画出来是弯的。
那ChatGPT为什么必须是非线性的?因为语言规律全是拐弯的——"好了"在"考试考好了"是正面意思,在"这下好了吧"是埋怨,在"好了伤疤忘了疼"又是一种用法。同一个词换个语境意思完全不同,这种关系不能用直线表达,得有拐弯。一个有拐弯的、几十层嵌套的系统,没有现成公式能直接算出答案。

第二,就算硬算,n个未知数的计算量是 O(n³) 级别。1750亿的三次方——也就是 (1.75×10¹¹)³,全世界计算机一起跑,算到宇宙结束也算不完。
解不出来就试
那怎么办?试。
跟学骑自行车一样。没人给你一个"保持平衡公式",你就是:上车→歪了→往反方向调→又歪了→再调。摔够了,身体自然就会了。
训练也一样。下面我用一个具体例子,带你跟一遍完整的训练循环。
第一步:随机初始化
训练刚开始,1750亿个参数全是随机小数(大概在 -0.1 到 0.1 之间)。这时候的模型什么都不懂,跟婴儿一样。你问它"你好吗",它可能输出 "@#$%^&*哈哈哈哈的的的"——完全胡言乱语。
第二步:喂数据,让它预测
给它看一句话:"今天天气"。模型的任务是预测下一个词。
因为参数全是随机的,它算出来的结果也完全是乱的。它会给出每个词的可能性(也就是概率):
"电脑" 概率:8%
"苹果" 概率:12% ← 它觉得这个最可能
"真好" 概率:3% ← 其实这个才是合理的
"紫色" 概率:7%
注意,模型输出的不是"一个词",而是每个词的概率。概率越高,它越倾向于选那个词。但刚开始参数是乱的,所以合理的词("真好")概率反而最低。
模型选了概率最高的"苹果"——完全不搭边。
第三步:算 Loss —— 错得有多离谱
告诉它正确答案是"真好"。模型一对比:我猜"苹果",答案是"真好",差的有点远啊。
这个差距用一个数字表示,就是 Loss(损失)。Loss 越大说明错得越离谱,训练的目标就是把 Loss 压到尽可能小。
这个"打分"的思想不只用在训练模型上,现在训练 AI 智能体也是这个思路——让智能体 B 给智能体 A 打分,设定一个分数门槛比如 90 分,A 不断调整直到达标。
第四步:调参数
模型开始分析:是哪些参数导致我选了"苹果"而不是"真好"?每个参数该负多少责任?
然后微调。比如某个参数从 -0.0567 调到 -0.0568,变了 0.0001——非常小的一步。方向是对的:让下次遇到类似句子时,"真好"的概率高一点、"苹果"的概率低一点。
第五步:重复,几千亿次
换下一句话,再来一遍。这个过程走起来是这样的:
第1句话 → 预测错了 → 调参数
第2句话 → 还是错了 → 再调
第3句话 → 错得少了一点 → 继续调
...
第1000句话 → 准确率从 0% 提升到 5%
...
第100万句话 → 准确率 30%
...
第10亿句话 → 准确率 60%
...
第3000亿个词 → 准确率稳定在 75% 左右
每次调整都极其微小——可能就是把某个参数从 0.5012 改成 0.5013——但几千亿次累积下来,量变引发质变。1750亿个参数,就慢慢地从随机的噪音,变成了有意义的知识。

训练背后的机制
预测错了,1750亿个参数,到底调谁?往哪个方向调?调多少?
这块有三个核心机制,我用三个生活场景来讲,看完就懂。
场景一:菜咸了,谁的锅?——反向传播
你炒了一盘菜,尝了一口,咸了。
你开始往回倒推:是盐放多了?还是酱油本身就咸?还是火太大把汤汁收干了、盐分浓缩了?
每个原因的责任不一样。比如你只放了半勺盐但倒了半瓶酱油——那酱油的"责任"就比盐大。
反向传播干的就是这事。模型预测错了,从错误往回推,给1750亿个参数每人算一个"责任值",专业术语叫梯度。责任大的重点调,没责任的就不动。
场景二:调洗澡水——梯度下降
你洗澡,水温不对。
拧一点热水 → 试试 → 不够热 → 再拧一点 → 试试 → 烫了!→ 往回拧一点 → 试试 → 正好。
这个过程就是梯度下降:每次微调一点点,试试效果,方向对了继续,方向错了就往回改。
放到模型里就一个公式:新值 = 旧值 - 学习率 × 梯度。公式里的减号自动保证了方向——不管梯度是正还是负,参数都往"让错误变小"的方向走。
每次改完重新预测一次,Loss 降了一丢丢,说明方向对了。继续。
场景三:蒙眼下山——学习率
你在一座山上,目标是走到最低的谷底,但是蒙着眼睛。
步子太大:一步跨出去,直接从山谷上面飞过去了,摔对面山上。训练里就是 Loss 忽大忽小,怎么都收敛不了。
步子太小:走了几百步还在半山腰,走到天黑。训练里就是太慢,算力和电费都烧不起。
合适的步子:山腰比较陡,步子大一点没关系;快到谷底了地很平,步子收小,小心别走过。
所以实际训练 GPT-3 会动态调学习率:刚开始 0.001 大步快跑,后期降到 0.00001 精细打磨。专业术语叫学习率衰减,说白了:离目标远迈大步,快到了碎步挪。

三个机制串起来:反向传播告诉你"谁该为错误负责"、梯度下降执行"往哪调"、学习率控制"调多少"。每次训练三个一起上,几千亿次循环下来,参数就从噪音变成了知识。
走一遍完整流程
把上面三个机制串起来,实际训练中一次参数更新长这样:
① 预测:"苹果"(错误) 正确答案:"真好" → Loss = 10.5
② 反向传播,一次性算出所有参数的梯度:
参数 A 梯度 = +2.5 ← 责任大
参数 B 梯度 = -1.8
参数 C 梯度 = 0 ← 无关,不动
③ 梯度下降更新(学习率 0.0001):
参数 A: 0.5100 - 0.0001×2.5 = 0.50975
参数 B: -0.3200 - 0.0001×(-1.8) = -0.31982
参数 C: 0.7800(不变)
④ 验证:用刚更新的参数,换下一句话"这部电影___"再跑一次:
新预测 → 新 Loss = 9.2(比 10.5 小了!方向对了)
注意第三步和第四步之间发生了什么:参数更新完之后,模型换了一个全新的输入句子(不是原来的"今天天气"了),用更新后的参数重新预测、重新算 Loss。两次 Loss 对应的不是同一句话,所以不能直接从参数推导出 9.2——这个 9.2 是模型重新跑一遍算出来的结果。只要新 Loss 比旧 Loss 小,就说明参数调整的方向是对的。
然后就换下一句话,重新来一遍。Loss 从 10.5 → 9.2 → 8.7 → ... 一路降到 2.5 左右,模型就训得差不多了。

这些概念后面边学边展开,这里先有个画面感就行。
从"解方程"到"训练"——这不只是换个方法
学完这块我有个挺深的感触。
从解方程到训练,看起来只是技术路线的不同,但往深了想,这其实是两种完全不同的世界观。
传统编程的思路是:你必须彻底搞懂一个问题,才能写出代码来解决它。写个排序算法,你得先知道排序的逻辑是什么;写个计算器,你得先知道四则运算的规则。所有东西都是人定义好的,代码只是把人的思路翻译给机器。
但大模型走了一条完全相反的路。
没人告诉它"语法规则是什么",没人教它"苹果是水果、玻璃会碎、下雨要带伞"。它只是看了几千亿个句子,自己从中"悟"出了这一切。我们甚至说不清它到底是怎么悟出来的——1750亿个参数摆在那,每个参数具体负责什么,没人知道。
换句话说:我们不再试图用公式去精确描述"语言是什么",而是选择相信——数据够多、参数够大,智能会自己长出来。
这个思路跟早年"大数据"有点像。大数据说:不用纠结因果关系,相关性够强就能用。大模型把这个逻辑推到了极致——不仅不用理解因果,连规则都不用写,让模型自己从数据里把一切都学了。
量变真的能引发质变。这不是一句口号,是这一代 AI 能跑通的底层逻辑。
小结
捋一下:
-
ChatGPT就是输入→输出的函数,就是参数多到离谱
-
参数存语言规律,不是背答案
-
语言太复杂、方程算不动,解不了只能"训练"
-
训练就是反复猜→错→改,几千亿次之后自己"悟"出规律
那训练的时候,参数到底怎么从噪音变成知识的?还有个更让人好奇的问题——1750亿参数摆在那,有没有人能说清楚每个参数具体负责什么?
下一篇学这个,加油~
更多推荐

所有评论(0)