了解随机梯度下降 (SGD) 如何优化机器学习模型。探索SGD如何驱动Ultralytics YOLO26,实现更快、更高效的AI训练。
随机梯度下降 (SGD) 是一种强大的优化算法,广泛应用于机器学习中,尤其是在处理大型数据集时,能够高效地训练模型。其核心是标准梯度下降方法的一种变体,旨在通过更频繁地更新模型参数来加速学习过程。与传统批量梯度下降(在进行单次更新前计算整个数据集的误差)不同,SGD 每次仅使用一个随机选择的训练样本来更新模型的权重。这种“随机”性质在优化路径中引入了噪声,有助于模型摆脱次优解,并在处理所有数据在计算上不可行的大型数据集上更快地收敛。
任何训练过程的主要目标是最小化损失函数,该函数量化了模型预测与实际目标值之间的差异。SGD 通过迭代循环实现这一目标。首先,算法从训练数据中选择一个随机数据点。然后,它执行前向传播以生成预测并计算误差。利用反向传播,算法基于该单个样本计算梯度——本质上是误差曲面的斜率。最后,它沿梯度的反方向更新模型权重以减少误差。
这一过程会重复进行多次迭代,通常分组为 epochs,直到模型性能稳定。这些更新的幅度由一个称为 learning rate 的超参数控制。由于每一步都只基于一个样本,因此与批量梯度下降的平滑轨迹相比,通往最小值的路径通常是曲折或嘈杂的。然而,这种噪声在深度学习中通常是有益的,因为它可以防止模型陷入局部最小值,从而可能找到更好的全局解。
理解SGD与相关优化算法之间的区别,对于选择正确的训练策略至关重要。
SGD及其变体是当今许多变革性AI技术背后的驱动力。
虽然高级库,如 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 的一些固有难题。

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