梯度下降 (GD) 是一种以迭代方式最小化目标函数的优化算法。在机器学习 (ML) 的背景下,梯度下降对于提高机器学习模型在训练阶段的性能至关重要。机器学习模型,如神经网络,是复杂的、非线性的和高维的。因此,与线性回归不同,此类模型没有可以计算最佳权重的正态方程。取而代之的是梯度下降法、牛顿法和期望最大化法等近似方法。
每个模型都有一个损失函数,有时也称为成本函数。该函数用于测量模型的预测值与真实数据点之间的距离。将其视为衡量模型预测“错误”程度的标准。例如,均方误差通常用作回归问题中的损失函数。模型训练阶段旨在找到使这种损失最小化的参数值。因此,梯度下降通常是训练中使用的优化技术。该算法计算损失相对于模型参数的梯度或斜率。有了这个梯度,它就会向相反的方向迈出一步,以减少损失。学习率(也称为步长或 alpha)是步长的大小,并且对于所有 模型参数保持固定。这一过程不断重复,直到模型收敛到最小值附近。
收敛最好发生在全局最小值处。从下面的直观图中可以看出,局部最小值处的损失值低于其周边地区,但不一定是整体最低值。全局最小值是损失函数在整个域内的绝对最低值,代表问题的最佳解决方案。
如果学习率不够小,算法通常会收敛在局部最小值。要使损失函数最小化,并收敛到全局最小值,选择合理的学习率至关重要。
这种可视化方式描述了学习率对收敛的影响。较小的学习率会导致缓慢但稳定的收敛(左),而较大的学习率可能会导致过冲和不稳定(右)。
传统梯度下降和随机梯度下降之间的主要区别在于,SGD 一次使用一个训练样本来更新模型权重。每次迭代都会随机选择一个样本。1 梯度下降法在每次参数更新之前都会使用整个训练数据集来计算梯度。这种数据使用差异使得 SGD 的计算成本要低得多,并且更容易扩展到大型数据集。另一方面,SGD 的收敛行为比 GD 的噪声更大,因为单个示例数据点可能无法很好地代表数据集。这种错误的代表行为将要点更新到了一个略微“错误”的方向。然而,这种随机性使 SGD 更快,有时更适合非凸优化问题,因为它可以逃避浅的局部最小值或鞍点。
严格来说,SGD 最初的定义是通过每次只能使用一个训练样本来更新参数。在现代用法中,术语“SGD”广泛用于表示“小批次梯度下降”,这是 GD 的一种变体,一次使用小批次训练数据。与单一样本相比,使用数据子集而不是单一样本的主要优势是噪声水平较低,因为梯度等于小批次损失的平均值。因此,小批次梯度下降是深度学习的默认设置。相反,严格的 SGD 在实践中很少使用。大多数机器学习库(如 PyTorch 和 TensorFlow)甚至将这些术语混为一谈;优化器通常被称为“SGD”,尽管它们通常使用小批次。
下图更清晰地说明了增加训练数据的样本量如何减少波动和“噪声”。
GD 还有其他几种变体,它们建立在基本梯度下降的基础上,增加了提高速度、稳定性和收敛性的机制。
通过在具有一致梯度的维度中积累动量,并在具有变化梯度的维度中抑制更新,动量有助于 SGD 更快地收敛,并减少波动。2
自适应学习率方法(例如 AdaGrad 和 RMSProp)的独特之处在于,它们会单独调整每个参数的学习率。这种方法与 SGD 方法形成鲜明对比,SGD 方法对所有参数都使用固定的学习率。
AdaGrad(自适应梯度算法):根据每个参数之前的梯度调整其学习率。出现频率较低的功能的学习率较高,而频繁出现的功能的学习率较低。这种方法意味着,与使用 SGD 相比,学习不常用功能的速度更快。这种自适应学习率意味着它非常适合处理功能频率差异较大的稀疏数据,例如自然语言处理 (NLP) 和推荐系统。2
RMSProp(均方根传播):另一种自适应学习率优化技术,通过使用最近梯度平方的移动平均值来调整每个参数的学习率。过去的梯度信息被丢弃,只保留当前的梯度信息。4对于梯度较小的参数,学习率会变大,而对于梯度较大的参数,学习率会变小。这种方法消除了 AdaGrad 的学习率递减问题。RMSProp 有助于保持深度学习训练的稳定性,尤其适用于神经网络 (RNN) 等模型,并且在目标不断变化的问题上效果很好,例如强化学习。
当训练时间成为瓶颈时,SGD 和其他 GD 变体就会派上用场。5
| 变体 | 每个步骤使用的数据 | 主要功能 | 常用 |
|---|---|---|---|
| GD | 所有数据 | 稳定但缓慢 | 小型数据集 |
| 新加坡元 | 1 个经典 SGD 样本 | 嘈杂但快速 | 在线学习 |
| 小批次 GD | 少量样本 | 平衡且可扩展 | 深度学习 |
| Momentum | 批次/小批次 | 朝正确的方向加速 | 神经网络 |
| NAG | 批次/小批次 | Look-ahead 动量 | 更快的收敛速度 |
| AdaGrad | 小批次 | 自适应学习率 | 稀疏数据 |
| RMSProp | 小批次 | 修复 AdaGrad 衰减 | RNN、深度网络 |
| Adam | 小批次 | 动量 + RMSProp | 今天的默认选择 |
SGD 的目标是找到参数使我们的模型预测尽可能接近真实值。换句话说,我们想要最小化损失函数。 .
对于线性回归,这些参数是(权重)和(偏见)。因此,在这种情况下,尽量减少就等同于最小化 .
在教授梯度下降时常用的一个类比是,GD 就像在山上走下坡,直到到达山谷(最小损失)。想象一下损失函数的梯度, ,指向上坡;要下坡,我们必须朝相反的方向迈进。
参数的一般更新规则 是:
其中 是学习率和 是损失函数关于 的梯度 .
SGD 仅使用一个随机选择的样本 来近似梯度:
注意,小写 表示丢失一个训练样本。而大写字母 是总体损失函数(数据集中的所有单个损失的平均值)。这种全局性误差正是我们在训练中要尽量减少的。
让我们完成使用 SGD 进行线性回归的示例。
对于样本 ,预测为:
局部损失是单个样本的平方误差:
现在,在反向传播算法过程中,利用链式规则更新模型参数,计算损失函数与每个参数相关的梯度。5 梯度(导数)为:
通过 SGD,我们可以更新这些参数,以及 ,使用以下规则:
SGD 不是计算整个数据集的重平均梯度,而是使用轻量级随机估计。
在使用机器学习框架时,可以使用内置的 SGD 优化器类。例如:
为了学习的目的,让我们从头开始,逐步实施一个简单的 Python 随机梯度下降算法。
重申一下,我们的目标是找到最佳参数(模型权重),使损失函数(衡量我们预测错误程度的指标)最小。我们将一次更新一个样本,或更新非常小的批次。
首先,我们可以随机初始化参数值(权重)。接下来,我们可以随机选择一个数据点 。然后,我们计算预测值和误差。对于这个简单的演示,让我们尝试拟合一条简单的线: 。该过程的下一步是反向传播,即计算损失函数与参数相关的梯度。这些梯度(导数)随后用于在 SGD 优化过程中更新参数。由于梯度指向损失函数增加的方向,因此 SGD 会从每个梯度的当前参数值中减去该梯度。我们可以将其视为沿梯度的相反方向移动,以减小损失函数。因此,“随机梯度下降”中的“下降”就是这个意思。我们重复这些步骤,直到一个固定的历时次数或损失小于容差为止。后者意味着损失几乎没有变化,我们便不再改进目标函数。换句话说,一旦算法收敛,我们就会停止。
SGD 是 GD 的一种变体,通过一次使用一个数据样本来最大限度地减少机器学习模型的损失函数。这种方法与 GD 不同,GD 依赖于每个步骤的整个数据集来计算梯度。还有其他几种 GD 变体,可以归类为基于动量的学习方法或自适应学习方法。动量梯度下降和涅斯捷罗夫加速梯度就是前者示例。这些方法充分利用梯度一致的维度中积累的动量,并抑制梯度变化的维度中的更新。因此,有助于 SGD 更快地收敛,减少振荡。自适应学习率方法(例如 AdaGrad 和 RMSProp)会单独调整每个参数的学习率,而传统的 SGD 会使用固定的学习率。此外,Adam 等混合方法通过结合基于动量的 GD 和 RMSProp 的优势,提供了强大的替代方案。
使用面向 AI 构建器的新一代企业级开发平台 IBM watsonx.ai,可以训练、验证、调整和部署生成式 AI、基础模型和机器学习功能。使用一小部分数据,即可在很短的时间内构建 AI 应用程序。
借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。
通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。
1 Bottou, L. (2010). Large-Scale Machine Learning with Stochastic Gradient Descent. Lechevallier, Y., Saporta, G. (eds) Proceedings of COMPSTAT’2010. Physica-Verlag HD.
2 Ruder, S. (2016). An overview of gradient descent optimization algorithms.
3 Tian, Y., Zhang, Y., & Zhang, H. (2023). Recent Advances in Stochastic Gradient Descent in Deep Learning. Mathematics, 11(3), 682.
4 Haji, S. H., & Abdulazeez, A. M. (2021). Comparison of optimization techniques based on gradient descent algorithm: A review. PalArch’s Journal of Archaeology of Egypt/Egyptology, 18(4), 2715-2743.
5 Bottou, L. (2012). Stochastic Gradient Descent Tricks. Montavon, G., Orr, G.B., Müller, KR. (eds) Neural Networks: Tricks of the Trade. Lecture Notes in Computer Science, vol 7700. Springer, Berlin, Heidelberg.