# 机器学习中的梯度下降

> 原文： [https://machinelearningmastery.com/gradient-descent-for-machine-learning/](https://machinelearningmastery.com/gradient-descent-for-machine-learning/)

优化是机器学习的重要组成部分。几乎每种机器学习算法都有一个优化算法。

在这篇文章中，您将发现一个简单的优化算法，您可以将其与任何机器学习算法一起使用。它易于理解且易于实现。阅读这篇文章后你会知道：

*   什么是梯度下降？
*   如何在线性回归等算法中使用梯度下降？
*   梯度下降如何扩展到非常大的数据集？
*   从梯度下降中获得最大收益的一些技巧是什么？

让我们开始吧。

![Gradient Descent For Machine Learning](img/e7e5f9d79ca5ef4c851099f4ba67aebe.jpg)

机器学习的梯度下降
照片由[大峡谷国家公园](https://www.flickr.com/photos/grand_canyon_nps/7417904696/)，保留一些权利。

## 梯度下降

梯度下降是用于找到函数（f）的参数（系数）的值的优化算法，其最小化成本函数（成本）。

当无法通过分析计算参数（例如，使用线性代数）时，最好使用梯度下降，并且必须通过优化算法进行搜索。

### 梯度下降的直觉

想象一个大碗，就像你吃谷物或储存水果一样。这个碗是成本函数（f）的图。

![Large Bowl](img/11508080f4f62208079a8119119dced4.jpg)

大碗
摄影： [William Warby](https://www.flickr.com/photos/wwarby/4046737583/) ，保留一些权利。

碗表面上的随机位置是系数（成本）的当前值的成本。

碗的底部是最佳系数集的成本，即函数的最小值。

目标是继续尝试不同的系数值，评估其成本并选择具有稍好（较低）成本的新系数。

重复此过程足够的时间将导致碗的底部，您将知道导致最低成本的系数值。

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

### 梯度下降程序

该过程从系数的初始值或函数的系数开始。这些可以是0.0或小的随机值。

系数= 0.0

通过将系数插入函数并计算成本来评估系数的成本。

成本= f（系数）

要么

成本=评估（f（系数））

计算成本的导数。导数是来自微积分的概念，指的是给定点处函数的斜率。我们需要知道斜率，以便我们知道移动系数值的方向（符号），以便在下一次迭代中获得更低的成本。

delta =衍生物（成本）

现在我们从导数中知道哪个方向是下坡，我们现在可以更新系数值。必须指定学习率参数（alpha），以控制系数在每次更新时可以更改的程度。

系数=系数 - （alpha * delta）

重复该过程，直到系数（成本）的成本为0.0或足够接近零以使其足够好。

你可以看到梯度下降是多么简单。它确实需要您了解成本函数的梯度或您正在优化的函数，但除此之外，它非常简单。接下来我们将看到如何在机器学习算法中使用它。

## 机器学习的批量梯度下降

所有监督机器学习算法的目标是最佳地估计将输入数据（X）映射到输出变量（Y）的目标函数（f）。这描述了所有分类和回归问题。

一些机器学习算法具有表征目标函数（f）的算法估计的系数。不同的算法具有不同的表示和不同的系数，但是其中许多算法需要优化过程以找到导致目标函数的最佳估计的系数集。

具有可以使用梯度下降优化的系数的算法的常见示例是线性回归和逻辑回归。

可以通过多种不同的方式来计算机器学习模型拟合估计目标函数的接近程度的评估，这些方式通常特定于机器学习算法。成本函数涉及通过计算数据集中每个训练实例的模型预测并将预测与实际输出值进行比较并计算总和或平均误差（例如平方残差之和）来评估机器学习模型中的系数。或线性回归情况下的SSR）。

根据成本函数，可以为每个系数计算导数，以便可以使用上述更新方程更新它。

对于梯度下降算法的每次迭代，针对整个训练数据集的机器学习算法计算成本。算法的一次迭代称为一批，这种梯度下降形式称为批量梯度下降。

批量梯度下降是机器学习中描述的最常见的梯度下降形式。

## 机器学习的随机梯度下降

在非常大的数据集上运行时，梯度下降可能会很慢。

因为梯度下降算法的一次迭代需要对训练数据集中的每个实例做出预测，所以当您有数百万个实例时可能需要很长时间。

在有大量数据的情况下，您可以使用称为随机梯度下降的梯度下降变化。

在该变型中，运行上述梯度下降过程，但是对于每个训练实例而不是在该批实例的末尾执行对系数的更新。

该过程的第一步要求训练数据集的顺序是随机的。这是为了混淆对系数进行更新的顺序。因为系数在每个训练实例之后被更新，所以更新将在整个地方嘈杂地跳跃，并且相应的成本函数也是如此。通过混合更新系数的顺序，它利用这种随机游走并避免它分心或卡住。

系数的更新过程与上述相同，除了成本不是对所有训练模式求和，而是针对一个训练模式计算。

对于非常大的训练数据集，随机梯度下降可以更快地学习，并且通常只需要通过数据集的少量传递来达到良好或足够好的系数集，例如， 1到10次通过数据集。

## 梯度下降的提示

本节列出了一些提示和技巧，可以充分利用梯度下降算法进行机器学习。

*   **绘图成本与时间**：收集并绘制每次迭代算法计算的成本值。对表现良好的梯度下降运行的期望是每次迭代的成本降低。如果没有减少，请尝试降低学习率。
*   **学习率**：学习率值是一个小的实际值，如0.1,0.001或0.0001。为您的问题尝试不同的值，看看哪个效果最好。
*   **重新定标输入**：如果成本函数的形状没有偏斜和扭曲，算法将更快地达到最低成本。您可以通过将所有输入变量（X）重缩放到相同的范围来实现此目的，例如[0,1]或[-1,1]。
*   **几次通过**：随机梯度下降通常不需要超过1到10次通过训练数据集就可以收敛到足够好或足够好的系数。
*   **Plot Mean Cost** ：当使用随机梯度下降时，每个训练数据集实例的更新可能导致成本随时间的噪声图。平均超过10,100或1000次更新可以让您更好地了解算法的学习趋势。

## 摘要

在这篇文章中，您发现了机器学习的梯度下降。你了解到：

*   优化是机器学习的重要组成部分。
*   梯度下降是一个简单的优化过程，可以与许多机器学习算法一起使用。
*   批量梯度下降是指在计算更新之前计算来自所有训练数据的导数。
*   随机梯度下降是指计算每个训练数据实例的导数并立即计算更新。

您对机器学习或此帖的梯度下降有任何疑问吗？发表评论并提出您的问题，我会尽力回答。