函数的最小值点,特别是机器学习 (machine learning)中的成本函数,代表着误差最低点。导数 f′(x) 描述函数 f(x) 在任意给定点 x 处的斜率或瞬时变化率。理解导数如何作为梯度下降 (gradient descent)算法的指导,需要将这些概念联系起来。
想象你正站在由成本函数图表示的山坡上,你想走到谷底(最小值)。雾很大,你只能感觉到你脚下的地面。你如何决定往哪个方向迈步?
导数提供了你所需的确切信息。
- 如果你当前位置 x 处的导数 f′(x) 为正,这意味着斜率为正。函数在此点正在增加。要朝最小值下山,你需要向着 x 更小的方向移动,也就是说你需要向左移动(减小 x)。
- 如果你当前位置 x 处的导数 f′(x) 为负,这意味着斜率为负。函数在此点正在减小。要继续朝最小值下山,你需要向着 x 更大的方向移动,也就是说你需要向右移动(增大 x)。
- 如果导数 f′(x) 为零,斜率是平坦的。这表明你可能处于底部(一个最小值),或可能处于一个峰值或一个平坦高原。梯度下降通常会在这里停止。
注意这个规律:如果导数为正,我们减小 x;如果导数为负,我们增大 x。在这两种情况下,我们本质上都是朝着导数符号相反的方向移动。
这是梯度下降算法如何使用导数的核心思想。它计算当前点的导数,并朝着相反的方向迈出小步。步长的大小通常也与导数的大小成比例(坡度越陡意味着步长越大,坡度越缓意味着步长越小),并由一个称为学习率的因子进行调整(我们很快会讨论它)。
从数学角度看,梯度下降的一次步进可以这样表示:
xnew=xcurrent−α⋅f′(xcurrent)
这里:
- xcurrent 是你的当前位置。
- f′(xcurrent) 是你当前位置的导数(斜率)。
- α (alpha) 是学习率,一个小的正数,控制你迈步的大小。我们将在“学习率参数 (parameter)”部分更详细地讨论这个参数。
- xnew 是迈步后的更新位置。
主要部分是负号。它确保你逆着梯度移动:
- 如果 f′(xcurrent) 为正(斜率指向右上坡),减去 α⋅f′(xcurrent) 会使 x 向左移动(减小 x)。
- 如果 f′(xcurrent) 为负(斜率指向右下坡),减去 α⋅f′(xcurrent) 实际上增加了一个小值(因为减去一个负数就是加上一个正数),使 x 向右移动(增大 x)。
本质上,导数就像一个指向山坡上方(最陡峭增加方向)的指南针,梯度下降算法只是朝着相反的方向迈步,以走向下坡。通过迭代重复这个过程,计算导数,并朝着相反的方向迈出小步,梯度下降逐渐沿着成本函数的斜坡下降,走向一个最小值。
我们来形象化这一点。考虑简单的函数 f(x)=x2。它的最小值显然在 x=0。导数是 f′(x)=2x。
如果我们在 x=2,函数值为 f(2)=22=4。导数是 f′(2)=2×2=4。由于导数为正,这告诉我们函数在此处正在增加(红色虚线显示正切线斜率)。梯度下降算法利用这个正导数来决定将 x 向左移动(减小 x),如蓝色箭头所示,向着 x=0 处的最小值迈步。
如果我们改在 x=−1.5,导数将是 f′(−1.5)=2×(−1.5)=−3。负导数告诉梯度下降算法增加 x(向右移动),再次向最小值迈步。
这个过程重复进行,每个新点的导数指导下一步,直到我们理想地到达一个导数非常接近零的点,这表示我们找到了一个最小值。