本文是对之前我写的梯度下降优化算法相关内容进行一次简要总结。在学习PyTorch框架的过程中,会遇到“优化器”(optimizer)这个概念。我想用通俗易懂的方式,说说优化器到底是个什么东西,并在此基础上,将前文的各项优化算法重新整理列举,以便为有需要的读者提供一份便于查询与参考的资源汇总。
一、到底什么是优化器?
机器学习模型蕴含着多种参数,其核心目标在于通过学习(即更新)这些参数,以期达到最佳的数据拟合状态。为此,研究者们发展出了诸多参数优化技术,其中最为人所熟知且广泛应用的策略当属梯度下降法。值得注意的是,依据具体实施梯度下降过程中的不同策略与调整,这一基本框架进一步衍生出了一系列变体。
因为所有这些策略目的都是想又快又好的更新梯度学习参数。所以,它们被统称为“优化器”(optimizers),这一术语体现了它们在优化过程中的角色,是对随机梯度下降方法的改良。优化器的本质还是梯度下降算法。
二、都有哪些常用优化器?
(1)SGD(随机梯度下降)
这是最基本的优化算法,它根据每个训练样本或一小批量样本的梯度来更新模型参数。
import torch.optim as optim
# 假设model.parameters()是你的模型参数
optimizer = optim.SGD(model.parameters(), lr=0.01)
(2)Momentum(动量梯度下降)
带有动量的SGD,通过引入以往梯度的指数衰减平均值来加速学习过程,有助于克服局部最小值和鞍点。
import torch.optim as optim
# 假设model.parameters()是你的模型参数
# 在PyTorch中,Momentum作为SGD的一个参数
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
(3)RMSprop
Root Mean Square Propagation,根据历史梯度的平方根进行自适应学习率调整,特别适用于非平稳目标函数。
import torch.optim as optim
# 假设model.parameters()是你的模型参数
optimizer = optim.RMSprop(model.parameters(), lr=0.001, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)
【机器学习300问】82、RMSprop梯度下降优化算法的原理是什么?http://t.csdnimg.cn/cWFCU
(4)AdaGrad
自适应地为每个参数调整学习率,减少频繁出现的特征的学习率,增加稀疏数据集中的稀有特征的学习率。
import torch.optim as optim
# 假设model.parameters()是你的模型参数
optimizer = optim.Adagrad(model.parameters(), lr=0.01, lr_decay=0, weight_decay=0)
【机器学习300问】84、AdaGrad算法是为了解决什么问题?http://t.csdnimg.cn/oJUbS
(5)Adam
Adaptive Moment Estimation结合了Momentum和RMSprop的优点,使用了梯度的一阶矩估计和二阶矩估计,并对这些估计做了偏差修正,是目前非常流行的一种优化器。
import torch.optim as optim
# 假设model.parameters()是你的模型参数
optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)