11 优化器

目录

1. 随机梯度下降系优化器:SGD

1.1 算法种类

1.2 优缺点 

2 SGDM 即为SGD with momentum 动量

2.1 公式

2.2 动量的优缺点

优点

缺点

2.3 使用场景

 3 AdaGrad

3.1 公式

3.2 AdaGrad的优缺点

优点

缺点

3.3 使用场景

3.4 Adam

3.4.1 Adam优化器的公式

3.4.2 Adam优化器的优缺点

优点

缺点

3.4.3 使用场景

4  怎么选择优化器


        昨天在计算大模型微调占用内存,然后看到优化器Adam占用两倍的模型参数(一阶矩、二阶矩),仔细思考没想明白,今天把优化器的内容补充下;

        优化器在机器学习和深度学习中扮演着至关重要的角色,它们负责更新模型的参数以最小化损失函数。优化器基于训练数据和模型预测的误差,调整模型参数,使模型更好地拟合数据。

1. 随机梯度下降系优化器:SGD

        SGD全称Stochastic Gradient Descent,随机梯度下降,1847年提出。每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。它解决了随机小批量样本的问题,但仍然有自适应学习率、容易卡在梯度较小点等问题。

核心思量:就是每次随机挑一个或者一组(mini-batch)数据来优化神经网络的参数。有大佬证明过,这种方式可以近似地等价于原始的梯度下降法。采用SGD的好处就是可以在保证精度的同时降低计算量,让神经网络可以应用于更大规模的数据上。

假设我们有参数向量 𝜃,损失函数为 𝐿,学习率为 𝜂(eta),并且 𝜃𝑗是参数向量中的第 𝑗个元素。SGD更新规则可以表示为:

其中:

  • 𝜃𝑗是参数向量 𝜃 中的第 𝑗个参数。
  • 𝜂 是学习率,控制更新步长的大小。这个是超参数,需要预先设定的,一般小于1;
  • ∇𝜃𝐿(𝜃;𝑥𝑖,𝑦𝑖) 是损失函数 𝐿关于参数 𝜃 的梯度,该梯度是在样本 (𝑥𝑖,𝑦𝑖)上计算的。

1.1 算法种类

1.SGD是最基本的随机梯度下降,它是指每次参数更新只使用一个样本,这样可能导致更新较慢。

2.Batch-SGD是批随机梯度下降,它是指每次参数更新使用所有样本,即把所有样本都代入计算一遍,然后取它们的参数更新均值,来对参数进行一次性更新,这种更新方式较为粗糙;需要更多的内存。

3.Mini-Batch-SGD是小批量随机梯度下降,它是指每次参数更新使用一小批样本,这批样本的数量通常可以采用trial-and-error的方法来确定,这种方法被证明可以有效加快训练速度。

1.2 优缺点 

  • 优点:计算效率高,容易跳出局部最小值。
  • 缺点:由于每次迭代只使用一小部分数据,更新方向可能不稳定。当遇到局部最优点或鞍点时,梯度为0,无法继续更新参数;

2 SGDM 即为SGD with momentum 动量

  • 原理:动量优化器在SGD的基础上增加了一个动量项,使得更新过程更加平滑,减少震荡,加速收敛。

  • 优点:有助于更快地收敛到最优解,特别是在非凸或噪声较大的损失函数中。

提出背景:SGD可能会在垂直方向上产生大幅度的振荡,这会导致训练过程变得非常慢,因为模型需要花费很多迭代来克服这些振荡。此外,在鞍点附近,SGD也可能会陷入停滞,这是因为梯度可能非常小。

思想:来源于物理学中的惯性原理,即物体倾向于保持其运动状态不变。在优化算法中,动量有助于平滑参数更新,减少振荡,加快收敛速度,并帮助模型更快地穿过鞍点。

2.1 公式

        动量始终使用的是梯度的信息,只不过在更新参数的时候,不仅使用了当前的梯度,同时前一步的梯度也参与了计算。

训练过程中模型内存使用: 模型参数P+梯度P+动量参数P

        设 𝑣𝑡 是动量项,𝛾 是动量系数(通常设置为0.9),𝜂是学习率,∇𝜃𝐿(𝜃)是损失函数关于参数 𝜃θ 的梯度。动量更新规则如下:

其中:

  • 𝑣𝑡​ 是在时间步 𝑡的动量项(梯度的变种),它是一个累积梯度的加权和。
  • 𝛾 是介于0和1之间的动量系数,决定了前一次梯度的影响程度。
  • 𝜂是学习率,控制参数更新的幅度。
  • ∇𝜃𝐿(𝜃) 是在当前参数 𝜃 下损失函数的梯度。

