梯度下降
了解梯度下降如何优化像 Ultralytics YOLO 这样的 AI 模型,从而在从医疗保健到自动驾驶汽车等任务中实现准确的预测。
梯度下降是大多数机器学习 (ML)和深度学习模型中的一个基本优化算法。它的主要目标是通过迭代调整模型的内部参数来最小化模型的误差。想象一下,你站在雾蒙蒙的山上,试图找到最低点。你会环顾四周,看看哪个方向的坡度最陡,然后朝那个方向迈一步。通过重复这个过程,你最终会到达一个山谷。在机器学习中,“山”是损失函数,“方向”是损失函数的负梯度,“步长”是学习率。
梯度下降法的工作原理是什么?
训练神经网络的过程包括找到一组最佳的模型权重,从而使误差或损失尽可能地降低。梯度下降法可以自动完成此搜索。该过程首先计算梯度,即损失相对于每个权重的变化程度。此计算通常使用反向传播算法执行。然后,通过沿梯度相反的方向迈出一小步来更新权重,从而有效地在损失面上“向下”移动。这个迭代过程会持续多个epoch,直到模型的性能收敛并且损失最小化。每一步的大小是一个关键因素,由学习率决定,学习率是超参数调优中的一个关键设置。有关此过程的详细概述,请参见斯坦福 CS231n 课程笔记等资源。
梯度下降的类型
梯度下降有三种主要变体,每种变体在用于计算每次权重更新的梯度的数据量上有所不同:
- 批量梯度下降 (BGD):使用整个训练数据集计算梯度。这种方法提供了一个稳定而准确的梯度,但它的计算量非常大且占用大量内存,这使得它不适用于像 ImageNet 这样的大型数据集。
- 随机梯度下降 (SGD): 在处理完单个随机选择的数据样本后更新权重。它比BGD快得多,并且内存密集度更低,但是更新会很嘈杂,从而导致更不稳定的收敛路径。这种随机性有时可以帮助模型摆脱较差的局部最小值。
- 小批量梯度下降: 通过计算数据的一小部分随机子集(“小批量”,通常在 32 到 256 个样本之间)上的梯度来达到平衡。这是现代深度学习中最常用的方法,因为它结合了 SGD 的效率和 BGD 的稳定性。PyTorch 和 TensorFlow 等框架默认在其优化器中使用此方法。有关深入比较,请参阅此梯度下降算法概述。
梯度下降与相关概念
区分梯度下降与几个相关术语非常重要:
- 优化算法: 梯度下降是一系列优化算法的基础概念。更高级的优化器(例如 Adam 优化器 或 RMSprop)是自适应变体,它们单独调整每个参数的学习率,通常会导致更快的收敛。您可以在 arXiv 上找到原始的 Adam 论文。
- 反向传播:反向传播和梯度下降是两个不同但相互关联的过程。反向传播是一种有效计算损失函数相对于网络权重的梯度的算法。梯度下降是一种使用这些梯度来更新权重的算法。
- 损失函数: 损失函数定义了梯度下降旨在最小化的目标。损失函数的选择(例如,用于图像分类的交叉熵)创建了优化器导航的特定误差图。
实际应用
梯度下降是驱动无数 AI 模型训练的引擎。
- 训练目标检测模型: 当 Ultralytics YOLO 模型在像 COCO 这样的大规模数据集上进行目标检测训练时,每次迭代都会使用小批量梯度下降。该模型预测边界框,根据误差计算损失,并且梯度下降调整整个模型的骨干和头部中的数百万个权重,以提高准确性。可以使用像 Ultralytics HUB 这样的平台来管理和扩展整个工作流程。
- 训练语言模型: 在自然语言处理 (NLP)中,像 BERT 这样的模型经过训练以执行诸如情感分析之类的任务。梯度下降法最小化损失函数,该函数衡量模型预测的情感与真实标签之间的差异,从而使模型能够从大量的文本语料库中学习人类语言的细微差别。斯坦福 NLP 组在该领域提供了广泛的研究。
挑战与考量
梯度下降算法虽然功能强大,但也并非没有挑战。该算法可能会陷入局部最小值,即并非损失曲面上的绝对最低点的谷值。在非常深的网络中,它还可能遭受梯度消失或梯度爆炸问题的影响,其中梯度变得太小或太大而无法有效地更新权重。正如我们的模型训练技巧指南中详细介绍的那样,仔细选择学习率、选择稳健的优化器以及采用批量归一化等技术对于成功训练至关重要。