SGD(随机梯度下降)详解
SGD(随机梯度下降)详解
- 名词解释
- SGD vs BGD
- 效率方面
- 优化方面
- SGD优势
- SGD劣势
名词解释
名词 | 定义 |
---|---|
original-loss | 整个训练集上的loss |
minibatch-loss | 在一个mini batch上的loss |
BGD | 最原始的梯度下降算法,为了计算original-loss上的梯度,需要使用训练集全部数据 |
SGD | (近似)计算original-loss梯度时,只使用一个mini batch,相当于用minibatch-loss上的梯度去近似original-loss梯度 |
奇点(只是为了方便说明而起的名字) | local minimal和saddle point |
SGD vs BGD
下面将通过BGD与SGD的对比,来对SGD进行深入理解。
效率方面
深度学习使用的训练集一般都比较大(几十万~几十亿)。而BGD算法,每走一步(更新模型参数),为了计算original-loss上的梯度,就需要遍历整个数据集,这显然是不现实的。而SGD算法,每次随机选择一个mini-batch去计算梯度,在minibatch-loss上的梯度显然是original-loss上的梯度的无偏估计,因此利用minibatch-loss上的梯度可以近似original-loss上的梯度,并且每走一步只需要遍历一个minibatch(一~几百)的数据。
优化方面
SGD优势
(a)BGD容易陷入original-loss的奇点,而SGD不容易陷入;
(b)SGD也不会陷入minibatch-loss的奇点。
解释:
(a)original-loss存在很多奇点,而BGD每次下降的方向就是original-loss的负梯度,因此BGD很容易陷入某个奇点,而无法达到global minimal(或者比较好的local minimal)。SGD一定程度上可以避免这个情况,这可以从2个角度来理解。
从引入randomness的角度来看,SGD中计算的梯度是对original-loss梯度的近似,相当于在original-loss梯度的基础上加了randomness,因此即使当前走到了original-loss的奇点,SGD计算的梯度因为引入了randomness,所以也不接近0,比较容易跳出奇点。
另一个角度,SGD计算的不是original-loss的梯度,而是minibatch-loss的梯度。显然original-loss和minibatch-loss的形状不同,奇点分布也不同,如果当前这个点在original-loss上是奇点,但这个点在minibatch-loss中并不是奇点,此时使用minibatch-loss的负梯度作为下降方向,自然就不会陷入这个点了。
(b)主要是因为每次迭代,都会使用不同的mini batch,而不同的minibatch-loss的形状不同。就算此时陷入了当前minibatch-loss的奇点,那么下一次迭代,这个点也不一定就是下一个minibatch-loss的奇点,如果不是的话,自然就跳出来了。
SGD劣势
SGD走的路径比较曲折(震荡),尤其是batch比较小的情况下。
解释:
为了方便说明,假设loss函数是凸函数(没有奇点,local minimal就是global minimal)。即使loss函数不是凸函数也是相同的道理。 需要记住,不管使用什么优化方法,待优化的目标都是original-loss,分析问题都要从这一点出发。
BGD每次走的方向是original-loss的负梯度方向,是original-loss在当前点上的最速下降方向。而SGD每次走的方向是minibatch-loss的负梯度方向(或者理解成original-loss的负梯度+randomness),显然这个方向和original-loss的负梯度方向不同,也就不是original-loss在当前位置的最快下降方向(如果这个mini batch的大部分数据点的target是错误的,甚至有可能是original-loss在当前位置的上升方向),所以使用SGD算法从当前点走到global minimal的路径会很曲折(震荡)。
为了减少震荡,一个方法是增大batch size,原因是minibatch-loss的梯度是对original-loss梯度的无偏估计(bias为0),并且variance随着batch size的变大而减小。当batch size足够大(比如接近训练集),此时SGD就退化成了BGD,就会带来上面说的那些问题。因此batch size需要选择合适大小,一般是几十到几百。
减少震荡的方法还包括动量、Rmsprop等,详情参考另一篇博客《Momentum Rmsprop Adam》。
SGD(随机梯度下降)详解相关推荐
- 线性回归之梯度下降详解
在了解梯度下降(Gradient Descent)之前,我们先要知道有关线性回归的基本知识,这样可以进一步的加深对梯度下降的理解,当然梯度下降(Gradient Descent)并不单单只能进行回归预 ...
- 梯度下降详解(3)机器学习
1 无约束最优化问题 为什么要学习梯度下降?,在我们日常生活中,并不是所有的预测曲线都符合正规方程,所以为了对各种各样的数据进行预测的话,需要使用其他的方法.这就是用梯度下降的方法来拟合原来的数 ...
- SGD(随机梯度下降)
在深度学习领域, 该优化算法是使用最优化的算法, 利用它, 通过不断的估计objective function的梯度, 更新模型参数,不断迭代, 直至收敛或者达到我们early stoping 的条件 ...
- python实现线性回归之梯度下降法,梯度下降详解
线性回归的有关概念已在笔者相关文章中进行介绍.本篇内容将介绍梯度下降(BGD)相关内容. 1.梯度下降 梯度下降常用于机器学习中求解符合最小损失函数的模型的参数值,梯度下降也是BP神经网络的核心,本文 ...
- GD(梯度下降)和SGD(随机梯度下降)
GD:gradient descent SGD:Stochastic Gradient Descent 相同点 在GD和SGD中,都会在每次迭代中更新模型的参数,使得代价函数变小. 不同点 在GD中, ...
- 反向传播与梯度下降详解
一,前向传播与反向传播 1.1,神经网络训练过程 神经网络训练过程是: 先通过随机参数"猜"一个结果(模型前向传播过程),这里称为预测结果 a a a: 然后计算 a a a 与样 ...
- 随机梯度下降(SGD)
关于什么是梯度下降,请看我之前发的一个博文:http://blog.csdn.net/lilyth_lilyth/article/details/8973972 梯度下降能帮助我们找到局部最优值,取得 ...
- 神经网络优化算法:随机梯度下降
什么是优化算法? 优化算法的功能,是通过改善训练方式,来最小化(或最大化)损失函数E(x). 损失函数E(x): 模型内部有些参数,是用来计算测试集中目标值Y的真实值和预测值的偏差程度的,基于这些参数 ...
- Stochastic Gradient Descent ( 随机梯度下降 )
Stochastic Gradient Descent (SGD) ( 随机梯度下降( SGD ) ) 是一种简单但非常有效的方法,用于在诸如(线性)支持向量机和 逻辑回归 之类的凸损失函数下的线性分 ...
- 随机梯度下降与动量详解
1. SGD图示 红色表示SGD的收敛路径,棕色表示梯度下降的收敛路径.普通的GD算法就是计算出每一时刻最陡的下降趋势(梯度),SGD在随机挑选某一分量的梯度方向进行收敛,详细解释可继续往下看. 2. ...
最新文章
- shell任务不受意外中断影响的常见方法
- 在项目中添加引用的意思
- 的注册表怎么才能删干净_白蚁怎么才能消灭干净?
- SVN中提交时提示副本被锁定,执行清理时也提示副本被锁定的解决办法
- 三星.android beam,三星S Beam取代Android Beam
- 相同的树Python解法
- python 动态调整控件大小_python PyQt5如何让窗口控件与窗口大小同步变化?
- Python爬虫编程实践 Task03
- python中for语句只有一种写法for in_pythonforin语句
- WebMvcConfigurerAdapter
- 到底什么是有限单元法?
- 计算机没鼠标怎么,电脑没鼠标怎么开启系统
- C# 关于winFrom控制网页的自动登录的问题(网页刷屏器的制作原理)
- 期货发展的几个重要时间点和事件
- 怎么看别人的qq空间怎么看加密的qq空间
- 41、财务总账科目余额表,三栏式总账,三栏式明细账 查询条件科目增加多选查询
- 布同:使用ghost备份或者还原的往事
- 深海油气开发利器——水下机器人
- Nodejs框架+uniapp前端微商个人相册多端小程序
- MFC 图标 icon 如何制作?