2.2 动量的优缺点

优点
  • 加速收敛:动量有助于加速在平坦区域的收敛,因为一旦算法确定了正确的方向,它就会沿该方向持续前进,减少在垂直方向上的振荡。
  • 改善稳定性:在训练过程中,动量可以平滑更新过程,减少因随机梯度造成的波动。
  • 逃逸鞍点:动量有助于模型更快地逃离鞍点,因为即使在梯度很小的地方,动量也能推动参数更新。
缺点
  • 可能过冲:如果动量设置得过高,算法可能会在最小值附近过冲,导致模型在最小值附近振荡,不能稳定收敛。
  • 动态调整困难:动量系数和学习率的选择可能需要通过实验来确定,而且可能需要随训练过程进行调整,这增加了训练的复杂性。

2.3 使用场景

  • 当训练数据集很大时,SGD的随机性可能会导致更新方向不稳定,动量可以帮助平滑这个过程。
  • 当损失函数表面具有许多局部最小值或鞍点时,动量可以帮助模型更快地穿越这些区域。
  • 在深度学习中,特别是在训练深度神经网络时,动量常被用来加速收敛和提高稳定性。

 3 AdaGrad

        AdaGrad(Adaptive Gradient)算法是为了解决传统随机梯度下降(SGD)在优化过程中的一些局限性而提出的。在SGD中,所有参数都共享同一个全局学习率,这意味着无论参数的特性如何,它们的更新步长都是一样的。然而,在实践中,不同的参数可能需要不同的更新步长来更有效地收敛。例如,一些参数可能需要更小的步长以避免在最小值附近振荡,而另一些参数可能需要更大的步长来加速收敛。

        AdaGrad的提出正是为了适应不同参数的特性,通过为每个参数分配一个自适应的学习率,从而在优化过程中自动调整每个参数的更新步长。这样,AdaGrad能够在处理稀疏数据时表现得更为优秀,因为在稀疏数据中,某些参数可能很少更新,而AdaGrad可以为这些参数提供较大的学习率,以确保它们能够及时地进行有效的更新。

  • 原理:AdaGrad为每个参数维护一个历史梯度的累积平方和,然后基于这个累积和动态调整学习率。
  • 优点:自适应学习率,对稀疏数据有效。
  • 缺点:历史梯度的累积可能导致学习率过快衰减。

3.1 公式

g_{i,j}^2是参数 𝜃𝑗​ 在时间步 𝑡的梯度平方,𝐺𝑡,𝑗 是从开始到时间步 𝑡 所有梯度平方的累加和,𝛼 是初始学习率,𝜖 是一个很小的正数(为了防止除数为零)。

在时间步 𝑡,AdaGrad的更新公式为:梯度越大迭代的步长越小;

在AdaGrad中,如果某个参数的历史梯度平方累积和 G_{i,j}较大,意味着该参数在过去的迭代中收到的梯度较大或较多,那么在接下来的迭代中,该参数的学习率会相应减小,即 \frac{\alpha }{\sqrt{G_{i,j}+\varepsilon }}​ 减小。因此,虽然单次梯度 𝑔𝑡,𝑗可能很大,但由于学习率的减小,实际的更新步长可能并不会很大。

3.2 AdaGrad的优缺点

优点
  • 自适应学习率:AdaGrad为每个参数提供自适应的学习率,这使得它在处理稀疏数据时特别有效。
  • 处理稀疏特征:对于在训练过程中很少更新的参数,AdaGrad能够给予较大的学习率,帮助它们更快地收敛。
缺点
  • 学习率衰减过快:AdaGrad的学习率会随着训练的进行而单调递减,这可能导致学习率过早地变得太小,从而阻碍模型的进一步改进。
  • 存储成本:AdaGrad需要为每个参数存储一个梯度平方的累加和,这会增加内存的使用。

3.3 使用场景

        AdaGrad非常适合于处理稀疏数据和具有大量零值或极少更新的特征的情况。例如,在自然语言处理(NLP)任务中,词嵌入矩阵往往非常稀疏,AdaGrad能够为不常见的词提供更大的学习率,有助于它们更快地学习到有意义的表示。

        在深度学习中,AdaGrad可能不是最优选择,特别是在需要长时间训练的模型中,因为它的学习率衰减问题可能会导致训练后期的收敛速度变慢。然而,对于那些数据集较小或特征稀疏的任务,AdaGrad仍然是一个值得考虑的优化算法。在实际应用中,AdaGrad经常被更先进的自适应优化算法如Adam和RMSprop所取代,这些算法在学习率调整方面提供了更好的性能。

