梯度下降算法是机器学习中用于优化模型参数的一种常用方法。本文将深入探讨梯度下降算法的基本原理和应用。
想象站在一个山坡上,想要尽快到达山底。会环顾四周,思考朝哪个方向迈出小步,以便尽快下山。这就是梯度下降算法的核心思想:在每一步选择最佳的方向和步长,以最快速度接近目标。
梯度下降是一种迭代求解器,它不总是给出精确解。在目标函数不可解的情况下,迭代求解器被用来获得近似解,目的是最小化目标函数。梯度下降的基本思想是选择合适的步长(也称为学习率),以便能够接近精确解。学习率基本上控制下山时的步长大小。
梯度下降的更新规则如下:
参数 = 参数 -学习率* 梯度
反复计算这个公式,直到收敛。
以线性回归模型为例。假设有一组数据点和一个在二维空间中的直线。如果绘制这些点并尝试画一条穿过这些点的直线,它将如下所示:
直线的方程是 Y = mX + b,其中 m 是直线的斜率,b 是 Y 轴上的截距。当进行预测时,取一个数据输入 X 并做出猜测。称这个猜测为 Y_predict。
损失函数计算单个训练样本的错误。成本函数是所有训练样本损失函数的平均值。在这里,这两个术语可以互换使用。如果想评估机器学习算法在大型数据集上的表现,所做的就是取所有错误的总和。
这是特定模型的总错误,由描述该直线的 m 和 b 值决定。目标是最小化这个损失。希望得到最低的错误。这意味着希望得到最低的 m 和 b 值以获得最低的错误。
上述成本函数等同于 Y = f(x) = X^2。如果在笛卡尔坐标系上绘制 Y = X^2,它将如下所示:
假设考虑 Q 作为当前数据点。必须找到在点 O 处的最小值。然后需要两件事:更新的方向和更新的步长。找到最小值的方法是通过取导数(也称为梯度)。曲线在任何点的梯度由该点处切线的梯度给出。
曲线在每个点的梯度是不同的。仔细看看上面的图。P、Q、R、S 和 O 点的梯度是不同的。所以,查看导数的最常见方式是:函数图像的切线斜率和函数的变化率。
在这里,目标是找到一条具有最小错误的直线。这意味着最小化一个函数实际上意味着找到产生最低 Y 的 X 值。因此,能够计算这个函数的斜率(导数)的想法告诉如何搜索并找到最小值。
参数 m 和 b 可以稍微改变如下:
m = m - 学习率 * (2 * X * (Y_predict - Y))
b = b - 学习率 * (2 * (Y_predict - Y))
想要知道如何改变 y = mx + b 中的 m 值以减少错误。因此,下一步是找到具有最低错误的 m 和 b 值。这可以通过找到这个成本/损失函数的导数(梯度)来完成,以知道向哪个方向移动。
在这里,将使用以下两个微积分规则来找到导数:幂规则和链规则。
假设一次只考虑一个错误。因此,将去掉求和符号。
J(m,b) = (Error)^2
对 m 求 J 的导数,并应用幂规则和链规则:
应用链规则是因为 J 是 Error 的函数,而 Error 是 m 和 b 的函数。
类似地,对 b 求 J 的导数:
如上所述,X 是输入数据,b 是常数,Y 是输出。常数的导数是零,因为常数不变化,而导数描述了变化。因此,b 和 Y 的导数是零。
根据幂规则,可以去掉 2,因为它只是告诉学习率的大小。所以它并不重要。
(Error * X) 决定方向,因为斜率/导数包含方向信息。学习率决定步长/更新量。