§ 6.3 · Sub-chapter

损失 & 梯度下降篇

Loss & Gradient Descent · The Engine of Learning

有了数据和模型,接下来的问题就一个:怎么让模型的几十亿参数,从"随机瞎猜"变成"能预测对"?答案是——先定一个"考试分数"(损失函数),再用"蒙眼下山"的办法(梯度下降)不断降低这个分数。这就是所有神经网络学习的核心引擎。

生活场景
🏔️ 蒙着眼睛下山

想象你被蒙上眼睛,扔在一座大雾弥漫的山上,任务是走到山谷最低点。
你看不见路,但可以用脚感——踩一踩四周,哪个方向的地是往下斜的?就往那个方向走一小步。
走一步、再踩、再判断斜度、再走一步——反复几万次,你终究会走到某个"局部最低点"。
这就是训练神经网络时,几十亿个参数在"参数空间"里的行走方式。
这个"斜度",数学名字叫梯度(gradient);"往低处走",就叫梯度下降(gradient descent)

一、损失函数:给模型的"考试分数"

要让模型"学会",你得先告诉它什么叫对,什么叫错。这就是损失函数(loss function)——一个数值,衡量模型预测和真实答案之间的差距。差距越大、损失越大;差距越小、损失越小。训练的全部目标就一句话:让损失变得越来越小

常见的损失函数有两大类:

大语言模型用的几乎全是交叉熵。举例:"我 昨天 吃了 ___",正确答案是"苹果"。模型预测的概率分布可能是"苹果 60% / 香蕉 20% / 桌子 5% / ...."——那损失就是 −log(0.6) ≈ 0.51。如果模型对"苹果"只给出 1% 的概率,那损失就是 −log(0.01) ≈ 4.6——损失大很多,反向传播时"惩罚"也就大很多。

二、梯度:损失曲面上的"斜度"

假设你的模型只有一个参数 w,损失就是一个关于 w 的函数 L(w)——画出来是一条曲线。你所在的位置对应一个 w 值,你想让 L(w) 变小——怎么办?看曲线在你脚下的斜率:斜率为正(曲线往右上走),你就往左走;斜率为负(曲线往右下走),你就往右走。

推广到几十亿个参数,"斜率"变成了梯度——一个几十亿维的向量,指向"损失上升最快的方向"。所以你要往梯度的反方向走一步——这就是梯度下降的核心公式:

w ← w − η · ∇L(w)

其中 η 是学习率(步长),∇L(w) 是当前位置的梯度。这一行公式,本质上就是 ChatGPT、Claude、DeepSeek 学会说话的全部秘密——只不过它要被执行几百万亿次而已。

Analogy · 蒙眼下山的比喻延伸

为什么叫"蒙眼"?因为几十亿维的参数空间,人类根本无法直观想象——工程师看不见"山谷长什么样",只能靠数学工具计算每一步的斜度。为什么叫"下山"?因为损失越低,模型越准。为什么要"一小步一小步"?因为一步太大就跨过山谷冲到对面山坡——学习率太大就是这个后果;一步太小就永远下不到底——学习率太小就是这个问题。

三、SGD:随机梯度下降的实用版

理论上讲,每次更新参数应该用整个数据集计算梯度——这叫"批量梯度下降"(Batch GD)。但十亿条数据算一次梯度要多久?几个小时。这样一天只能走几步——训练不完了。

解决办法:每次只用一小批(batch)数据计算梯度,比如 32 条、256 条、4096 条——虽然梯度不那么"精确",但每一步都快多了。这就叫随机梯度下降(SGD, Stochastic Gradient Descent)。有点像下山时你不是站在原地环顾四周慢慢判断,而是快速踢两脚感受一下斜度就迈步——虽然每一步方向可能有点偏,但总体上走得快、也能到底。

四、Adam / AdamW:现代大模型的默认优化器

纯 SGD 有个问题:所有参数用同一个学习率——但有些参数变化很剧烈,需要小步;有些参数很稳定,可以大步。Adam(2014)解决了这个问题:它给每个参数分别维护一个"惯性"和"变化率"——常变的参数自动放慢、稳定的参数自动加快。就像下山时,脚感灵敏的地方小心一点,脚感稳的地方大胆迈步。

AdamW(2019)是 Adam 的改进版,把权重衰减(weight decay)从梯度里分离出来,正则化效果更好——它是今天几乎所有大语言模型的默认优化器。GPT-3、GPT-4、Llama、Claude、DeepSeek——用的都是 AdamW。

优化器特点常见场景
SGD最朴素,需手动调参视觉任务、小模型
SGD + Momentum加入"惯性",走得更稳ResNet 等经典视觉
Adam自适应学习率,收敛快早期 Transformer
AdamW分离权重衰减,泛化更好现代大模型默认
Adafactor省显存,Adam 的轻量版Google T5、PaLM
Lion只用一阶动量,更省内存2023 新秀,逐渐流行

五、学习率调度:节奏比速度更重要

学习率不是从头到尾固定不变的。业界的标准做法是:Warmup + Cosine Decay——一开始学习率从 0 慢慢升起(Warmup),到达峰值后再按余弦曲线缓慢下降到接近 0。为什么这样?

这跟人学新技能的节奏很像:入门慢慢来、中间发力练、大成之前反复打磨。节奏对了,事半功倍;节奏错了,可能永远学不成

六、反向传播:梯度是怎么算出来的

梯度下降公式说得很好,但那个"梯度"到底怎么算?答案是反向传播(backpropagation)——链式法则的应用。前向传播时,数据从输入一路流到输出、算出损失;反向传播时,损失的"责任"从输出一路推回输入,每一层的参数都能算出"我该改变多少"。

你不需要真的会推导反向传播——PyTorch、TensorFlow、JAX 都自动帮你做了这件事,写代码只需要一行 loss.backward()。但要理解一点:整个训练过程就是"前向 → 算损失 → 反向 → 更新权重"这四步的无限循环,一个 175B 的模型可能要重复这个循环几百万次,才能训练完成。

Recap · 收束

损失函数告诉模型"你错在哪、错多少";梯度告诉模型"该往哪个方向改";优化器决定"每一步的步长和节奏"。这三样合起来,就是神经网络学习的全部机制。听起来简单,但正是这个"一小步一小步下山"的朴素办法,让几十亿参数的巨兽学会了写代码、聊天、画画、推理——数学的力量,就在于此

☰ 主页
Xue Hai Wu Ya · § 6.3 · Loss & GD