模型训练——优化器Optimizer的选择


前言

目前,深度学习领域,使用最广泛的优化器种类可分成:SGD和Adam

一、SGD

  SGD —— 随机梯度下降。是一种最为常见、最简单的梯度下降算法,有些书籍还将其分为BGD、SGD、MBGD,分别为批量梯度下降算法、随机梯度下降算法、小批量梯度下降算法。BGD在训练的时候选用所有的训练集进行计算,SGD在训练的时候只选择一个数据进行训练,而MBGD在训练的时候只选择小部分数据进行训练。在模型训练时,都是加载一个批次batch的图片,所以实际上使用的是小批量梯度下降,但大多数文章都是使用SGD这个词来代替

优点:实现简单,收敛稳定。

存在问题
(1)学习率的选择:学习率过小导致收敛速度过慢,需要迭代多次,要求计算资源多;过大又会跳变,跳过极值点。

(2)容易陷入局部最优:在梯度下降时,在 x 方向上是一个最小值点,但是它在另一个方向上是局部最大值点,并且,如果它沿着 x 方向变得更平坦的话,梯度下降会在 x 轴振荡并且不能继续根据 y 轴下降,这就会给我们一种已经收敛到最小值点的错觉。(但这个问题可以设置momentum来缓解,这也是大多数论文中提到的,pytorch的SGD优化器中,momentum=0.9,weight decay=0.0005

二、Adam

Adam是改进的SGD,它加入了更新的动量和自适应的学习率,可以帮助更快地收敛。

优点:收敛速度快;超参数具有很好的解释性,且通常无需调整或仅需很少的微调。

存在问题:可能会对前期出现的特征过拟合,后期才出现的特征很难纠正前期的拟合效果。后期Adam的学习率太低,影响了有效的收敛。

三、AdamW

Adam 虽然收敛速度快,但没能解决参数过拟合的问题。后续提出的AdamW是对Adam的改进,它将权重衰减与梯度更新分开处理。具体来说,权重衰减只应用于权重参数,而不应用于偏置参数。这是通过在损失函数中添加一个额外的L2正则化项来实现的,而不是直接应用于梯度更新。这有助于避免权重衰减对偏置参数的不必要影响,因此可以提高模型的训练效果。

总结

一般来说,使用SGD进行训练,所需要的迭代次数会比较多,因为它收敛速度慢而稳定;Adam类的收敛速度比较快,迭代次数可以设置小一点。但要使用哪种优化器还是要取决于具体的任务和模型,在做项目时,可以先选择Adam类的,训练周期比较短。

猜你喜欢

转载自blog.csdn.net/qq_43199575/article/details/134306281