3.3 微积分:理解优化
梯度:函数在某点的”最陡上升方向”。AI 训练的目标是让损失函数(衡量模型多差)尽可能小。怎么找到最小的点?每一步沿着梯度的反方向走——这就是”梯度下降”。
你不需要手算梯度——PyTorch 的 autograd(自动求导引擎,它像账本一样默默记录你做的每一个运算,需要梯度时自动沿着记录反推回去,你完全不用碰数学推导)自动帮你算。但你需要知道:模型在训练时,每算完一轮 loss,会自动计算每个参数的梯度,然后更新参数。
学习率:“每一步走多大”。太大——错过最优解,震荡。太小——走得太慢。Adam 优化器(目前最主流的优化算法,它给每个参数分配独立的学习率,自动调整步幅大小,省心且效果稳定)通常默认 0.001,SGD(随机梯度下降,最朴素的优化方法——每次随机抽一小批数据算梯度,然后朝梯度的反方向迈一步,简单直接但调参麻烦)通常默认 0.01。Fine-tuning(微调) 时——也就是拿一个已经训练好的大模型,用你的少量专属数据稍微调整一下——学习率通常更小(0.0001),因为模型已经有了很好的基础,大步修改反而会破坏它。
链式法则:反向传播的数学基础。“如果 A 影响 B,B 影响 C,那么 A 对 C 的影响 = A 对 B 的影响 × B 对 C 的影响。” 反向传播就是沿着网络从输出向输入,用链式法则逐层传播梯度。
3.3.1 导数:变化率的数学语言
导数回答一个简单的问题:“在这个点上,函数变化有多快?”
直觉:你开车从北京到上海。导数就是仪表盘上的速度——在任意时刻,你前进的速度是多少。如果路程函数是 s(t),那么导数 s'(t) 就是速度函数。
数学定义:f'(x) = lim(h→0) [f(x+h) - f(x)] / h
导数 = 函数在 x 点的切线斜率。斜率大 = 变化快,斜率小 = 变化慢,斜率为 0 = 到达极值点(山顶或山谷)。
在 AI 中:训练神经网络时,你关心的是”损失函数对每个参数的导数”。导数为正 → 参数增加会导致损失增加,所以要减小参数。导数为负 → 参数增加会导致损失减小,所以要增大参数。梯度下降就是沿着导数的反方向走。
3.3.2 偏导数:多变量函数的导数
当函数有多个输入变量时,你需要知道”每个变量单独对输出的影响有多大”。
直觉:你烤蛋糕,蛋糕的好坏取决于面粉量、糖量、鸡蛋数量、烘烤温度。偏导数回答的是:“在其他条件不变的情况下,多加一克糖,蛋糕口感变化多少?”
数学上:∂f/∂x 表示对变量 x 的偏导数——把其他所有变量当成常数,只对 x 求导。
在 AI 中:一个神经网络有数百万甚至数千亿个参数。每个参数都需要一个偏导数——“这个参数对最终 loss 的贡献有多大?“反向传播算法就是高效地计算所有偏导数的算法。
3.3.3 梯度:指向最陡上升方向的箭头
梯度是一个向量,由所有偏导数组成。它指向函数值上升最快的方向。
∇f = [∂f/∂x1, ∂f/∂x2, ..., ∂f/∂xn]
直觉:你蒙着眼睛站在山坡上,想走到山谷最低点。你只能感知脚下的坡度。梯度告诉你”哪个方向最陡”——你朝梯度的反方向走,就是往下走。
梯度下降:每一步都朝梯度的反方向走一小步。
θ_new = θ_old - η × ∇f(θ_old)
其中 η 是学习率(步长),∇f(θ_old) 是当前位置的梯度。
为什么梯度下降有效:
- 梯度指向最陡上升方向 → 反方向是最陡下降方向
- 每一步都往下走 → 最终走到谷底(局部最优)
- 对于凸函数,谷底就是全局最优
在 AI 中的实际应用:
- 训练循环:前向传播(算 loss)→ 反向传播(算梯度)→ 参数更新(梯度下降)→ 重复
- 学习率决定了每步走多大——太大可能跳过最优解,太小收敛太慢
- 2026 年的框架(PyTorch、JAX)自动计算梯度,你只需要写前向传播
3.3.4 链式法则:反向传播的数学引擎
链式法则是反向传播的数学基础。它告诉你:当函数嵌套时,导数怎么传递。
如果 z = g(f(x)),那么 dz/dx = dz/df × df/dx。
直觉:“如果 A 影响 B,B 影响 C,那么 A 对 C 的影响 = A 对 B 的影响 × B 对 C 的影响。”
在神经网络中:一个 10 层的网络,输入 x 经过 10 层变换得到输出 y,然后算 loss。loss 对第 1 层参数的梯度 = loss 对第 10 层的梯度 × 第 10 层对第 9 层的梯度 × … × 第 2 层对第 1 层的梯度。这就是为什么叫”反向传播”——梯度从输出层反向传递到输入层,每一层都在做链式法则。
为什么要用反向传播:如果没有链式法则,要计算 loss 对每个参数的梯度,你需要逐个参数扰动,然后看 loss 变化多少——这需要前向传播数百万次(每个参数一次)。有了链式法则,一次前向传播 + 一次反向传播就得到了所有参数的梯度。这也是为什么深度学习在 2010 年代才爆发——虽然链式法则早就有了,但 GPU 的出现让大规模矩阵乘法和自动微分成为可能。
3.3.5 Jacobian 和 Hessian:梯度的”进阶”
Jacobian 矩阵:多输出函数对所有输入的偏导数矩阵。如果函数 f 从 R^n 映射到 R^m,Jacobian 是一个 m×n 的矩阵,第 i 行第 j 列是 ∂f_i/∂x_j。
在 AI 中:反向传播的每一步,本质上就是在计算每一层的 Jacobian 矩阵。自动微分框架(autograd)存储的是”向量-Jacobian 乘积”(VJP),而不是完整的 Jacobian 矩阵(因为 Jacobian 太大了)。
Hessian 矩阵:损失函数对所有参数的二阶导数矩阵。如果参数有 n 个,Hessian 是 n×n 的矩阵,第 i 行第 j 列是 ∂^2L/∂θ_i∂θ_j。
在 AI 中的直觉:
- 一阶导数(梯度)告诉你”哪个方向是下坡”
- 二阶导数(Hessian)告诉你”坡有多陡的变化”——坡是越来越陡还是越来越平
- Hessian 的特征值可以判断当前位置是局部极小值(所有特征值 > 0)、局部极大值(所有特征值 < 0)还是鞍点(有正有负)
- 牛顿法(Newton’s Method)用 Hessian 的逆来调整步长,比梯度下降收敛更快,但计算 Hessian 的逆太贵了(O(n^3)),所以 Adam 等优化器用近似方法
2026 年的现实:你不需要手算 Jacobian 或 Hessian。PyTorch 的 torch.autograd 自动处理了所有。但理解这些概念能帮你读懂论文中的优化分析,以及理解为什么某些优化器(如 L-BFGS)在某些场景下比 Adam 更好。
← 上一节:3.2 概率统计:理解不确定性 | 下一节:3.4 优化理论 — 让 AI 找到最优解 →