SGD、BGD以及负梯度

2023-10-21 06:30
文章标签 梯度 bgd sgd

本文主要是介绍SGD、BGD以及负梯度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

梯度下降举例子推导过程

https://www.jianshu.com/p/c7e642877b0e

\theta _{1}=\theta _{0}-\alpha \times \Delta J(\theta )

J(\theta )是loss函数,对上一级的输入\theta求导(可以是单变量的,也可以的是多变量的),然后输出\theta _{1}是输入\theta _{0}减去梯度

减去(负号)是因为求导是梯度上升最快的方向,减去就是下降最快的方向

 

一、梯度下降

对噪声数据的拟合函数

与真实值y之间的误差

 

(1)将J(theta)对theta求偏导,得到每个theta对应的的梯度

   

(2)由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta

 

当上式收敛时则退出迭代(何为收敛,即前后两次迭代的值不再发生变化了)。一般情况下,会设置一个具体的参数,当前后两次迭代差值小于该参数时候结束迭代。注意以下几点:
(1) a 即learning rate,决定的下降步伐,如果太小,则找到函数最小值的速度就很慢,如果太大,则可能会出现overshoot the minimum的现象;
(2) 初始点不同,获得的最小值也不同,因此梯度下降求得的只是局部最小值;
(3) 越接近最小值时,下降速度越慢;

1、批量梯度下降BGD(batch gradient descent)

批量梯度下降每次学习都使用整个训练集,

优点:每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点)

缺点:每次学习时间过长,每更新一次θ值,都要用到训练集所有的数据,如果m很大,那么迭代速度就会非常慢;并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。

因为批量梯度下降会有很多计算冗余,因此引入了随机梯度下降。