3.4 Adam

        Adam优化器(Adaptive Moment Estimation)由Diederik P. Kingma和Jimmy Ba在2014年提出,旨在结合AdaGrad和RMSprop的优点,同时解决它们的一些缺点。AdaGrad能够自适应地调整学习率,但在训练后期学习率会过快衰减;RMSprop通过使用滑动平均来解决AdaGrad的这一问题,但在处理稀疏数据时效果不佳。Adam试图提供一个更全面的解决方案,既能处理非稀疏数据,又能处理稀疏数据,并且能够自适应地调整每个参数的学习率。

3.4.1 Adam优化器的公式

        Adam优化器结合了一阶矩估计(即动量)和二阶矩估计(类似于RMSprop)。它维护了两个滑动平均值,分别是梯度的一阶矩(即梯度的均值)和梯度的二阶矩(即梯度平方的均值)。

        设 𝜃 是参数向量,𝛽1 和 𝛽2是两个超参数,分别用于控制一阶和二阶矩估计的指数衰减率,𝛼 是学习率,𝜖 是一个很小的正数,用于防止除数为零。

        β1​ 的默认值是 0.9,而 𝛽2的默认值是 0.999。

一阶矩估计:(其实就是动量)当前梯度与前面梯度(动量)的加权平均。

二阶矩估计:(学习率调节器)当前梯度平方与前面梯度(动量)平方的加权平均。

  • 一阶矩的偏差校正\beta_1^t是 𝛽1 的 𝑡次幂,它表示了从算法开始到当前时间步 𝑡的所有历史一阶矩估计的衰减累积效应。在初始迭代时,这个值接近于0,但随着迭代次数增加,它会逐渐接近1。通过除以 1-\beta_1^t,偏差校正确保了 m_t的估计更加准确,尤其是在迭代开始时。

  • 二阶矩的偏差校正:类似的,\beta_2^t是 𝛽2​ 的 𝑡 次幂,它表示了所有历史二阶矩估计的衰减累积效应。由于 𝛽2​ 通常设置得更接近于1(如0.999),它的 𝑡次幂在迭代初期会非常小,导致 \bar{v}_t的值在开始时可能很大。偏差校正通过除以1-\beta_2^t 来调整这个估计,确保它更接近于真实值。

3.4.2 Adam优化器的优缺点

优点
  • 自适应学习率:为每个参数提供自适应的学习率,能够处理稀疏和非稀疏数据。
  • 快速收敛:在实践中,Adam通常能够比传统的SGD更快地收敛。
  • 简单易用:相比其他自适应优化算法,Adam的超参数设置较为直观,且通常不需要大量的调参即可获得良好效果。
  • 鲁棒性强:Adam对学习率的选择相对不敏感,且在不同的任务和模型上表现出较好的泛化能力。
缺点
  • 可能在非凸问题中收敛到次优解:虽然Adam在许多任务中表现良好,但在某些非凸优化问题中,它可能无法找到全局最优解。
  • 偏差校正:虽然Adam通过偏差校正来减轻初始迭代时的偏差问题,但这种校正可能在某些情况下引入额外的复杂性。

3.4.3 使用场景

        Adam优化器因其优秀的性能和广泛的适用性,已经成为深度学习中最为流行的优化算法之一。它在各种场景下都能提供良好的优化效果,包括但不限于:

  • 计算机视觉:在图像识别、目标检测和图像生成等任务中。
  • 自然语言处理:在文本分类、机器翻译和文本生成等领域。
  • 推荐系统:在个性化推荐和广告投放的模型训练中。
  • 强化学习:在智能体的学习和决策制定中。

总的来说,Adam优化器因其灵活性和高效性,成为了深度学习模型训练的首选优化算法。

4  怎么选择优化器

        五大优化器其实分为两类,SGD、SGDM,和Adagrad、RMSProp、Adam。使用比较多的是SGDMAdam

        如上所示,SGDM在CV里面应用较多,而Adam则基本横扫NLP、RL、GAN、语音合成等领域。所以我们基本按照所属领域来使用就好了。比如NLP领域,Transformer、BERT这些经典模型均使用的Adam,及其变种AdamW。

        SGDM训练慢,但收敛性更好,训练也更稳定,训练和验证间的gap也较小。而Adam则正好相反。

ref:

https://zhuanlan.zhihu.com/p/208178763

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值