【机器学习】【深度学习】优化器(Optimizer)

一、概述

什么是优化器?

优化器(Optimizer)是深度学习中的一个核心的概念,用于更新神经网络的权重,以减少或最小化损失函数(loss function)的值。损失函数衡量了模型的预测值与真实值之间的差异,而优化器的目标是通过调整网络参数来最小化这个差异,从而提高模型的准确性和性能。

在神经网络训练过程中,优化器在反向传播过程中起着至关重要的作用。反向传播计算了损失函数相当于模型参数的梯度(即损失函数的导数),优化器则使用这些梯度来更新模型的参数。

为什么使用优化器?

  1. 使用优化器可以提高模型的准确性。优化器通过调整模型的权重和偏置,以最小化损失函数,从而提高模型二点准确性。
  2. 改善学习速率。优化器能够根据损失函数的梯度调整学习速率,帮助模型更好地学习,同时避免在训练过程中陷入局部最小值。
  3. 提高训练效率。优化器的选择对模型的训练素的和最终性能有着很大的影响。不同的优化器可能适合不同的任务,和数据集。

二、常见的优化器用处及应用场景

批量梯度下降(BGD)

批量梯度下降(BGD)(Batch Gradient Descent):BGD是最原始的梯度下降方法,每次迭代使用全部训练数据来计算损失函数的梯度,并更新模型参数。

应用场景与特点:

  • 小型数据集;
  • 准确性高;
  • 全局最优解;
  • 收敛速度不是关键因素;
  • 不适用大型数据集,因为计算成本太高了。

随机梯度下降(SGD)

随机梯度下降(SGD)(Stochastic Gradient Descent):是一种优化模型的算法,SGD每次迭代只随机选择一个样本来计算损失函数的梯度,并更新模型参数。因此其计算量最小,更新速度最快,但是会引发一些随机性。与BGD相比,在大数据集上SGD的优势格外明显。

应用场景与特点:

  • 深度学习模型训练:SGD优化器常用于训练神经网络模型,包括卷积神经网络(CNN),循环神经网络(RNN),生成对抗网络(GAN)等;
  • 大规模的数据集:SGD优化器通常比传统的批量梯度下降(Batch Gradient Descent)更具优势。因为SGD每次只使用部分样本计算梯度,减少了计算开销,因此适合大规模数据。

小批量梯度下降(MBGD)

小批量梯度下降(MBGD)(Mini-Batch Gradient Descent):是批量梯度下降(BGD)与随机梯度下降(SGD)的这种方案,即在每一次迭代中使用一小批数据而不是全部数据来更新模型参数。

就是将训练数据集按照较小的批次分割,每次迭代时从这些批次中随机抽取一个进行计算并更新模型参数。这个在训练过程中,每次迭代计算量较小,同时兼顾准确性和随机性,有利于加快收敛速度。

应用场景与特点:

  • 大规模数据集,高纬度特征空间,如图像分类,等等;
  • 训练深度学习模型,卷积神经网络(CNN),循环神经网络(RNN)等,因为这些模型通常需要大量的数据来进行训练,而且MBGD能很好的接受大规模数据集。
优化器名称 BGD SGD MBGD
优点 1. 准确性高 2. 对梯度的估计是无偏的。样例越多,标准差越小。 3. 一次迭代是对所有样本进行计算,此时适用向量化进行操作,实现了并行。(向量化操作,可以参考Numpy的矩阵计算,无需进行for循环) 1. 只用一个数据梯度更新快. 2. 更新时loss比较动荡,可能会跳出局部最优点,到一个更好的局部最优。 结合了BGD,SGD的优点。
缺点 1. 可能对内存要求高 2. 大规模数据集时,计算耗费太大 3. 每次的更新都是在遍历全部样例之后,这时会发现一些样例对于模型参数的更新是没有大用处的。 因为每次更新只用一个数据梯度,loss比较动荡,所以比较难收敛到一个准确的极小值,需要调整学习率。 1. 收敛速度慢;2. 需要选择合适的批次;3. 内存需求;4. 需要合适的学习率;
使用场景 小型数据集,模型简单;准确性高;全局最优解(凸函数最好);并行计算 大规模数据。 大规模数据;高纬度特征空间。

