第4章 优化:让 AI 学会的方法
如果把 AI 的学习比作一场考试,那优化就是它"订正错题"的过程:先看看自己错得有多离谱(损失函数),再一步步把错改小(梯度下降),最后学会怎么改得又快又稳(学习率、小批量、动量与 Adam)。这一章没有高深公式,只有一个贯穿始终的画面 - 蒙着眼,从山顶一步一步往下走。
4.1 损失函数:AI 的"考卷"
上一章我们认识了导数、梯度这些"数学工具",这一章要让它们真正派上用场。先问第一个问题:AI 怎么知道自己学得怎么样?
想象你教一个小孩估房价。他看了一眼房子,猜"这房子值 200 万",可实际上它只值 180 万 - 猜错了 20 万。错多错少,总得有个评分标准吧?在 AI 里,这个评分标准就叫损失函数(Loss Function)。它就像一张考卷:每次 AI 做出一道预测题,损失函数就给它打分,分数越高,说明错得越离谱。
最简单的记法:把"预测值 − 真实值"的差平方,就是这一次预测的失分:
\[ L=(y-\hat y)^2 \]
人话解释:\(y\) 是标准答案,\(\hat{y}\) 是 AI 的预测,差得越远,平方后数字越大,扣的分越多。
为什么要平方?两个好处:第一,不管猜高还是猜低,平方后都是正数,不会"正负抵消";第二,平方让大错误被加倍惩罚 - 差 1 万只记 1 分,差 10 万要记 100 分,逼着 AI 优先去改那些错得离谱的题。
把全班所有题的失分加起来取平均,就是整张考卷的总分,叫均方误差(MSE):
\[ L=\frac{1}{n}\sum_i(y_i-\hat y_i)^2 \]
人话解释:把每个样本的平方误差加起来,再除以样本个数 \(n\),得到"平均失分"。这个数越小,AI 学得越好。
| 预测偏差 | 平方后 | 说明 |
|---|---|---|
| 差 1 万 | 1 | 小错,扣分少,不用太紧张 |
| 差 3 万 | 9 | 中等错误,正常波动 |
| 差 10 万 | 100 | 大错,平方把惩罚放大了 10 倍 |
补充
损失函数其实有很多种,回归任务常用均方误差,分类任务常用"交叉熵"(第 6 章会见到)。这一章你只需要记住一句话:损失 = 错得多离谱的打分,越小越好。
4.2 梯度下降:下山的智慧
损失函数告诉我们"现在错得多离谱",但光知道分数没用,还得知道怎么改。梯度下降(Gradient Descent)就是那个"改错的方法",也是整个 AI 世界最核心的算法 - 几乎所有模型的学习,本质都是它。
想象你被蒙上眼睛,站在一座大山的半山腰,四周全是雾,什么也看不见,但你知道山谷(损失最低的地方)就在某个方向。怎么下山?最笨也最稳的办法:用脚探一探周围的地面,哪边最陡、是下坡,就往那边迈一小步;到了新地方,再探、再迈。一遍一遍重复,你迟早到得了山脚。这座"山"就是损失函数的图像 - 山越高,损失越大;"下山"就是不断把参数往让损失变小的方向调。
问题来了:怎么知道哪边最陡?还记得第 2 章吗?梯度(∇)指向"上升最陡"的方向,那它的反方向 - 负梯度 - 就是"下降最陡"的方向。所以每次更新参数,就沿着负梯度迈一小步。这是整章最重要的一行公式:
\[ w\leftarrow w-\eta\nabla L \]
人话解释:把参数 \(w\) 往损失下降最快的方向挪一步:∇L 告诉你"该往哪走",\(\eta{}\)(学习率)决定"一步迈多大"(下一节细说),减号表示我们走的是下坡,而不是上坡。
每一步走完,损失就变小一点。从一个随机起点出发,一步一步,直到走进山谷 - 这时 AI 就"学会"了。你完全不需要会推导这行公式,只要记住这个画面:蒙着眼、探坡、迈步、重复。
类比:蒙眼下山
"梯度下降"这四个字拆开看:梯度是方向(哪边最陡),下降是目标(往低处走),合起来就是 - 沿着最陡的下坡走。迷路的时候不用慌,脚下就是答案。
4.3 学习率:步子该迈多大
公式里那个 \(\eta{}\)(读作"艾塔"),叫学习率(Learning Rate)。它的地位比你想象的重要得多 - 它决定你"一步迈多大",也就决定了你能不能顺利下山。
还是那个蒙眼下山的画面。如果每一步都迈得特别大,会发生什么?你可能一脚踩空,直接从山坡左边荡到右边;再迈一步,又从右边荡回左边 - 在山谷上方来回"荡秋千",永远落不了地,甚至越荡越远,直接滚出山去。这就是学习率太大的下场:损失不降反升,训练直接发散。
反过来,如果每一步只挪一毫米呢?你当然不会摔,但天黑了你还在山腰上,走了十万步也没到底。学习率太小,训练慢得像蜗牛爬,一天也跑不完一轮。
那多大才合适?答案是"恰到好处":大到足够快,小到不震荡。实践中,人们通常从一个常用值起步(比如 0.01 或 0.001),跑一次看损失曲线,再微调。调学习率就像调方向盘:转太小拐不过弯,转太大直接翻车。
类比:开车过弯
学习率就是方向盘的幅度:转得太小,弯道拐不过来,半天到不了目的地;转得太大,直接冲出路肩。老司机(调参经验)的做法是 - 先给个保守值,看车子(损失曲线)的反应,再一点点修正。
补充
学习率是"超参数"里最出名的一个。超参数就是"在训练开始前由你定、AI 自己学不出来的参数"。新手阶段不用纠结,直接用框架默认值即可;等你学会读损失曲线(4.6 节),再回头调它。
4.4 随机梯度下降与小批量
前面说的梯度下降,前提是每次都要算出"整座山的坡度"。可现实中的山,是用成千上万、甚至上亿条数据堆出来的 - 每算一次梯度,就要把全部数据从头到尾算一遍,又慢又贵。怎么办?
把思路拆开。计算梯度有三种采样方式:全量(Batch)每一次都用全部数据,方向最准,但慢得离谱,数据一多根本跑不动;单个样本(SGD,随机梯度下降)每一次只随机抽一个样本,快是快,但单条数据的坡度往往"带刺",方向抖得厉害,走起来跌跌撞撞;小批量(Mini-batch)每一次随机抽一小撮(比如 32 或 64 个)样本,方向比较稳,速度又够快。
所以,现实中大家用哪种?答案是第三种:小批量。你几乎可以在任何深度学习框架里看到 batch size=32/64 这样的默认设置,说的就是它。它的好处总结成一句话:用一小撮人的意见代替全班的意见,又快又不太跑偏。
为什么一小撮就够用?因为样本之间是有共性的 - 这间房贵,隔壁差不多的房也贵。一小撮样本算出的平均坡度,和全部样本的平均坡度往往八九不离十,误差不大,速度却快了成百上千倍。用一点点精度换大量的时间,这笔买卖太划算了。
| 方式 | 每次用多少数据 | 方向准不准 | 速度快不快 | 现实中使用 |
|---|---|---|---|---|
| 全量(Batch) | 全部数据 | 最准 | 最慢 | 数据少时偶尔用 |
| 单个样本(SGD) | 1 个 | 抖、带刺 | 最快 | 几乎不用 |
| 小批量(Mini-batch) | 一小撮(32/64) | 比较稳 | 快 | 默认选择 ✅ |
类比:小组讨论
全量像是全班一起讨论一道题 - 意见最全面,但吵一次要等所有人说完;单个样本像是只问一个人 - 快是快,但他可能随口说错;小批量像是随机拉几个同学开小组会 - 又快又不会太离谱。你猜老师(训练框架)最爱用哪种?
补充
为什么叫"随机"?因为每次抽哪一小撮是随机的。这种随机性反而可能是好事:偶发的"抖动"能帮模型从小坑里颠出来(下一节就讲小坑),算是一个免费的"逃离机制"。
4.5 动量与 Adam:给下山装上惯性
蒙眼下山走到一半,你可能遇到一个麻烦:路上有个浅浅的小坑,你脚一滑就掉进去了。坑底"下坡也走不动"(梯度为零),可它根本不是真正的山谷,只是个局部最低点。普通梯度下降到了这里就卡住,以为自己到了终点。
怎么冲过去?想想滚雪球:雪球从山上滚下来,越滚越快,带着惯性。路过小坑时,它靠惯性"嗖"地一下就冲过去了,根本停不下来。给梯度下降也装上这种惯性,就叫动量(Momentum)。它的想法是:别只看脚下这一步往哪斜,还要看之前一直在往哪个方向走 - 如果过去十步都在往东,那多半该继续往东,脚下的小坡拦不住你。
\[ \begin{aligned} v&\leftarrow\beta v+(1-\beta)\nabla L,\\ w&\leftarrow w-\eta v. \end{aligned} \]
人话解释:\(v\) 是累积下来的"运动惯性",\(\beta{}\) 是"记性"(比如 0.9,表示记住过去九成的方向)。惯性带着参数冲过小坑,直奔真正的谷底。
动量解决了"卡在小坑",Adam 则更进一步:它给每个参数配上自适应步长 - 走得太快的方向自动收小步子,走得太慢的方向自动放大步子,再叠加动量。效果好、几乎不用调参,所以它是今天深度学习训练的默认选择。你在主书和各类教程里看到的 optimizer='adam',就是它。
补充
Adam 的"自适应"像什么?像老司机对不同路况自动换挡:平地(梯度平缓)加油门,弯道(梯度陡峭)轻点刹车。正因为几乎不用手动调参,Adam 成了主书《人工智能理论与实践》里所有深度学习训练的事实默认。
4.6 优化与训练:看见损失下降
讲了这么多,怎么知道 AI 到底有没有在学?最简单的办法:把每一轮(epoch,把全部数据完整过一遍算一轮)结束时的损失记下来,画成一条曲线,盯着它看。
一条健康的曲线是这样的:开头降得飞快,后面越来越平缓,最后稳稳停在低处 - 像滑雪,陡坡滑完,缓坡慢慢溜。这说明学习率、梯度、动量的配合都正常,AI 正在稳步变聪明。
但曲线也可能长成另外两张脸。一种是不收敛:损失高高低低、基本不降,甚至越走越高 - 多半是学习率太大、在来回震荡(回看 4.3 节),或者数据本身有问题。另一种是过拟合:训练损失一路往下,验证损失却降到一半开始反弹 - 这说明模型开始"背答案"了,见过的题都会,没见过的题全错(第 6 章会详细讲)。
所以读损失曲线就是 AI 的"体检报告":看见它稳稳下降,就放心继续;看见它震荡或反弹,就回头检查步子大小、数据、模型。这一章你学会的,正是让 AI 变聪明的全过程:考卷(损失)→ 下山(梯度下降)→ 调步子(学习率)→ 换采样(小批量)→ 装惯性(动量与 Adam)→ 看报告(损失曲线)。
好消息是,这三种情况都有对策,而且都不玄乎:震荡就调小学习率,不降就检查数据和模型,反弹就回头翻第 6 章。读曲线是"有章可循"的手艺,不是碰运气。
| 曲线长相 | 说明 | 该怎么办 |
|---|---|---|
| 正常下降 | 平滑、稳稳降到低处 | 放心继续训练 |
| 不收敛 | 震荡、基本不降甚至升高 | 调小学习率、检查数据 |
| 过拟合 | 训练降、验证反弹 | 加数据、换更简单的模型(第 6 章详解) |
本章要点
- 损失函数是 AI 的"考卷",衡量错得多离谱;均方误差是最常用的打分方式。
- 梯度下降 = 蒙眼下山:沿最陡下坡方向一步一迈,\(w\) ← \(w\) − \(\eta{}\)·∇\(L\)。
- 学习率是步子大小:太大震荡发散,太小慢如蜗牛,要"恰到好处"。
- 现实中用随机小批量:一小撮样本算梯度,又快又稳。
- 动量给下山装上惯性,能冲过小坑;Adam = 自适应步长 + 动量,是今天的默认选择。
- 训练损失曲线是"体检报告":正常下降 / 不收敛 / 过拟合,三种长相三种对策。





