pytorch优化器

Pytorch 一共有11个优化器,其中比较常用的主要有4种:SGD、Momentum、RMSProp、Adam。

SGD

实现随机梯度下降。

CLASS torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, 
weight_decay=0, nesterov=False)
参数:
  • params (iterable) –待优化参数的iterable或者是定义了参数组的dict
  • lr (float) – 学习率
  • momentum (float, 可选) – 动量因子(默认:0,通常设置为0.9,0.8)
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0)
  • dampening (float, 可选) – 动量的抑制因子(默认:0)
  • nesterov (bool, 可选) – 使用Nesterov动量(默认:False)
例子:

>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> optimizer.zero_grad()
>>> loss_fn(model(input), target).backward()
>>> optimizer.step()

优点:①使用mini-batch的时候,可以收敛得很快

缺点:①在随机选择梯度的同时会引入噪声,使得权值更新的方向不一定正确
②不能解决局部最优解的问题

Momentum

使用动量的随机梯度下降法。更新的时候在一定程度上保留之前更新的方向,用法为在torch.optim.SGD的momentum参数不为零。

优点:加快收敛速度,有一定摆脱局部最优的能力,一定程度上缓解了没有动量的时候的问题

缺点:仍然继承了一部分SGD的缺点

RMSProp

实现均方根传递。
思想:梯度震动较大的项,在下降时,减小其下降速度;对于震动幅度小的项,在下降时,加速其下降速度

CLASS torch.optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0,
 centered=False)
参数:
  • params (iterable) –待优化参数的iterable或者是定义了参数组的dict
  • lr (float) – 学习率
  • momentum (float, 可选) – 动量因子(默认:0,通常设置为0.9,0.8)
  • alpha (float, 可选) – 平滑常数(默认:0.99)为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
  • centered (bool, 可选) –如果为True,计算中心化的RMSProp,并且用它的方差预测值对梯度进行归一化
  • weight_decay (float, 可选) – 权重衰减(L2惩罚)(默认:0)

优点:可缓解Adagrad学习率下降较快的问题,并且引入均方根,可以减少摆动,适合处理非平稳目标,对于RNN效果很好

缺点:依然依赖于全局学习率

Adam

将Momentum算法和RMSProp算法结合起来使用的一种算法,既用动量来累积梯度,又使得收敛速度更快同时使得波动的幅度更小,并进行了偏差修正。最常用的优化器。

CLASS torch.optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0,
 amsgrad=False)
参数:
  • params (iterable) –待优化参数的iterable或者是定义了参数组的dict
  • lr (float) – 学习率
  • betas (Tuple[float, float], 可选) – 动量因子(默认:0,通常设置为0.9,0.8)
  • eps (float, 可选) – 为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)
  • weight_decay (float, 可选) – 用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)
  • amsgrad (boolean, 可选) – 是否使用AMSGrad变量 (默认: False)

优点

1、对目标函数没有平稳要求,即loss function可以随着时间变化

2、参数的更新不受梯度的伸缩变换影响

3、更新步长和梯度大小无关,只和alpha、beta_1、beta_2有关系。并且由它们决定步长的理论上限

4、更新的步长能够被限制在大致的范围内(初始学习率)

5、能较好的处理噪音样本,能天然地实现步长退火过程(自动调整学习率)

6、很适合应用于大规模的数据及参数的场景、不稳定目标函数、梯度稀疏或梯度存在很大噪声的问题

你可能感兴趣的:(深度学习,pytorch,深度学习,神经网络)