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

随机梯度下降SGD)

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

随机梯度下降(SGD)是一种强大的优化算法,在机器学习中被广泛用于高效训练模型,尤其适用于处理大规模数据集。其核心SGD 标准梯度下降方法的变体,通过更频繁地更新模型参数来加速学习过程。不同于传统批量梯度下降——后者需先计算整个数据集的误差才能进行单次更新SGD 随机选取的SGD 训练样本SGD 。这种"随机"特性为优化路径引入了噪声,有助于模型摆脱局部最优解。 ——每次仅使用随机选取的单个训练样本SGD 权重。SGD "随机"特性为优化路径引入了噪声,有助于模型在处理全部数据计算量过大的海量数据集时,摆脱次优解并更快收敛。

随机梯度下降如何工作

任何训练过程的首要目标都是最小化损失函数,该函数量化了模型预测值与实际目标值之间的差异。SGD 通过迭代循环SGD 这一目标。 首先,算法从训练数据中随机选取一个数据点。随后执行前向传播生成预测结果并计算误差。通过反向传播,算法基于该单个样本计算梯度——本质上是误差景色的斜率。最后,模型权重沿着与梯度相反的方向更新,从而降低误差。

该过程需经过多次迭代(通常按epoch 分组),直至模型性能趋于稳定。每次更新的幅度由称为学习率的超参数控制。由于每步仅基于单个样本,相较于批量梯度下降的平滑轨迹,其向极小值的收敛路径往往呈现出锯齿状或噪声特征。 然而这种噪声在深度学习中往往具有优势,它能防止模型陷入局部最优解,从而可能获得更优的全局解。

SGD 与其他优化算法的比较

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

  • 批量梯度下降 这种传统方法在每次更新时都使用整个数据集来计算梯度。虽然它能提供一条稳定且直达最小的路径,但在大规模机器学习(ML)任务中,其运行速度极其缓慢且内存消耗巨大。
  • 小批量梯度下降在 实践中,包括PyTorch在内的大多数现代深度学习框架 PyTorch,都采用了一种混合方法,通常被称为 SGD 严格来说应称为"SGD"。该方法通过使用小批量样本(而非单个样本)更新参数,SGD 纯SGD 的计算效率SGD 批量梯度下降的稳定性SGD 取得平衡,因此成为训练YOLO26等模型的标准方案。
  • Adam Adam 基于SGD的自适应学习率优化算法。它根据矩估计值对每个参数单独调整学习率。Adam 收敛更快SGD 计算机视觉(CV)领域仍被广泛使用,因其在特定场景下能找到更具泛化能力的解。

实际应用

SGD 变体是当今许多变革性人工智能技术背后的核心引擎。

  1. 自动驾驶汽车:自动驾驶汽车的开发过程中,模型必须处理海量视觉数据流以识别行人、交通标志和障碍物。训练这些复杂的物体检测网络需要高效的优化方案来处理数百万张道路图像。SGD 工程师SGD 迭代提升模型的准确性,确保汽车人工智能领域中安全关键型系统能够做出可靠的实时决策。
  2. 医学诊断: 医学图像分析领域高度依赖深度学习技术,用于detect MRI扫描或X光片中的肿瘤等detect 。由于医学数据集往往规模庞大且分辨率极高,SGD 不消耗过多内存资源SGD 训练复杂的卷积神经网络(CNNs)。这为创建高精度诊断工具提供了可能,助力医生在医疗健康领域应用人工智能技术

Python 代码示例

虽然高级库,如 ultralytics 在内部处理优化期间 train() 通过命令,你可以看到SGD 如何在底层实现中初始化并使用。 PyTorch 工作流。此代码片段演示了为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 相关方向SGD ,同时抑制波动,其原理类似于重球沿斜坡滚动时的减震效果。 此外,确定合适的学习率至关重要:过高会导致模型超出最小值(梯度爆炸),过低则会使训练速度异常缓慢。 Ultralytics 等工具通过管理超参数调优并提供训练指标可视化功能,实现了该过程的自动化。Adam 等技术革新本质上实现了学习率的自动调整,从而解决了SGD固有的部分难题。

加入Ultralytics 社区

加入人工智能的未来。与全球创新者联系、协作和共同成长

立即加入