深圳Yolo 视觉
深圳
立即加入
词汇表

随机梯度下降SGD)

了解随机梯度下降 (SGD) 如何优化机器学习模型。探索SGD如何驱动Ultralytics YOLO26,实现更快、更高效的AI训练。

随机梯度下降 (SGD) 是一种强大的优化算法,广泛应用于机器学习中,尤其是在处理大型数据集时,能够高效地训练模型。其核心是标准梯度下降方法的一种变体,旨在通过更频繁地更新模型参数来加速学习过程。与传统批量梯度下降(在进行单次更新前计算整个数据集的误差)不同,SGD 每次仅使用一个随机选择的训练样本来更新模型的权重。这种“随机”性质在优化路径中引入了噪声,有助于模型摆脱次优解,并在处理所有数据在计算上不可行的大型数据集上更快地收敛。

随机梯度下降如何工作

任何训练过程的主要目标是最小化损失函数,该函数量化了模型预测与实际目标值之间的差异。SGD 通过迭代循环实现这一目标。首先,算法从训练数据中选择一个随机数据点。然后,它执行前向传播以生成预测并计算误差。利用反向传播,算法基于该单个样本计算梯度——本质上是误差曲面的斜率。最后,它沿梯度的反方向更新模型权重以减少误差。

这一过程会重复进行多次迭代,通常分组为 epochs,直到模型性能稳定。这些更新的幅度由一个称为 learning rate 的超参数控制。由于每一步都只基于一个样本,因此与批量梯度下降的平滑轨迹相比,通往最小值的路径通常是曲折或嘈杂的。然而,这种噪声在深度学习中通常是有益的,因为它可以防止模型陷入局部最小值,从而可能找到更好的全局解。

SGD 与其他优化算法的比较

理解SGD与相关优化算法之间的区别,对于选择正确的训练策略至关重要。

  • 批量梯度下降这种传统方法在每次更新时都使用整个数据集来计算梯度。尽管它提供了通往最小值的稳定而直接的路径,但对于大规模机器学习 (ML)任务来说,它极其缓慢且内存密集。
  • 小批量梯度下降: 在实践中,大多数现代深度学习框架,包括 PyTorch,都采用一种混合方法,通常称为 SGD,但技术上严格来说是“小批量 SGD”。此方法使用一小组样本(一个批次)而不是单个样本来更新参数。它平衡了纯 SGD 的计算效率与批量梯度下降的稳定性,使其成为训练 YOLO26 等模型的标准。
  • Adam 优化器 Adam 是一种 基于 SGD 的自适应学习率优化算法。它根据矩估计单独调整每个参数的学习率。尽管 Adam 通常收敛更快,但带有动量的 SGD 仍然常用于计算机视觉 (CV)中,因为它在某些场景下能够找到更具泛化性的解决方案。

实际应用

SGD及其变体是当今许多变革性AI技术背后的驱动力。

  1. 自动驾驶车辆:自动驾驶车辆 的开发中,模型必须处理大量的视觉数据流,以识别行人、交通标志和障碍物。训练这些复杂的 目标检测 网络需要高效的优化,以处理数百万张道路图像。SGD 允许工程师迭代地优化模型的准确性,确保 汽车AI 中的安全关键系统能够做出可靠的实时决策。
  2. 医疗诊断:医学图像分析领域严重依赖深度学习来检测MRI扫描或X射线中的肿瘤等异常。由于医疗数据集可能庞大且分辨率高,SGD使得复杂卷积神经网络 (CNN)的训练成为可能,而不会耗尽内存资源。这有助于创建高精度诊断工具,辅助医生进行医疗AI

Python 代码示例

虽然高级库,如 ultralytics 在内部处理优化,在 train() 命令期间,您可以看到 SGD 优化器如何在底层进行初始化和使用 PyTorch workflow。此代码片段演示了为 tensor 定义一个简单的 SGD 优化器。

import torch
import torch.nn as nn
import torch.optim as optim

# Define a simple linear model
model = nn.Linear(10, 1)

# Initialize Stochastic Gradient Descent (SGD) optimizer
# 'lr' is the learning rate, and 'momentum' helps accelerate gradients in the right direction
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# Create a dummy input and target
data = torch.randn(1, 10)
target = torch.randn(1, 1)

# Forward pass
output = model(data)
loss = nn.MSELoss()(output, target)

# Backward pass and optimization step
optimizer.zero_grad()  # Clear previous gradients
loss.backward()  # Calculate gradients
optimizer.step()  # Update model parameters
print("Model parameters updated using SGD.")

挑战与解决方案

尽管 SGD 很受欢迎,但它也面临挑战。主要问题是梯度步长中的噪声,这可能导致损失剧烈波动而非平稳收敛。为了缓解这种情况,实践者通常使用 动量,这是一种有助于加速 SGD 沿相关方向前进并抑制振荡的技术,类似于一个重球滚下山坡。此外,找到正确的学习率至关重要;如果学习率过高,模型可能会越过最小值(梯度爆炸),如果过低,训练速度将极其缓慢。像 Ultralytics Platform 这样的工具通过管理 超参数调优 并提供训练指标的可视化来帮助自动化此过程。 Adam 优化器 等进步本质上自动化了学习率调整,解决了 SGD 的一些固有难题。

让我们一起共建AI的未来!

开启您的机器学习未来之旅