跳转至

P2-4.3 微分(derivative)与梯度(gradient)

Section ID: P2-4.3 Version: v2026.09.14

增大一个参数可能使损失上升,增大另一个参数却可能使损失下降。有多个可调数值时,只知道一个斜率不足以判断该怎样调整。偏导数在固定其他变量的条件下求一个变量的变化率;梯度则按参数顺序把这些变化率组成向量。

从一个点到多个变量

前一节的 f(x)=x² 中,导函数 f′(x)=2x 给出各个位置的瞬时变化率,而 f′(2)=4 是它在一个位置上的值。4不是输出变化量本身,而是输出变化量与输入变化量之比所趋近的值。因此,在 x=2 处把输入增加 0.01,输出约增加 4×0.01=0.04。实际增量是 2.01²−2²=0.0401,与近似值略有差异。

有两个输入时,可以分别沿两条坐标轴求变化率。下面是一个简单的损失函数,其最小值出现在两个参数都为0时。

\[ L(w_1,w_2)=w_1^2+w_2^2 \]

当前的位置为 [w₁,w₂]=[3,4],损失是 3²+4²=25。虽然损失值只有一个25,但相对于两个参数的变化率并不相同。

偏导数:改变一个变量,固定其他变量

观察 w₁ 的影响时,固定 w₂=4。函数变为 L(w₁,4)=w₁²+16。无论 w₁ 怎样变化,16都不变,因此该项的导数是0,只剩下 w₁² 的导数 2w₁。在当前的 w₁=3 处,其值为6。

反过来,固定 w₁=3,得到 L(3,w₂)=9+w₂²。常数9的导数是0,所以相对于 w₂ 的变化率是 2w₂,在当前的 w₂=4 处为8。

\[ \frac{\partial L}{\partial w_1}=2w_1,\qquad \frac{\partial L}{\partial w_2}=2w_2 \]

∂ 是偏导数使用的符号。∂L/∂w₁ 表示固定其他变量、改变 w₁ 时的瞬时变化率。在当前位置分别把一个参数增加 0.01,可以检查它的含义。

改动的参数 新位置 实际损失增量 用偏导数近似的增量
只增加 w₁ [3.01,4] 0.0601 6×0.01=0.06
只增加 w₂ [3,4.01] 0.0801 8×0.01=0.08

对于同样小的增量,损失对 w₂ 更敏感。把表中的实际增量除以 0.01,得到 6.01 和 8.01;当增量趋近于0时,这两个比值分别趋近于偏导数值6和8。

梯度:把变化率组成向量

梯度是把标量值函数的偏导数组成的向量。∇ 读作nabla,在下面的表达式中表示梯度。

\[ \nabla L(w_1,w_2)= \left[\frac{\partial L}{\partial w_1},\frac{\partial L}{\partial w_2}\right] =[2w_1,2w_2],\qquad \nabla L(3,4)=[6,8] \]

∇L(w₁,w₂) 是为各个位置给出向量的函数,∇L(3,4) 是当前位置的向量。分量顺序与参数顺序一致。[6,8] 既不是新的参数值,也不是实际位移。

当两个参数同时发生微小变化时,可以把各自对损失的影响相加,近似得到损失变化。在当前位置,计算如下。

\[ \Delta L\approx 6\Delta w_1+8\Delta w_2 =\nabla L(3,4)\cdot[\Delta w_1,\Delta w_2] \]

中间的点 · 是前面学过的点积,即对应分量相乘后相加。两个参数都增加 0.01 时,预测损失增量为 0.06+0.08=0.14,实际增量为 3.01²+4.01²−25=0.1402。对于可微函数,可以这样用梯度近似多个变量同时发生微小变化的影响。

在相同距离下比较方向

比较方向时,首先要统一移动距离。[6,8] 的长度为 √(6²+8²)=10,除以10后得到 [0.6,0.8],它方向不变、长度为1。这样的向量称为单位向量。下表中的方向长度都为1。

方向 u 点积 ∇L·u 在当前位置的含义
[1,0] 6 沿 w₁ 增加方向的瞬时变化率
[0,1] 8 沿 w₂ 增加方向的瞬时变化率
[0.6,0.8] 6×0.6+8×0.8=10 沿梯度方向的瞬时变化率
[-0.6,-0.8] −10 沿梯度反方向的瞬时变化率

