AI是怎么学会的——从做错一道题说起
这是 「AI是怎么回事」 系列的第
5篇。我一直很好奇 AI 到底是怎么工作的,于是花了很长时间去拆这个东西——手机为什么换了发型还能认出你,ChatGPT 回答你的那三秒钟里究竟在算什么,AI 为什么能通过律师考试却会一本正经地撒谎。这个系列就是我的探索笔记,发现了很多有意思的东西,想分享给你。觉得不错的话,欢迎分享+关注。

@AI产出图
想象你面前有 6000 万个旋钮。
每个旋钮可以从 -10 转到 +10。你的任务是:调整这些旋钮,让一台机器能认出猫和狗的区别。
没有说明书。唯一的反馈是:每次调完,机器告诉你”这次猜对了”或”这次猜错了”。
你会怎么做?
随便拧一个旋钮,看看结果变好了还是变坏了?这倒是个思路——但 6000 万个旋钮,每个都这样试一遍,你大概需要几辈子。
可 AI 真的做到了。而且不是用几辈子,是用几天。
它是怎么做到的?
这就是这篇文章要回答的问题。
前情回顾
在上一篇文章里,我们搞清楚了”神经网络”到底是什么——一堆乘法和加法,仅此而已。
具体来说:每一个”神经元”做的事情就是把输入数字乘以对应的权重,全部加起来,再加上一个偏置,最后通过一个叫”激活函数”的东西(就是一个简单的数学变换,决定要不要把这个结果传递下去),得到一个输出。
2012 年震惊世界的 AlexNet 有 6000 万个这样的可调整数字——我们叫它们参数(也就是那些”旋钮”)。
但我们留下了一个核心问题没回答:这 6000 万个数字,是怎么被调到”正确”的位置的?
一开始,这些数字全是随机的。随机的数字,意味着随机的输出——给它看一张猫的照片,它可能说”这是飞机”。
从”一塌糊涂”到”认得出猫和狗”,中间发生了什么?
答案分三个部分:
- 怎么调——一套叫”反向传播”的数学方法
- 拿什么调——海量的数据
- 用什么算——GPU(图形处理器)
这三件事本质上是一件事的三个面。把它们分开讲反而会割裂理解——就像”怎么做饭”这个问题,你需要同时知道”怎么炒”(方法)、”炒什么”(食材)、”用什么炒”(锅),少了任何一个都没法开始。
让我们从”怎么调”开始。
Part1:怎么”调旋钮”
先做一道简单的 题
在讲复杂的东西之前,让我用一个极简的例子来演示整个过程。
假设我们有一个世界上最简单的”神经网络”——简单到只有一个神经元,一个输入,一个输出。
这个神经元做的事情是:
输出 = 输入 × 权重
就这一行。没有偏置,没有激活函数,甚至不是一个真正有用的网络——但它足够帮我们理解”训练”到底在做什么。
现在,假设我们想让这个神经元学会一个简单的规律:输入是 2 的时候,输出应该是 6。
也就是说,我们希望权重 = 3(因为 2 × 3 = 6)。但电脑不知道答案是 3。
一开始,权重是随机的。假设随机到了 0.5。
让我们看看会发生什么:
输入 = 2
权重 = 0.5(随机初始值)
输出 = 2 × 0.5 = 1
正确答案 = 6
输出是 1,但应该是 6。错了。
第一步:量化”错了多少”——损失函数
“错了”是一个笼统的说法。电脑需要一个精确的数字来衡量”错了多少”。
这个衡量错误大小的东西,叫损失函数(Loss Function)。
“损失”这个词你可以理解为”损失了多少分”——就像考试,满分和你的得分之间的差距。损失越大,说明答案越离谱;损失越小,说明越接近正确答案;损失等于 0,说明完全正确。
最简单的损失函数就是:把”预测值”和”正确答案”的差距算出来,再平方。
为什么要平方?两个原因:第一,不管你是猜高了还是猜低了,平方之后都是正数,方便比较;第二,猜得越离谱,平方之后的数字增长得越快,惩罚越大。
让我们算一下:
预测值 = 1
正确答案 = 6
差距 = 1-6 = -5
损失 = (-5)² = 25
损失是 25。这个数字本身不重要,重要的是:它给了电脑一个明确的”分数”——你现在有多差。
训练的目标,就是想办法让这个损失尽可能小。最好是 0。
第二步:知道该往哪个方向调——梯度
现在电脑知道自己错了,损失是 25。
下一个问题:权重应该往大了调还是往小了调?
这里有一个精巧的数学工具叫梯度(Gradient)。
先别被这个词吓到——让我用一个非常直观的类比来解释。
想象你蒙着眼睛站在一座山上,你的目标是走到最低点。
你看不见地形。唯一能做的,是用脚感受一下当前位置的坡度——左脚低还是右脚低?
如果左脚低,说明左边是下坡——你就往左迈一步。 如果右脚低,说明右边是下坡——你就往右迈一步。
每一步都往最陡的下坡方向走。一步一步,你就能慢慢走到谷底。

