Pytorch常用优化器
仅用于个人学习与总结,持续更新中......
1 前言
Pytorch常用的优化方法都封装在torch.optim里面,其设计很灵活,可以拓展为自定义的优化方法。所有的方法都是继承了基类optim.Optimizer,并实现了自己的优化步骤。本文将介绍Pytorch常用优化器的原理和使用。
2 优化器
2.1 SGD
梯度下降是最常见、最简单的一种参数更新策略。其基本思想是:先设定一个学习率$\lambda$,参数沿梯度的反方向移动。假设需更新的参数为$\theta$,梯度为${g}$,则其更新策略可表示为:
$\theta$$\leftarrow$$\theta$-$\lambda$${g}$
这种梯度算法非常简洁,当学习率选取恰当时,可以收敛到全局最优点(凸函数)或局部最优点(非秃函数),但不足也很明显,对学习率比较敏感(过小导致收敛速度过慢,过大可能会越过极值点)。
随机梯度下降(stochastic gradient descent,SGD)算法相较于梯度下降算法的区别在于:随机梯度下降优化的并不是在全部训练数据上的损失函数,而是采样单个样本来估计当前的梯度。这样的好处是每次迭代是非常快速的,是可以在线学习的。
class torch.optim.SGD(params, lr=required, momentum=0, dampening=0, weight_decay=0, nesterov=False)
2.2 Adam
Adam(Adaptive Momentum Estimation)算法
class torch.optim.Adam(params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0, amsgrad=False)
2.3 RMSprop
RMSprop()算法
class RMSprop(params, lr=1e-2, alpha=0.99, eps=1e-8, weight_decay=0, momentum=0, centered=False)