梯度下降(Gradient Descent)

1. 梯度下降

神经网络误差反向传播的过程(BP算法)控制每一层如何寻找最优化参数组合。最常见的优化算法(Optimizer)是梯度下降法(Gradient Descent):

假设有足够的时间和计算资源来计算 \(w_1\) 的所有可能值的损失。回归问题所产生的损失值(均方差)与 \(w_1\) 的图形始终是凸形。换言之,图形始终是碗状图(可以根据前面Geogebra的体验直接体验),如下:

图 2. 回归问题产生的损失与权重图为凸形。

 

凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。

通过计算整个数据集中 \(w_1\) 每个可能值的损失函数来找到收敛点效率太低。有一种在机器学习领域非常热门机制,称为梯度下降法

梯度下降法的第一个阶段是为 \(w_1\) 选择一个起始值(起点)。起点并不重要;因此很多算法就直接将 \(w_1\) 设为 0 或随机选择一个值。下图显示选择了一个稍大于 0 的起点:

图 3. 梯度下降法的起点。

然后,梯度下降法算法会计算损失曲线在起点处的梯度。梯度是偏导数的矢量;它可以了解哪个方向距离目标“更近”或“更远”。请注意,损失相对于单个权重的梯度(如图 3 所示)就等于导数。

请注意梯度是一个矢量,具有以下两个特征:

  • 方向
  • 大小

梯度始终指向损失函数中增长最为迅猛的方向。梯度下降法算法会沿着负梯度的方向走一步,以便尽快降低损失。

图 4. 梯度下降法依赖于负梯度。

为了确定损失函数曲线上的下一个点,梯度下降法算法会将梯度大小的一部分与起点相加,如下图所示:

图 5. 一个梯度步长将我们移动到损失曲线上的下一个点。

然后,梯度下降法会重复此过程,逐渐接近最低点。

2.学习率(Learn Rate)

梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。

超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率。如果您选择的学习速率过小,就会花费太长的学习时间:

相同的 U 形曲线。很多点都相互非常接近,它们的轨迹朝着 U 形底部缓慢前进。

图 6. 学习速率过小。

相反,如果您指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳,就好像量子力学实验出现了严重错误一样:

相同的 U 形曲线。这条曲线包含的点非常少。点的轨迹会跳过 U 形底部,然后再次跳回。

图 7. 学习速率过大。

每个回归问题都存在一个 金发姑娘学习速率。“金发姑娘”值与损失函数的平坦程度相关。如果您知道损失函数的梯度较小,则可以放心地试着采用更大的学习速率,以补偿较小的梯度并获得更大的步长。

相同的 U 形曲线。点的轨迹大约需要 8 步达到最低点。

图 8. 学习速率恰恰好。

一维空间中的理想学习速率是 (f(x) 对 x 的二阶导数的倒数)。

二维或多维空间中的理想学习速率是 海森矩阵(由二阶偏导数组成的矩阵)的倒数。

广义凸函数的情况则更为复杂。