∇L·u 是沿方向 u 移动时,每单位移动距离对应的函数值瞬时变化率,称为方向导数。例如,沿 [0.6,0.8] 方向移动距离 0.01,参数变化为 [0.006,0.008],损失约增加 10×0.01=0.1。

两个向量方向相同时,点积最大。因此,对于梯度非零的可微函数,在所有单位方向中,梯度方向的瞬时变化率最大。这里采用 √(Δw₁²+Δw₂²) 来度量参数位置之间的距离。改变参数的单位或尺度,也可能改变距离与方向的比较。

用等高线理解增加与减少

等高线连接函数值相同的位置。在 L=w₁²+w₂² 中,到原点距离相同的点具有相同的损失,因此等高线是圆。下图圆上的数字是损失值。

损失等高线和当前位置 [3,4],比较单位坐标轴方向、梯度方向及其反方向。

从当前点向蓝色圆的外侧移动,损失增大;向内侧移动,损失减小。红色箭头表示梯度方向 [0.6,0.8],绿色箭头表示反方向。为了比较方向,箭头长度统一为1,并不表示实际训练的位移。

当前点处与圆相切的方向垂直于梯度,该方向的瞬时变化率为0。但这并不表示沿切线直行后,损失仍然不变。要保持损失相同,需要沿圆不断改变方向。

区分下降方向与移动量

沿当前梯度 [6,8] 的反方向移动 0.01×[6,8],新位置为 [2.94,3.92],损失从 25 降到 24.01。这里的 0.01 是乘在梯度上的系数,实际移动距离为 0.01×10=0.1。

方向与梯度相反,并不意味着步子可以任意大。从相同位置出发,把系数设为 1.1,新位置为 [-3.6,-4.8],损失反而增大到 36。方向信息与移动量的选择必须区分。 下一节将把这个系数的选择与学习联系起来。

梯度为0意味着所有方向的一阶变化率都为0,但仅凭这一点不能保证找到了最小值。本例的原点是最小值点;在其他函数中,梯度为0的点也可能是最大值点或鞍点。鞍点是函数值沿某些方向增加、沿其他方向减少的点。

推荐分数中的两个权重

假设某内容的兴趣相似度为 0.8,新鲜度为 0.4。给这两个特征分别乘以权重 w_1、w_2,计算推荐分数 S。

\[ S(w_1,w_2)=0.8w_1+0.4w_2 \]

当 w_1 = 1、w_2 = 1 时,分数为 1.2。保持一个权重不变,只把另一个增加 0.05。

改动的权重 新分数 分数增量 增量 / 0.05
w_1: 1 → 1.05 1.24 0.04 0.8
w_2: 1 → 1.05 1.22 0.02 0.4

该式对每个权重都是线性的,因此上述变化率等于偏导数。梯度为 [0.8, 0.4]。当权重增加相同的量时,这个内容的分数对 w_1 的敏感程度是对 w_2 的两倍。

这个计算说明的是单个内容的分数变化。要判断推荐排名改变多少,还需要比较其他内容的分数;分数上升并不保证点击率或用户满意度上升。

练习:负参数的调整方向

对于相同的损失函数,把当前位置改为 [-3,4]。第一,求梯度和最大增加方向的单位向量。第二,从当前位置减去梯度乘以系数 0.01 的结果,计算新损失。第三,说明这与一律减小两个参数有什么不同。

计算与解释

梯度为 [-6,8],长度为10,因此最大增加方向为 [-0.6,0.8]。沿反方向移动后,新位置为 [-3,4]−0.01×[-6,8]=[-2.94,3.92],损失为 24.01。需要增大 w₁、减小 w₂。下降方向是使损失减小的方向,并不意味着把每个参数的数值都减小。

检查清单

  • 能否区分求偏导数时固定的变量与改变的变量?
  • 能否把梯度分量与参数顺序对应起来?
  • 能否区分偏导数值与实际损失变化量?
  • 能否用点积近似多个变量同时发生微小变化的影响?
  • 能否解释比较方向时为什么要统一向量长度?
  • 能否区分下降方向与实际位移,并调整负参数?

来源与参考资料

数值示例与等高线图均为自行构建。