机器学习中的梯度下降算法
优化是机器学习的重要组成部分。几乎每种机器学习算法的核心都有一个优化算法。
在这篇文章中,你会发现一个简单的优化算法,你可以和任何机器学习算法一起使用。它很容易理解,也很容易实现。读完这篇文章后,你就会知道:
- 什么是梯度下降?
- 如何在线性回归等算法中使用梯度下降呢?
- 如何将梯度下降扩展到非常大的数据集?
- 从梯度下降中获得最大收益的一些小贴士是什么?
我们开始吧。
渐变下降
梯度下降是用于寻找最小化成本函数(成本)的函数(F)的参数(系数)的值的优化算法。
当参数无法解析计算(例如,使用线性代数)且必须通过优化算法搜索时,最好使用梯度下降。
梯度下降的直觉
想象一个大碗,就像你用来吃谷类食品或储存水果的碗一样。这个碗是成本函数(F)的曲线图。
碗表面上的随机位置是系数的当前值的成本(成本)。
碗的底部是最佳系数集的成本,也就是函数的最小值。
目标是继续尝试系数的不同值,评估其成本,并选择成本稍好(较低)的新系数。
重复这一过程足够多的次数将导致碗的底部,你将知道导致最小成本的系数的值。
梯度下降法
该过程从函数的一个或多个系数的初始值开始。这些值可以是0.0或一个较小的随机值。
系数=0.0
通过将系数插入函数并计算成本来评估系数的成本。
成本=f(系数)
或
成本=评估(f(系数))
计算成本的导数。导数是微积分中的一个概念,指的是函数在给定点的斜率。我们需要知道斜率,这样我们才能知道移动系数值的方向(符号),以便在下一次迭代中获得较低的成本。
增量=派生(成本)
现在我们从导数知道哪个方向是下坡,现在我们可以更新系数值了。必须指定学习率参数(α),以控制系数在每次更新时可以改变多少。
系数=系数-(alpha*增量)
重复该过程,直到系数(成本)的成本为0.0或足够接近于零以足够好。
你可以看到渐变下降是多么简单。它确实需要你知道你的成本函数的梯度,或者你正在优化的函数,但除此之外,它是非常简单的。接下来,我们将看看如何在机器学习算法中使用这一点。
一种基于批量梯度下降的机器学习方法
所有有监督机器学习算法的目标都是最佳地估计将输入数据(X)映射到输出变量(Y)的目标函数(F)。这描述了所有的分类和回归问题。
一些机器学习算法具有表征目标函数(F)的算法估计的系数。不同的算法有不同的表示和不同的系数,但是它们中的许多算法都需要一个优化过程来找到导致目标函数的最佳估计的系数集。
具有可使用梯度下降进行优化的系数的算法的常见示例是线性回归和Logistic回归。
对机器学习模型估计的目标函数的拟合程度的评估可以用多种不同的方法来计算,通常特定于机器学习算法。成本函数涉及通过为数据集中的每个训练实例计算模型的预测、将预测与实际输出值进行比较以及计算总和或平均误差(例如在线性回归的情况下的残差平方和或SSR)来评估机器学习模型中的系数。
根据成本函数,可以为每个系数计算导数,从而可以精确地使用上述更新方程来更新它。
针对梯度下降算法的每次迭代,在整个训练数据集上计算机器学习算法的成本。算法的一次迭代被称为一批,并且这种形式的梯度下降被称为批量梯度下降。
批量梯度下降是机器学习中描述的最常见的梯度下降形式。
随机梯度下降法在机器学习中的应用
在非常大的数据集上运行梯度下降可能会很慢。
因为梯度下降算法的一次迭代需要对训练数据集中的每个实例进行预测,所以当你有数百万个实例时可能需要很长时间。
在有大量数据的情况下,可以使用一种称为随机梯度下降的梯度下降变体。
在该变型中,运行上述梯度下降过程,但是对系数的更新是针对每个训练实例执行的,而不是在实例批次的末尾执行。
该过程的第一步要求训练数据集的顺序是随机化的。这是为了混淆对系数进行更新的顺序。因为系数在每个训练实例之后被更新,所以更新将是到处都是噪声跳跃,因此相应的代价函数也是如此。通过混淆系数更新的顺序,它利用了这种随机游走,避免了分心或卡住。
系数的更新过程与上述相同,不同之处在于不是将所有训练模式的成本相加,而是针对一个训练模式计算成本。
对于非常大的训练数据集,随机梯度下降的学习速度可能要快得多,并且通常你只需要通过数据集的少量遍来达到好的或足够好的系数集,例如,通过数据集的1到10遍。
渐变下降提示
本节列出了最大限度地利用机器学习的梯度下降算法的一些提示和技巧。
- 绘制成本与时间的关系图:收集并绘制算法在每次迭代中计算的成本值。对性能良好的梯度下降运行的期望是每次迭代的成本降低。如果没有减少,试着降低你的学习速度。
- 学习率:学习率值是一个较小的实值,如0.1%、0.001或0.0001。针对你的问题尝试不同的值,看看哪一个效果最好。
- 重新缩放输入:如果成本函数的形状没有歪曲和扭曲,算法将更快地达到最小成本。你可以通过将所有输入变量(X)重新缩放到相同的范围(如[0,1]或[-1,1])来实现这一点。
- 次数少:随机梯度下降通常不需要通过训练数据集超过1到10次就可以收敛到好的或足够好的系数。
- 绘制平均成本:使用随机梯度下降时,每个训练数据集实例的更新可能会导致成本随时间的噪声绘制。取10个、100个或1000个更新的平均值可以让你更好地了解算法的学习趋势。
摘要
在这篇文章中,你发现了机器学习的梯度下降。你了解到:
- 优化是机器学习的重要组成部分。
- 梯度下降是一个简单的优化过程,可以与许多机器学习算法一起使用。
- 批量梯度下降是指在计算更新之前从所有训练数据计算导数。
- 随机梯度下降是指从每个训练数据实例计算导数,并立即计算更新。