NAG(Nesterov accelerated gradient)

简介: q

SGD算法解析
1.MBGD(Mini-batch Gradient Descent)小批量梯度下降法

    明明类名是SGD,为什么介绍MBGD呢,因为在Pytorch中,torch.optim.SGD其实是实现的MBGD,要想使用SGD,只要将batch_size设成1就行了。

    MBGD就是结合BGD和SGD的折中,对于含有 n个训练样本的数据集,每次参数更新,选择一个大小为 m(m<n) 的mini-batch数据样本计算其梯度,其参数更新公式如下,其中是一个batch的开始:

            (6)

优点:使用mini-batch的时候,可以收敛得很快,有一定摆脱局部最优的能力。

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

       b.不能解决局部最优解的问题

2.Momentum动量

     动量是一种有助于在相关方向上加速SGD并抑制振荡的方法,通过将当前梯度与过去梯度加权平均,来获取即将更新的梯度。如下图b图所示。它通过将过去时间步长的更新向量的一小部分添加到当前更新向量来实现这一点:


动量项通常设置为0.9或类似值。

参数更新公式如下,其中ρ 是动量衰减率,m是速率(即一阶动量):

                     (7)

            (8)

               (9)

3.NAG(Nesterov accelerated gradient)

    NAG的思想是在动量法的基础上展开的。动量法是思想是,将当前梯度与过去梯度加权平均,来获取即将更新的梯度。在知道梯度之后,更新自变量到新的位置。也就是说我们其实在每一步,是知道下一时刻位置的。这时Nesterov就说了:那既然这样的话,我们何不直接采用下一时刻的梯度来和上一时刻梯度进行加权平均呢?下面两张图看明白,就理解NAG了:

————————————————

相关文章
|
机器学习/深度学习 并行计算 算法
梯度下降(Gradient Descent)
梯度下降(Gradient Descent)是一种常用的优化算法,用于最小化(或最大化)函数的目标值。它是一种迭代的优化方法,通过沿着目标函数的负梯度方向更新参数,逐步接近最优解。
149 1
|
机器学习/深度学习 算法 PyTorch
Gradient Descent Algorithm 梯度下降算法
Gradient Descent Algorithm 梯度下降算法
110 0
|
机器学习/深度学习 传感器 算法
指数分布优化算法Exponential distribution optimizer(EDO)附matlab代码
指数分布优化算法Exponential distribution optimizer(EDO)附matlab代码
|
机器学习/深度学习 Python
【机器学习】numpy实现NAG(Nesterov accelerated gradient)优化器
【机器学习】numpy实现NAG(Nesterov accelerated gradient)优化器
236 0
【机器学习】numpy实现NAG(Nesterov accelerated gradient)优化器
|
机器学习/深度学习 移动开发
梯度下降法 Gradient Descent
梯度下降法 Gradient Descent
|
机器学习/深度学习 算法 数据可视化
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-1
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-1
|
机器学习/深度学习 算法
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-2
Lesson 4.3 梯度下降(Gradient Descent)基本原理与手动实现-2
|
机器学习/深度学习 算法 Python
机器学习算法之——梯度提升(Gradient Boosting)上
由于每个子模型要使用全部的数据集进行训练,因此 Ada Boosting 算法中没有 oob 数据集,在使用 Ada Boosting 算法前,需要划分数据集:train_test_split;
机器学习算法之——梯度提升(Gradient Boosting)上
|
机器学习/深度学习 算法
机器学习算法之——梯度提升(Gradient Boosting)下
GDBT本身并不复杂,不过要吃透的话需要对集成学习的原理、策树原理和各种损失函树有一定的了解。由于GBDT的卓越性能,只要是研究机器学习都应该掌握这个算法,包括背后的原理和应用调参方法。目前GBDT的算法比较好的库是xgboost。当然scikit-learn也可以。
机器学习算法之——梯度提升(Gradient Boosting)下
|
机器学习/深度学习 移动开发 算法
*、Policy Gradient和PPO(PPO2)
*、Policy Gradient和PPO(PPO2)
*、Policy Gradient和PPO(PPO2)