2、随机梯度下降SGD(Stochastic gradient descent

一样的求解公式,但是随机梯度下降每次只取一个样本来更新模型参数,因此速度非常快,可以完成在线更新,但是因为只取一个样本,随机梯度下降的方向不一定是正确的,因此会带来扰动。

图1.随机梯度下降的震荡

但扰动也不全是坏处,它的好处在于对于类似盆地区域(即很多局部极小值点)那么这个波动的特点可能会使得优化的方向从当前的局部极小值点跳到另一个更好的局部极小值点,这样便可能对于非凸函数,最终收敛于一个较好的局部极值点,甚至全局极值点。

由于波动,因此会使得迭代次数(学习次数)增多,即收敛速度变慢。不过最终其会和全量梯度下降算法一样,具有相同的收敛性,即凸函数收敛于全局极值点,非凸损失函数收敛于局部极值点。

3.小批量梯度下降mini-batch GD

小批量梯度下降是批量梯度和随机梯度下降的中和,在迭代次数和迭代速度之间做了一个折衷,每次从总样本中抽取m个(m<n),然后做批量梯度下降。理论上说batch_size越大越容易达到全局最优,一般设置在【50,256】之间,具体需要根据网络尝试。

 

4、对于上面的linear regression问题,与批量梯度下降对比,随机梯度下降求解的会是最优解吗?

(1)批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。

(2)随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。

      如果模型只有一个peak,会收敛到全局最优解,但是往往会有multi-modal,因此得到的是局部最优解,但是一般工程而言,局部最优解的答案已经够用。

5、为什么说负梯度方向是梯度下降最快的方向?

A、B都是向量,向量点乘公式:A⋅B=||A||⋅||B||⋅cos(α)

梯度与切向量不同,例如y=x^2,切向量是y对x求偏导得到的

梯度要写成f(x,y)=x^2-y,梯度是f(x,y)对x,y都求偏导

 

 

导数最大的方向就是在梯度方向,反之在负梯度方向导数最小

 

5.学习率的设计

(1)合适的学习率

如果学习速率过小,则会导致收敛速度很慢。如果学习速率过大,那么其会阻碍收敛,即在极值点附近会振荡。

(2)学习速率调整(Learning rate schedules)

在每次更新过程中,改变学习速率,如退火。一般使用某种事先设定的策略或者在每次迭代中衰减一个较小的阈值。

如果数据特征是稀疏的或者每个特征有着不同的取值统计特征与空间,那么便不能在每次更新中每个参数使用相同的学习速率,那些很少出现的特征应该使用一个相对较大的学习速率。

6.动量Momentum

借鉴了物理上动量的概念,积累之前的动量来替代 真正的梯度。

特点:

  • 下降初期时,使用上一次参数更新,下降方向一致,乘上较大的\mu能够进行很好的加速
  • 下降中后期时,在局部最小值来回震荡的时候,gradient\to0\mu使得更新幅度增大,跳出陷阱
  • 在梯度改变方向的时候,\mu能够减少更新 总而言之,momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛

总结:在更新模型参数时,对于那些当前的梯度方向与上一次梯度方向相同的参数,那么进行加强,即这些方向上更快了;对于那些当前的梯度方向与上一次梯度方向不同的参数,那么进行削减,即这些方向上减慢了。因此可以获得更快的收敛速度与减少振荡。

7.比较各种优化方法

图2.SGD各优化方法在损失曲面上的表现

从上图可以看出, Adagrad、Adadelta与RMSprop在损失曲面上能够立即转移到正确的移动方向上达到快速的收敛。而Momentum 与NAG会导致偏离(off-track)。同时NAG能够在偏离之后快速修正其路线,因为其根据梯度修正来提高响应性。

 

图3.SGD各优化方法在损失曲面鞍点处上的表现

从上图可以看出,在鞍点(saddle points)处(即某些维度上梯度为零,某些维度上梯度不为零),SGD、Momentum与NAG一直在鞍点梯度为零的方向上振荡,很难打破鞍点位置的对称性;Adagrad、RMSprop与Adadelta能够很快地向梯度不为零的方向上转移。

从上面两幅图可以看出,自适应学习速率方法(Adagrad、Adadelta、RMSprop与Adam)在这些场景下具有更好的收敛速度与收敛性。

 

 

重点参考(写的非常详细,非常好,受益很多):http://www.sohu.com/a/131923387_473283

阅读:
参考:https://blog.csdn.net/lilyth_lilyth/article/details/8973972 

参考:https://www.jianshu.com/p/0412e8d7b55d
参考:https://blog.csdn.net/red_stone1/article/details/80212814

这篇关于SGD、BGD以及负梯度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/252561

相关文章

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

什么是GPT-3的自回归架构?为什么GPT-3无需梯度更新和微调

文章目录 知识回顾GPT-3的自回归架构何为自回归架构为什么架构会影响任务表现自回归架构的局限性与双向模型的对比小结 为何无需梯度更新和微调为什么不需要怎么做到不需要 🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发,目前开始人工智能领域相关知识的学习 🦅个人主页:@逐梦苍穹 📕所属专栏:人工智能 🌻gitee地址:x

分布式训练同步梯度出现形状不一致的解决方案

1、问题描述           为了加快大模型的训练速度,采用了分布式训练策略,基于MultiWorkerServerStrategy模式,集群之间采用Ring—Reduce的通信机制,不同节点在同步梯度会借助collective_ops.all_gather方法将梯度进行汇聚收集,汇聚过程出现了: allreduce_1/CollectiveGather_1 Inconsitent out

【机器学习】梯度提升和随机森林的概念、两者在python中的实例以及梯度提升和随机森林的区别

引言 梯度提升(Gradient Boosting)是一种强大的机器学习技术,它通过迭代地训练决策树来最小化损失函数,以提高模型的预测性能 随机森林(Random Forest)是一种基于树的集成学习算法,它通过组合多个决策树来提高预测的准确性和稳定性 文章目录 引言一、梯度提升1.1 基本原理1.1.1 初始化模型1.1.2 迭代优化1.1.3 梯度计算1.1.4模型更新 1.2

jmeter 梯度测试 如何查看TPS、RT指标

TPS= 服务器处理请求总数/花费的总时间 149371 (请求量)÷ 113(1分53秒)=1321/秒 跟汇总报告的吞吐量差不多,可以认为吞吐量=TPS 平均值,中位数,最大值,最小值的单位都是毫秒ms 下载插件梯度插件 https://jmeter-plugins.org/install/Install/ 插件管理器的jar包下载好以后,我们需要把jar包放在lib\ext目录下边

mllib之随机森林与梯度提升树

随机森林和GBTs都是集成学习算法,它们通过集成多棵决策树来实现强分类器。 集成学习方法就是基于其他的机器学习算法,并把它们有效的组合起来的一种机器学习算法。组合产生的算法相比其中任何一种算法模型更强大、准确。 随机森林和梯度提升树(GBTs)。两者之间主要差别在于每棵树训练的顺序。 随机森林通过对数据随机采样来单独训练每一棵树。这种随机性也使得模型相对于单决策树更健壮,且不易在

基于Python的机器学习系列(26):PyTorch中的梯度计算

在本篇中,我们将探讨PyTorch的autograd功能,它为张量操作提供自动微分。我们将学习如何使用torch.autograd工具计算梯度并进行反向传播。 自动微分(Autograd)         PyTorch的autograd包自动计算张量的梯度。当一个张量的.requires_grad属性被设置为True时,PyTorch会追踪该张量的所有操作。在计算完成后,您可

AI学习指南深度学习篇-SGD的变种算法

AI学习指南深度学习篇 - SGD的变种算法 深度学习是人工智能领域中最为重要的一个分支,而在深度学习的训练过程中,优化算法起着至关重要的作用。随机梯度下降(SGD,Stochastic Gradient Descent)是最基本的优化算法之一。然而,纯SGD在训练深度神经网络时可能会面临收敛速度慢和陷入局部最优的问题。因此,许多变种SGD算法应运而生,极大地提高了模型的训练效率和效果。 本文