Pytorch的优化器推荐

Pytorch中有四种常用的优化器,SGD、Momentum、RMSProp、Adam,那我们该如何选择呢。

1.SGD

参数介绍:

--lr(float) :学习率

--momentum(float,可选):动量因子(默认为0)

--weight_decay(float,可选):权重衰减(L2惩罚,默认为0)

--dampening(float,可选):动量的抑制因子(默认为0)

--nesterov(bool,可选):使用Nesterov动量(默认为false)

示例代码:

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

优缺点:

优点:使用mini-batch的时候,模型可以收敛的更快

缺点:在随机选择梯度的时候会引入噪声,使得权重更新的方向不一定正确。

            不能解决局部最优解的问题。

推荐指数: 0星

2.RMSProp(Root Mean Square Prop,均方根传递)

RMSProp是RProp的改进版,同时也是Adagard的改进版,它的思想上:在梯度震动较大的项,在下降时,减小其下降速度;对于震动幅度较小的项,在下降时,加速其下降速度。同时RMSProp采用均方根作为分母,可以缓解Adagard学习率下降过快的问题。

其对于RNN具有很好的效果。

参数介绍:

--lr(float) :学习率

--momentum(float,可选):动量因子(默认为0)

--alpha(float,可选):平滑常数(默认:0.99)

--eps (float, 可选):为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)

--centered (bool, 可选):如果为True,计算中心化的RMSProp,并且用它的方差预测值对梯度进行归一化

--weight_decay(float,可选):权重衰减(L2惩罚,默认为0)

示例代码:

optimizer = torch.optim.RMSprop(model.parameters(), lr=0.01)

优缺点:

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

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

 推荐程度:四星半 RMSProp算法已被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习从业者经常采用的优化算法之一。

3.Adam(AMSGrad)

它是一种将Momentum算法和RMSProp算法结合起来而使用的一种算法,既使用动量来累计梯度,又使得收敛速度更快同时使得波动的幅度更小,并进行偏差修正。

参数介绍:

--lr(float) :学习率

--betas (Tuple[float,float], 可选):用于计算梯度以及梯度平方的运行平均值的系数(默认:0.9,0.999)

--eps (float, 可选):为了增加数值计算的稳定性而加到分母里的项(默认:1e-8)

--weight_decay(float,可选):权重衰减(L2惩罚,默认为0)

示例代码:

optimizer = torch.optim.Adam(model.parameters(),lr=0.01)

优点:

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

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

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

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

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

 推荐程度:五星。 非常推荐,基本上是目前最常用的优化方法。

四种常用优化器Loss函数比较图

对于重要参数学习率,这里推荐设置1e-3或者1e-2.

猜你喜欢

转载自blog.csdn.net/sinat_38079265/article/details/121442523