浓雾里下山:脚下哪边最陡,就往那边迈一步
蒙着眼睛在山上,你不知道谷底在哪。但你能用脚探出四周哪个方向最陡,然后朝那边迈一步。站定,再探一次,再迈一步。一步一步,就下来了。
🧠 一句话结论
梯度是把各个方向的坡度合起来,指出"最陡的是哪边"的一根箭头(又回到第一篇)。梯度下降就是:探出最陡方向,朝反方向迈一步,站定再探。学习率是步子的大小——太大会跨过谷底来回弹,太小会一辈子走不到。
场景问题
接着上一篇的处境:你还在山上,雾大得看不见五米之外,营地在谷底。
你已经学会用脚探坡度了。可新问题来了:上一篇只探了"往前"一个方向。可你是站在一片山坡上,四面八方都能走。
- 往前探,是缓下坡
- 往右探,是陡下坡
- 往左探,是上坡
三个方向三个坡度。那到底该往哪边迈这一步?
凭常识:哪边下得最猛就往哪边走,这样下得最快。可"最猛的方向"未必正好是你探过的那三个中的一个,它可能夹在"往前"和"往右"中间。
怎么把几个方向的坡度合起来,指出真正最陡的那个方向?
实现方案
各方向的坡度合起来,是一根箭头
答案其实在第一篇就埋好了:几个方向上各走一段,合起来就是一根箭头。
- 往前方向的坡度是 3
- 往右方向的坡度是 4
把这两个数当成一根箭头的两个分量——"向前 3、向右 4"——这根箭头指的方向,就是这一点上升得最快的方向;它的长度(第十三篇算过:3 和 4 的平方加起来开根 = 5)就是那个方向有多陡。
这根箭头有个名字叫梯度。但你完全可以一直管它叫"最陡方向那根箭头"。
图里橙色虚线是两个方向各自的坡度,青色那根是它们合起来的箭头——上升最快的方向。
而你要去谷底,所以走紫色那根:梯度的反方向,也就是下降最快的方向。
这就是"梯度下降"这个名字的全部含义:算出梯度(最陡方向),朝它的反方向走。
一步一步挪下去
有了方向,剩下的就是不断重复这三个动作:
- 探:在当前位置算出梯度(最陡方向那根箭头)
- 迈:朝反方向迈一步
- 站定,回到第 1 步
图里一圈圈的是等高线(同一圈上高度一样,越往里越低)。橙点从外围出发,一步步往中心挪。
注意看那串脚印:它不是笔直冲向谷底的,而是一段段折过来的。因为每一步只是"当前脚下最陡的方向",走一步之后地形变了,最陡方向也跟着变。它是走一步看一步,不是一开始就瞄准了终点。
学习率:步子迈多大
方向定了,还剩一个要紧的问题:这一步该迈多大?
这个"步子大小"就叫学习率。它比想象中难伺候:
- 步子太小:方向一直没错,就是太慢。走一万步还在半山腰——训练跑了好几天,几乎没什么进展
- 步子太大:更糟。你朝谷底方向迈了一大步,结果一脚跨过了谷底,落到了对面山坡上。再探再迈,又跨回来。就这么在谷底两侧来回弹,永远落不到底;步子要是特别大,还会越弹越远,彻底飞出去
- 步子刚好:几步稳稳落到谷底
所以学习率不是"越大越快"。 它有一个刚刚好的区间:大到能有效前进,又小到不会一脚跨过头。这也是为什么调模型时,学习率总是最先要调、也最难调的那个数。
走到平地就不动了,但那不一定是谷底
最后一个必须知道的事实。
梯度下降的停止条件很朴素:脚下坡度接近 0 了,说明是平地,没方向可走了,停。
但上一篇刚讲过:平地至少有三种——真谷底、山顶、还有半山腰的一块平台。
蒙着眼的你走到一块平台上,脚下四面都是平的,于是你停下来了。可你压根不知道旁边还有一条更深的沟。
这不是算法写错了,是它天生就看不见全局。它只有"脚下这一点"的信息,永远无从知道翻过下一道坎会不会更低。
好在实践中这没有想象中致命:地形足够复杂时,这些平台往往已经"够低了",未必非要找到全场最低的那一点不可。"足够好"和"最好"之间,工程上通常选前者。
为什么这么做
为什么各方向的坡度合起来正好是一根箭头?
因为第一篇就讲过:几个方向各走一段,合起来就是一根箭头。"向前坡度 3、向右坡度 4"和"向前 3 格、向右 4 格"是同一种写法——一对数字就是一根箭头,指向哪、有多长都定好了。
为什么走梯度的反方向,而不是梯度本身?
因为梯度指的是上升最快的方向,而你要去谷底。加个负号掉头,就是下降最快的方向。 这也是"梯度下降"这个名字的由来:算的是梯度,走的是它的反方向。
为什么要一步一步走,不能一次算出终点直接跳过去?
因为你看不见全局。梯度只告诉你"脚下这一点最陡的是哪边",它对五米之外的地形一无所知。走一步之后地形变了,最陡的方向也变了,得重新探一次。
这正是这套办法的聪明之处:它把一个"看清整座山"的难题,拆成了无数个"探清脚下一点"的简单动作。
为什么别的选择不行
错误直觉一:以为梯度指向谷底
梯度只指当前这一点最陡的方向,它对谷底在哪一无所知。
看上面那张等高线图里的脚印:它是一段段折过来的,不是笔直冲向中心的。因为每走一步地形就变了,方向得重算。
把梯度当成"指向终点的指南针"的后果是:你会觉得"既然方向已知,一步跨到位不就完了"——然后把步子迈得巨大,直接飞出山谷。
错误直觉二:以为学习率越大收敛越快
这是最贵的一个误解。
步子大到一定程度,你会一脚跨过谷底落到对面山坡上;再迈一步又跨回来。就这么两边来回弹,一次也没停在底上。步子再大点,还会越弹越远,彻底发散。
"迈得大"和"到得快"是两回事。 学习率有个刚好的区间:大到能有效前进,小到不会跨过头。太大不是"快一点",是根本到不了。
错误直觉三:以为一定能走到全场最低点
走不到,而且这是算法天生的局限,不是没写好。
它只有"脚下这一点"的信息。走到一块平台上,四面都平,它就停了——根本不知道旁边还有条更深的沟。
但这在实践中没那么致命:地形足够复杂时,这些停下来的地方往往已经够低了。工程上通常要的是"足够好",不是"全场最好"。 明白这一点,你就不会为了追求那个虚无缥缈的最低点,把时间浪费在没有回报的地方。
沉淀结论
- 梯度 = 各方向的坡度合成的一根箭头(回到第一篇):指向上升最快的方向,长度就是有多陡
- 梯度下降 = 探出梯度 → 朝反方向迈一步 → 站定再探,一步一步挪到低处
- 梯度只知道脚下这一点,不知道谷底在哪——所以路径是一段段折过来的,不是笔直冲过去
- 学习率是步子大小:太小走不到头,太大会跨过谷底来回弹甚至越弹越远——不是越大越快
- 走到平地就停,但平地不一定是谷底——可能只是半山腰的一块平台;这是天生局限,实践中"足够好"通常够用
记忆口诀
梯度是各方向坡度合成的一根箭头,指着上升最快的方向。
要下山就走它的反方向。
探一次,迈一步,站定再探。
学习率是步子:太小走不到,太大跨过头来回弹。
停在平地不等于停在谷底。
延伸阅读
- 模型参数就是这样被一点点改出来的:上一篇的罚分构成了一片起伏的地形,模型算出脚下的梯度、朝反方向挪一小步,几百万次之后就"学会"了。详见模型微调。
- 学习率是训练时最先要调的那个数:调大了训练直接崩,调小了几天没进展。这就是本篇"步子大小"那一节讲的取舍。详见大模型核心原理。
自测:合上资料能说清楚吗?
- 几个方向各有各的坡度,怎么合成"最陡的方向"?
参考答案
把各方向的坡度当成一根箭头的各个分量。 "向前坡度 3、向右坡度 4"就是一根"向前 3、向右 4"的箭头——它指的方向就是上升最快的方向,它的长度(3 和 4 平方和开根 = 5)就是有多陡。
这根箭头叫梯度,本质就是第一篇那句"几个方向各走一段,合起来是一根箭头"。
- 为什么走梯度的反方向?
参考答案
因为梯度指的是上升最快的方向,而我们要去谷底。加个负号掉头,就是下降最快的方向。
"梯度下降"这个名字就是这么来的:算的是梯度,走的是它的反方向。
- 梯度是不是指向谷底?为什么下山的路径是折来折去的?
参考答案
不是。 梯度只知道脚下这一点最陡的是哪边,对谷底在哪一无所知。
所以路径是一段段折过来的:走一步之后地形变了,最陡方向也跟着变,得重新探一次。它是走一步看一步,不是一开始就瞄准了终点。
- 学习率调大一点,是不是就能更快到谷底?
参考答案
不是,可能根本到不了。 步子大到一定程度,你会一脚跨过谷底落到对面山坡上,再迈一步又跨回来——在两侧来回弹,一次也没停在底上。步子再大还会越弹越远,彻底飞出去。
"迈得大"和"到得快"是两回事。 学习率有个刚好的区间:大到能有效前进,小到不会跨过头。
- 梯度下降一定能找到全场最低点吗?
参考答案
不能,这是它天生的局限。 它只有"脚下这一点"的信息,走到一块平地就停了——可平地也可能只是半山腰的一块平台,旁边还有条更深的沟,它压根不知道。
但实践中没那么致命:地形足够复杂时,停下来的地方往往已经够低了。工程上通常要的是"足够好"而不是"全场最好"——明白这点就不会为追求那个最低点白费力气。