动量(Momentum法)

动量法(Momentum):在深度学习中是一种常用的优化算法,它的作用主要是减少训练过程中的摆动,加速收敛,并帮助模型摆脱局部最小值区域。概念上,动量法通过引入一个累计梯度的指数加权平均,将过去的梯度信息考虑进当前的参数更新中,从而增加稳定性和提高训练效率。

应用场景与特点:

  • 用来改进一些优化器,比如随机梯度下降(SGD),小批量梯度下降(MBGD);
  • 一些训练过程中摆动较大的模型,可以减少摆动。

SGD是每次选择一个数据进行梯度更新,loss经常反复震荡,这就好比这辆车每开一步就换一个司机(数据产生的梯度),每个司机的想法都不同。

而Momentum虽然使得SGD每一步都要换司机,但是,新的司机必须参考上一个司机的意见(主要是近几次),这样即使在局部最优,新司机觉得应该停止,但是前几位司机认为都应该冲过去,这时新司机就会冲过去,这就避免了局部最优。

NAG(Nesterov Accelerated Gradient)

NAG(Nesterov Accelerated Gradient):是一种在动量法(Momentum)基础上进行改进的优化算法。它的作用主要是提高训练过程中的收敛速度和稳定性。概念上,NAG先按照之前的动量更新参数,再在这个新的位置计算梯度,并根据此调整更新方向,从而减少摆动,加快收敛。

应用场景与特点:

  • 用来改进一些优化器,比如随机梯度下降(SGD),小批量梯度下降(MBGD);
  • 一些训练过程中摆动较大的模型,可以减少摆动;

Adagrad(Adaptive Gradient)

Adagrad(Adaptive Gradient):是一种自适应梯度下降的优化器,它对不同参数使用不同的学习率,对于更新频率较低的参数施以较大的学习率,对于更新频率较高的参数使用较小的学习率。通过调整每个参数的学习率,使得模型能够更快的收敛到最优解。

应用场景与特点:

  • 大规模的数据集:Adagrad通过自适应调整学习率,减少了在大规模数据集上手动调参的工作量;
  • 特征提取:在图像识别和处理任务中,Adagrad可以加速模型对重要视觉特征的学习,尤其是在处理高纬度和稀疏的特征向量时。

Adam

Adam(Adaptive Moment Estimation):是一种梯度下降算法的变体,用于更新神经网络的权重,它结合了AdaGrad和Momemtum两种优化算法的优点,能够快速收敛并且减少训练时间。Adam优化器计算出每个参数的独立自适应学习率,不需要手动调整学习率的大小,因此在实践中被广泛应用(一阶矩估计,二阶矩估计)。

应用场景与特点:

  • 处理大规模的数据:Adam优化器因为其计算效率搞而特别适合处理大规模数据。他能够在有限的计算资源下快速迭代更新神经网络权重,这对于处理大型数据集至关重要;
  • 训练复杂模型:对于复杂模型,比如神经网络,Adam能够提供稳定而快速的收敛性能。

在训练过程中,loss值越来越小,说明了Adam优化器性能高。

相关推荐
biter00883 分钟前
opencv(15) OpenCV背景减除器(Background Subtractors)学习
人工智能·opencv·学习
吃个糖糖9 分钟前
35 Opencv 亚像素角点检测
人工智能·opencv·计算机视觉
qq_5290252927 分钟前
Torch.gather
python·深度学习·机器学习
数据小爬虫@28 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
IT古董1 小时前
【漫话机器学习系列】017.大O算法(Big-O Notation)
人工智能·机器学习
凯哥是个大帅比1 小时前
人工智能ACA(五)--深度学习基础
人工智能·深度学习
終不似少年遊*1 小时前
pyecharts
python·信息可视化·数据分析·学习笔记·pyecharts·使用技巧
Python之栈1 小时前
【无标题】
数据库·python·mysql