在训练神经网络的时候,”山”就是损失函数画出来的曲线,”你所在的位置”就是当前的权重值,”走到最低点”就是找到让损 失最小的权重。
而梯度,就是在当前位置”坡有多陡、往哪边是下坡”这个信息。
好,让我们回到具体的数字,把梯度算出来。
我们的损失函数是:
损失 = (预测值 - 正确答案)²
= (输入 × 权重 - 正确答案)²
= (2 × 权重 -6)²
梯度就是:”如果权重稍微变大一点点,损失会变大还是变小?变化的速度是多少?”
如果你学过微积分,这就是对权重求导数。如果没学过也完全没关系——我直接把结果算给你看,你只需要理解它的含义。
梯度的计算结果是:
梯度 = 2 × (预测值 - 正确答案) × 输入
= 2 × (1-6) × 2
= 2 × (-5) × 2
= -20
梯度是 -20。
这个 -20 告诉我们两件事:
- 符号是负的——说明”当前位置往右是下坡”,也就是说权重应该增大(往右走),损失才会减小
- 绝对值是 20——说明坡很陡,离最低点还很远,需要调整的幅度比较大
第三步:调整权重——梯度下降
知道了方向和坡度,接下来就是实际调整。
调整的规则非常简单:
新权重 = 旧权重 - 学习率 × 梯度
这里出现了一个新概念:学习率(Learning Rate)。
学习率就是”每一步迈多大”。它是一个很小的数,通常是 0.001 或 0.01 这个量级。
为什么不能一步迈太大?回到蒙着眼睛下山的类比——如果你每一步迈 10 米,很可能一脚迈过了最低点,跑到对面的山坡上去了。步子小一点,虽然慢,但更稳当。
我们取学习率 = 0.1(为了让例子好算,比实际大一些),来算一下:
新权重 = 0.5-0.1 × (-20)
= 0.5+2
= 2.5
权重从 0.5 变成了 2.5。
来验证一下,用新权重算一次:
输出 = 2 × 2.5 = 5
正确答案 = 6
损失 = (5-6)² = 1
损失从 25 降到了 1。好了很多!
但还不够好。再来一轮。
梯度 = 2 × (5-6) × 2 = 2 × (-1) × 2 = -4
新权重 = 2.5-0.1 × (-4)
= 2.5+0.4
= 2.9
验证:
输出 = 2 × 2.9 = 5.8
损失 = (5.8-6)² = 0.04
损失从 1 降到了 0.04。已经很接近正确答案了。
再来一轮:
梯度 = 2 × (5.8-6) × 2 = 2 × (-0.2) × 2 = -0.8
新权重 = 2.9-0.1 × (-0.8)
= 2.9+0.08
= 2.98
验证:
输出 = 2 × 2.98 = 5.96
损失 = (5.96-6)² = 0.0016
三轮调整之后,权重从 0.5 → 2.5 → 2.9 → 2.98,越来越接近正确答案 3。损失从 25 → 1 → 0.04 → 0.0016,越来越接近 0。

