深度学习中的优化函数optimizer SGD Adam AdaGrad RMSProp
当前深度学习中使用到的主流的优化函数有:
1. BGD(Batch Gradient Descent),SGD(Stochastic Gradient Descent)和MBGD(Mini-Batch Gradient Descent)
2. Momentum & Nesterov Momentum
3. AdaGrad
4. RMSProp
5. Adam
1. BGD(Batch Gradient Descent),SGD(Stochastic Gradient Descent)和MBGD(Mini-Batch Gradient Descent)
这三类优化算法是最早的优化算法,它们之前的不同之处是训练时输入图片数量不同。
1.1 BGD(Batch Gradient Descent)
BGD是采用整个训练集的数据来计算损失函数对参数的梯度。计算公式如下所示:
表示当前我们需要更新的模型参数,
表示当前的学习率,
表示
在损失函数上的偏导数。
该算法的优缺点:每次需要计算整个数据集的梯度,计算量很大,大量的训练数据很难实现。对于损失函数是凸函数来说可以把模型优化到全局最优点的位置,对于损失函数是非凸函数来说很容易把模型优化到局部极小点。
1.2 SGD(Stochastic Gradient Descent)
SGD则是在训练过程中每次输入一张图片进行训练,这样不会像BGD一样需要大量的计算资源。计算公式如下所示:
公式和BGD一致,只是每次处理这一张图片。
该算法的优缺点:优点是计算量小,计算速度快,又概率跳出BGD中提到的局部极小点。缺点是训练过程中损失函数波动很大,容易困在鞍点,对噪声特别敏感(因为每次只输入一张图片,每张图片的质量参差不齐)。
1.3 MBGD(Mini-Batch Gradient Descent)
MBGD在训练时每次输入小批量的数据进行训练。这样既可以不像BGD那样每次输入所有数据导致计算太大,又可以解决SGD每次输入一张图片导致训练损失急剧波动的问题。计算公式如下所示:
该算法的优缺点:优点是计算效率高,收敛稳定。缺点是需要不断调整学习率,也是容易被困在鞍点处。
2. Momentum & Nesterov Momentum
2.1 Momentum
Momentum动量,模拟物理中的物体运动惯性。当模型参数一直朝某个方向运动是,我们可以加快运动的步伐,当运行方向发生改变时我们就减慢朝之前运动方向的步伐。计算公式如下所示:
Momentum会观察前面的历史梯度,当前梯度如果和历史梯度一致,就会增强这个方向梯度下降的力度,如果当前梯度和历史梯度不一致,那么就会减弱当前方向梯度下降的力度。
2.2 Nesterov Momentum
在Momentum基础上做了该进,在梯度下降过程中,我们希望知道前面的梯度是否和当前的梯度一致,如果不一致那么我们可以提前进行减速操作。相当于增加了预测的功能。公式如下所示:
就表示该算法计算
后面的位置的梯度,做了一个位置的展望梯度计算。
3. AdaGrad
前面的优化算法都是使用固定的学习率进行梯度优化,AdaGrad则是在训练中对学习率进行自动调整,对于出现频率较高的参数使用较低的学习率,出现频率较少的参数使用较高的学习率。计算公式如下所示:
上面公式是AdaGrad的整体算法。G表示对角矩阵,每个对角线的数据对应参数从第一次到第N次的训练梯度值,
是一个平滑项,防止分母为0。
该算法的优缺点:优点是自动调整学习率,非常适合处理稀疏的数据(训练样本数量不均)。缺点是G的数值会随着迭代的次数不断得增加,从而造成梯度消失的问题,使得训练提前结束。
4. RMSProp
RMSProp是对AdaGrad的算法改进,Adagrad是累加之前所有的梯度平方,RMSProp增加计算对应的平均值,缓解学习率飞速下降的问题。
函数表示求当前累加梯度的平均值。第二个公式表示之前的累加梯度平均值加上当前梯度就是当前梯度的衰减平均值。
5. Adam
Adam是对前面算法的一个结合,既存储了过去梯度的平方指数衰减平均值,也保存了过去梯度的指数衰减平均值。公式如下所示:
如果m和v被初始化为0,会向0进行偏置,最后对m和v做了偏差矫正。偏差矫正公式为:
最后Adam的梯度更新公式如下所示:
综上就是Adam的整体算法公式,结合了上面优化算法的优点,可以有效处理稀疏数据。
深度学习中的优化函数optimizer SGD Adam AdaGrad RMSProp相关推荐
- 深度学习中的优化函数
原博:https://www.cnblogs.com/adong7639/p/9850379.html " 说到优化算法,入门级必从 SGD 学起,老司机则会告诉你更好的还有AdaGrad ...
- 深度学习中的优化算法之Adam
之前在https://blog.csdn.net/fengbingchun/article/details/124909910 介绍过深度学习中的优化算法Adadelta,这里介绍下深度学习的另一种优 ...
- 深度学习中的一些英文解释
A: (1)anchors:锚点.(anchors(锚点)定义在RPN网络中) B: (1)bounding box:预测边界框. (2)Botton-up 3D proposal generatio ...
- DL-4 深度学习中的batch_size、epoch、iteration的区别
(1)batchsize:批大小.在深度学习中,一般采用SGD训练,即每次训练在训练集中取batchsize个样本训练: (2)iteration:1个iteration等于使用batchsize个样 ...
- 深度学习中的batch、epoch、iteration
名词解释 名词 定义 Epoch 使用训练集的全部数据对模型进行一次完整的训练,被称为"一代训练" Batch 使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这一 ...
- 深度学习中常用优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)
本文转载自:https://www.cnblogs.com/guoyaohua/p/8542554.html 在机器学习.深度学习中使用的优化算法除了常见的梯度下降,还有 Adadelta,Adagr ...
- 深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结
深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结 1. 引言 在深度学习中我们定义了损失函数以后,会采取各种各样的方法来降低损失函数的数值,从而使模 ...
- 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
深度学习笔记(一):logistic分类 深度学习笔记(二):简单神经网络,后向传播算法及实现 深度学习笔记(三):激活函数和损失函数 深度学习笔记:优化方法总结 深度学习笔记(四):循环神经 ...
- 深度学习 --- 优化入门二(SGD、动量(Momentum)、AdaGrad、RMSProp、Adam详解)
另在一篇文章中,我们介绍了随机梯度下降的细节以及如何解决陷入局部最小值或鞍点等问题.在这篇文章中,我们看看另一个困扰神经网络训练的问题,即病态曲率. 虽然局部最小值和鞍点可以阻止我们的训练,但是病态曲 ...
最新文章
- mysql utf8 和 utf8mb4 区别
- SAP Fiori 应用的本地 sandbox Launchpad - 出于测试用途
- 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
- sqlserver java odbc_Java JDBC------------------ODBC(SQLServer)链接
- postgresql编译安装
- this java_Java this关键字详解
- boost 正则 分割字符串
- python必背入门代码-你们都是怎么学 Python 的?
- 345.反转字符串中的元音字符(力扣leetcode) 博主可答疑该问题
- python制作ppt_如何利用Excel与Python制作PPT
- 稀疏矩阵计算器(三元组实现矩阵加减乘法)
- 5.8G微波雷达模块使用,5.8G微波雷达模块工作原理和介绍
- docker端口映射失败解决方法
- java 调用odi_[转]ODI定时任务
- matlab中如何画圆锥,使用Matlab画出圆台圆锥圆柱
- 如何在家赚钱,盘点5个方法,让你足不出户也能挣钱
- java jpanel 层,java – 循环遍历JPanel
- 基于STM32F103RB的模拟液位检测告警系统(已实现)
- 索引是什么,怎么确定索引
- 《论语》原文及其全文翻译 学而篇3