趋近智
尽管 Adam 优化器在各类深度学习任务中表现良好,但为提升稳定性和收敛速度,优化器变种仍在不断涌现。Adamax 和 Nadam 是其中两个值得关注的例子。它们被视为对 Adam 方法的优化,而非根本性的改变。
Adamax 与 Adam 在同一篇论文中提出,在学习率缩放方面提供了不同的思路。回想一下,Adam 对每个参数的学习率进行缩放,使其与过去平方梯度(,表示 范数)的指数衰减平均值的平方根成反比。Adamax 通过使用基于过去梯度无穷范数()的指数衰减平均值来调整此方法。
Adamax 不在 中累积平方梯度,而是跟踪 ,其递归定义为:
这里, 主要记录了迄今为止遇到的梯度的最大绝对值(受 控制的指数衰减)。然后,参数更新使用 进行缩放,取代了 Adam 中的 项:
(其中 是偏差校正后的第一阶矩估计,计算方式与 Adam 类似)。
为何使用无穷范数?基于 的更新步骤,在梯度非常稀疏或不常出现大梯度的情形下,与 Adam 中的 范数缩放相比,可以认为更为稳定。因为 取决于最大值而非平方和,所以即使出现一些异常大的梯度,它也不会增长过快,可能避免学习率过早变得过小。尽管 Adamax 通常表现与 Adam 类似,但如果您发现 Adam 存在不稳定或进展缓慢的问题,Adamax 有时会是一个有益的替代方案。
Nadam,是 Nesterov 加速自适应矩估计的简称,结合了 Adam 与 Nesterov 加速梯度(NAG)的思想。您可能回想第 5 章中提到,NAG 通过在应用当前速度之后计算梯度,改进了标准动量,有效地“向前看”以预测参数的未来位置。
Nadam 将这种前瞻能力直接融入 Adam 的更新规则中。它改变了第一阶矩估计()的使用方式。Nadam 不再基于先前的估计值()应用动量步骤,而是在计算更新时纳入当前的动量估计值(),从而达到类似于 NAG 前瞻的效果。
推导涉及用经 Nesterov 改进的版本替换偏差校正后的估计值 。虽然具体公式稍复杂,但核心思路是在计算参数步骤时,通过考虑动量更新本身的效果,更有效地应用动量更新。
这种结合 Nesterov 动量的方法,常使 Nadam 比 Adam 收敛稍快,尤其在那些 NAG 比标准动量提供了明显好处的任务上。
由于其稳固性和良好的通用性能,Adam 仍然是许多实践者的首选自适应优化器。然而,Adamax 和 Nadam 在您的优化工具包中提供了有价值的备选方案。
Adamax 和 Nadam 在 PyTorch 和 TensorFlow 等流行的深度学习库中都易于获取。实现它们通常只需更改优化器类名即可。
import torch
import torch.optim as optim
# 假设 'model_parameters' 包含您的网络参数
learning_rate = 1e-3
beta1 = 0.9
beta2_adamax = 0.999 # Adamax 的标准 beta2
beta2_nadam = 0.999 # Nadam 的标准 beta2
# 使用 Adam (用于比较)
# optimizer_adam = optim.Adam(model_parameters, lr=learning_rate, betas=(beta1, 0.999))
# 使用 Adamax
optimizer_adamax = optim.Adamax(model_parameters, lr=learning_rate, betas=(beta1, beta2_adamax))
# 使用 Nadam
optimizer_nadam = optim.Nadam(model_parameters, lr=learning_rate, betas=(beta1, beta2_nadam))
# 为您的训练循环选择一个优化器
# optimizer = optimizer_nadam
与其他优化器选择一样,表现最佳者常取决于具体数据集、模型架构和超参数设置。通过仔细实验进行经验评估,是判断 Adamax 或 Nadam 是否比 Adam 更具优势来应对您的特定深度学习难题的最可靠方法。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造