这就是训练的全部过程。 每一轮都做三件事:
- 算一下错了多少(损失函数)
- 算一下该往哪调(梯度)
- 调一点点(梯度下降)
然后重复、重复、再重复。
这个”算梯度→调权重→再算梯度→再调权重”的方法,叫做梯度下降(Gradient Descent)。”梯度”是坡度,”下降”是往低处走——合起来就是”沿着最陡的方向下山”。
从一个权重到 6000 万个权重
你可能会说:”这才一个权重,AlexNet 有 6000 万个啊!”
没错。但原理完全一样——每一 个权重都用同样的方法:算梯度,调一点。
区别在于:当有 6000 万个权重时,这座”山”不再是一条简单的曲线了——它变成了一个 6000 万维的空间里的超级复杂地形。人类无法想象 6000 万维空间长什么样,但数学可以。梯度在任意维度上的计算方法都是一样的:每个权重都有自己的”坡度方向”,每个权重都按照自己的坡度调一点。
这就引出了一个关键的问题:在一个真正的神经网络里,有很多层。最后一层的错误,怎么传递给前面的层?
反向传播:从后往前,层层追责
让我再解释一下这个问题为什么重要。
在第四篇我们讲过,神经网络是一层叠一层的结构:
输入 → 第一层 → 第二层 → 第三层 → ... → 输出
当最终输出是错的,我们能直接算出”最后一层的权重该怎么调”——因为最后一层直接产生了输出,输出和正确答案之间的差距就是损失。
但第一层呢?第一层的输出不直接变成最终答案——它传给第二层,第二层传给第三层,层层传递之后才变成最终输出。第一层的权重要是错了,那个错误会被后 面每一层放大或缩小,等到最终输出的时候,已经面目全非了。
怎么知道第一层的某个权重对最终的错误有多大”贡献”?
答案就是反向传播(Backpropagation,全称 Back-propagation of errors,”误差的反向传播”)。
这个方法的核心思想是 1986 年由 David Rumelhart、Geoffrey Hinton 和 Ronald Williams 发表在《Nature》上的一篇论文中系统阐述的。Hinton 就是后来被称为”深度学习之父”的那位——AlexNet 正是他的学生做出来的。
反向传播的原理用一句话就能说清:从输出层开始,逐层往回算,利用”链式法则”把每一层的梯度传递回前一层。
“链式法则”是微积分里的一个基本规则。不懂微积分也没关系,它的意思很直觉:
如果 A 影响了 B,B 影响了 C,那么 A 对 C 的影响 = A 对 B 的影响 × B 对 C 的影响。
打个比方。你在公司里是一个基层员工(第一层)。你做的方案交给你的主管(第二层),主管交给经理(第三层),经理交给总监(最后一层),总监做了最终决策。
最终决策出了问题。怎么追责?
反向传播的做法是:
- 先看总监(最后一层):最终决策错了,总监的判断偏差有多大?→ 算出总监的梯度
- 再看经理(倒数第二层):总监的偏差中,有多少是经理传上来的信息导致的?→ 用链式法则,经理的梯度 = 总监的梯度 × 经理对总监的影响
- 再看主管(倒数第三层):经理的偏差中,有多少是主管的信息导致的?→ 主管的梯度 = 经理的梯度 × 主管对经理的影响
- 最后看你(第一层):主管的偏差中,有多少是你的方案导致的?→ 你的梯度 = 主管的梯度 × 你对主管的影响
从最后一层开始,一层一层往回算,每一层都知道自己”该调多少”。 这就是”反向传播”——误差信号从输出端反向传播回输入端。

