Adam Optimizer
Adam 优化器结合动量和 RMSProp,为每个参数自适应调整学习率。介绍其工作原理、Adam 与 SGD 的比较,以及使用 Ultralytics 进行训练。
Adam 优化器是 Adaptive Moment Estimation(自适应矩估计)的缩写,是一种广泛用于训练深度学习模型的先进优化算法。它结合了另外两种常见随机梯度下降(SGD)扩展算法的优点,推动了这一领域的发展:自适应梯度算法(AdaGrad)和均方根传播(RMSProp)。Adam 根据梯度的一阶矩和二阶矩估计,为不同参数分别计算自适应学习率,使神经网络的收敛速度显著快于传统方法。Adam 鲁棒性强且所需调优较少,因此许多从事新机器学习(ML)项目的实践者都会默认选择它。
Adam 的工作原理#
从本质上说,训练模型就是要最小化损失函数,该函数衡量模型预测与实际数据之间的差异。标准算法通常使用固定步长(学习率),沿“损失曲面”向误差最小处下降。然而,损失曲面往往十分复杂,包含可能让简单算法陷入其中的狭长谷地和平坦区域。
Adam 为每个参数维护两个历史缓冲区,以此解决这个问题:
-
动量(一阶矩):类似于一个沉重的球沿山坡滚下,它追踪过去梯度的移动平均值,以便沿相关方向保持速度。
-
方差(二阶矩):追踪梯度平方的移动平均值,并据此调整学习率。
这种组合使优化器能够在损失曲面的平坦区域迈出较大步伐,在陡峭或噪声较多的区域采取更小、更谨慎的步伐。其具体机制详见奠基性研究论文Kingma 和 Ba 的 Adam 论文,该论文展示了 Adam 在各种深度学习(DL)任务中的实证优势。
实际应用#
Adam 优化器用途广泛,因此几乎在人工智能(AI)的所有领域都得到了应用。
- 自然语言处理 (NLP):大型语言模型,例如生成式预训练 Transformer (GPT),在训练时高度依赖 Adam(或其变体 AdamW)。该算法能够高效处理海量词汇和大型数据集所产生的稀疏梯度,从而支持构建强大的聊天机器人和翻译系统。
- 医疗保健中的计算机视觉:在医学图像分析中,模型必须检测 MRI 扫描中的肿瘤等细微异常。Adam 有助于卷积神经网络(CNN)快速收敛到高精度解,这对开发医疗保健领域的 AI诊断工具至关重要。
Adam 与 SGD#
虽然 Adam 通常收敛得更快,但需要将它与随机梯度下降 (SGD)区分开来。SGD 使用单一的非自适应学习率更新模型权重,而且由于有时能在测试数据上取得略好的泛化能力(最终准确率),它常用于训练最先进的目标检测模型的最后阶段。
不过,Adam 具有“自适应”特性,也就是说,它会自动调整学习率。因此,在初期实验和复杂架构中,Adam 更易于使用;在这些场景下,SGD 的调优可能较为困难。对于在Ultralytics Platform上管理实验的用户而言,在不同优化器之间切换以比较性能,通常是超参数调优的关键步骤。
使用 Ultralytics 实现#
PyTorch 等现代框架和 Ultralytics 库让 Adam 的使用变得简单。名为 AdamW(带权重衰减的 Adam)的常见变体通常更受推荐,因为它修复了原始 Adam 算法中正则化存在的问题。使用默认的 optimizer="auto" 训练 YOLO26 时,Ultralytics 会为较短的训练任务选择 AdamW,为较长的训练计划选择 MuSGD。
以下示例演示了如何使用 AdamW 优化器训练 Ultralytics YOLO26 模型:
from ultralytics import YOLO
# 加载最先进的 YOLO26n 模型
model = YOLO("yolo26n.pt")
# 使用 'AdamW' 优化器训练模型
# 'optimizer' 参数让你可以轻松切换 SGD、Adam、AdamW 等优化器。
results = model.train(data="coco8.yaml", epochs=5, optimizer="AdamW")斯坦福大学 CS231n 优化课程笔记解释了 Adam 如何基于 RMSProp 和 AdaGrad 构建,而 PyTorch 则通过其 torch.optim 优化器公开 Adam 的超参数,例如 betas、eps 和 weight_decay。