而”前向”的过程——从输入经过每一层计算到输出——叫做前向传播(Forward Propagation)。训练的每一轮,都是先做一次前向传播算出预测结果,再做一次反向传播算出所有梯度,然后调整权重。
为什么叫”批改作业”
到这里,让我把整个训练过程串一遍。用”批改作业”的类比,可能更容易记住:
- 做题(前向传播):给 AI 看一张猫的照片,它经过层层计算,输出”我觉得这是狗”
- 对答案(计算损失):正确答案是”猫”,它说”狗”——损失很大
- 找出哪里错了(反向传播):从最后一层往回追溯,算出每一个权重对这个错误的贡献
- 改错(梯度下降):按照每个权重的梯度,微调每一个参数
- 做下一道题:换一张照片,重复上面的过程
几百万张照片,每张都这样”做题→批改→改错”一遍。 经过足够多轮,那 6000 万个原本随机的数字就会逐渐稳定在一个”很少出错”的状态。
这就是所谓的”训练”。
没有魔法。没有顿悟。没有”灵光一闪”。只有一遍又一遍地算梯度、调权重。
Part2:为什么需要海量数据
只做 3 道题就上考场?
在上面的例子里,我用了一张猫的照片来演示训练过程。
但你可能直觉上就会觉得:一张照片不够吧?
你的直觉是对的。远远不够。
想象一个学生要参加数学考试。如果老师只给了他 3 道练习题,他能考好吗?
可能正好这 3 道题涵盖了考试的知识点,那他运气好。但更大的概率是,考试题稍微换一个形式,他就不会了——因为他见过的题太少,没法总结出通用的规律。
AI 也一样。
如果只给 AI 看 10 张猫的照片,它可能”学到”的是:
- “猫都是橘色的”(因为 10 张里有 7 张是橘猫)
- “猫的背景都是沙发”(因为 10 张都在室内拍的)
- “图片右上角有一个亮点就是猫”(因为碰巧那几张照片的光源在右上角)
这些”规律”对那 10 张照片来说都是对的。但拿到真实世界,一张蓝色俄罗斯蓝猫、站在草地上、光源在左边的照片——AI 就傻了。
这个问题在 AI 领域有一个专门的名字,叫”过拟合”(Overfitting)。
过拟合:背答案的学生
“过拟合”这个词拆开来看:“过度”地去”拟合”(贴合)训练数据。
什么意思?让我用一个更直观的例子。
假设你是一个数学老师,出了 5 道练习题给两个学生。
学生 A 的做法是:把 5 道题的答案全部背下来。第一题选 B,第二题选 C,第三题选 A……
学生 B 的做法是:从 5 道题中总结出解题方法。”遇到这种类型的题,先这样做,再那样做……”
考试来了,5 道新题。
学生 A 傻眼了——这些题他一道都没见过,背的答案全用不上。
学生 B 虽然也没见过这些新题,但他掌握了方法,所以大部分都能做对。
过拟合就是学生 A 的状态——AI 记住了训练数据的”答案”,而不是学会了”方法”。
让我用数字来描述这个图中的直觉:
假设有 5 个数据点:(1,2), (2,4), (3,5), (4,8), (5,10)。
过拟合的模型会找到一条复杂的曲线,弯弯扭扭地精确穿过这 5 个点——在这 5 个点上的损失是 0,”满分”。但如果你问它 x = 1.5 时 y 是多少,它可能给出一个离谱的数字,比如 -3。
正常学习的模型会找到一条大致的趋势线 y ≈ 2x——它在那 5 个点上不一定完全精确(比如 x = 3 时它预测 6,实际是 5),但在新数据上表现好得多。

过拟合的本质问题是:训练数据太少,参数太多。
回想一下我们在学校学方程组——两个未知数需要至少两个方程才能求解。如果只有一个方程,你可以有无穷多个”解”,但大多数都不是我们想要的那个。
AI 也一样。6000 万个参数就像 6000 万个未知数。如果只有 100 张训练图片,就像只有 100 个方程——方程比未知数少太多,存在无数种”解”,其中大部分都是”背答案”式的过拟合。
只有当训练数据足够多,远远超过参数数量时,AI 才会被”逼”着去学习真正的规律,而不是死记硬背。
这就是为什么 AlexNet 需要 ImageNet 数据集里的 120 万张标注图片来训练 6000 万个参数。120 万张还是少了,但好歹比 100 张强太多了。