【零基础】神经网络优化之动量梯度下降

一、序言

  动量梯度下降也是一种神经网络的优化方法,我们知道在梯度下降的过程中,虽然损失的整体趋势是越来越接近0,但过程往往是非常曲折的,如下图所示:

  特别是在使用mini-batch后,由于单次参与训练的图片少了,这种“曲折”被放大了好几倍。前面我们介绍过L2和dropout,它们要解决的也是“曲折”的问题,不过这种曲折指的是求得的W和b过于拟合训练数据,导致求解曲线很曲折。动量梯度下降所解决的曲折指的是求得的dw、db偏离正常值导致成本时高时低,求得最优W和b的过程变慢。

二、指数加权平均

  动量梯度下降是相较于普通的梯度下降而言,这里所谓的动量其实说的是动量效应,最早是在经济学领域提出的:

  “指股票的收益率有延续原来的运动方向的趋势”

  其实换个名字叫“惯性效应”更好理解,即事物的发展趋势是有惯性的。

  那应用到神经网络的优化中,就是在计算dw、db时参考下之前的计算结果,具体操作起来的方法就叫“指数加权平均”,示例如下:

  dw0 = 1

  dw1 = 1.2,指数加权平均后:dw1 = 0.9*dw0 + 0.1*dw1 = 1.05

  dw2 = 1.5,指数加权平均后:dw2 = 0.9*dw1 + 0.1*dw2 = 1.095

  dw3 = 1.8,指数加权平均后:dw3 = 0.9*dw2 + 0.1*dw3 = 1.1655

  上面的示例就是指数加权平均,看起来似乎只是将dw变化的幅度减小了,下面我们模拟一次曲折

  dw4 = -1,指数加权平均后:dw4 = 0.9*dw3 + 0.1*dw4 = 0.94895

  在dw4的优化中,原本w应该是减去1的,但现在是加上了0.94895,即w还是沿着前面dw0至3的路径在优化,有效地降低了dw4的影响。这种使用指数加权平均计算dw并更新w的方式就是动量梯度下降。

三、动量梯度下降的实现

  我们可以用一个公式来描述指数加权平均:

  vDW1 = beta*vDW0 + (1-beta)*dw1

  vDb1 = beta*vDb0 + (1-beta)*db1

  我们使用vDW和vDb来记录指数加权平均值,beta值由我们设定,一般是0.9(这个数值代表了历史数据对当前值的影响,可以自己调整看看效果不一定就一定要0.9)。计算出指数加权平均值后,我们再将这个值应用到梯度下降中即是所谓的“动量梯度下降”了。

  W = W - learning_rate*vDw

  b = b - learning_rate*vDb

四、回顾

  本节就简单说了下动量梯度下降,可以对比看下应用前和应用后的效果:

应用前

应用后:

  可以看到使用动量梯度下降后,损失是有一点收窄的效果,虽然最终预测准确率不一定就边得更好了。具体实现代码请关注公众号“零基础爱学习”回复AI12获取。

原文地址:https://www.cnblogs.com/cation/p/11757572.html

时间: 2024-08-30 15:36:03

【零基础】神经网络优化之动量梯度下降的相关文章

PyTorch【6】-线性回归_SGD_动量梯度下降

本篇是一个练手项目,目的在于: 1. 熟悉 pytorch 2. 实现 SGD 与 动量梯度下降,并对比收敛性 手动实现线性回归模型,一个很简单的模型,不多介绍,直接上代码 import torch as t import matplotlib.pylab as plt ### 制造数据 def make_data(): # y = 2x+3 x = t.rand(1, 10) * 20 y = x * 2 + 3 + t.randn(1, 10) return x, y ### 初始化参数 t

【零基础】神经网络优化之Adam

一.序言 Adam是神经网络优化的另一种方法,有点类似上一篇中的“动量梯度下降”,实际上是先提出了RMSprop(类似动量梯度下降的优化算法),而后结合RMSprop和动量梯度下降整出了Adam,所以这里我们先由动量梯度下降引申出RMSprop,最后再介绍Adam.不过,由于RMSprop.Adam什么的,真的太难理解了,我就只说实现不说原理了. 二.RMSprop 先回顾一下动量梯度下降中的“指数加权平均”公式: vDW1 = beta*vDW0 + (1-beta)*dw1 vDb1 = b

【零基础】神经网络优化之mini-batch

一.前言 回顾一下前面讲过的两种解决过拟合的方法: 1)L0.L1.L2:在向前传播.反向传播后面加个小尾巴 2)dropout:训练时随机“删除”一部分神经元 本篇要介绍的优化方法叫mini-batch,它主要解决的问题是:实际应用时的训练数据往往都太大了,一次加载到电脑里可能内存不够,其次运行速度也很慢.那自然就想到说,不如把训练数据分割成好几份,一次学习一份不就行了吗?前辈们试了试发现不仅解决了内存不足的问题,而且网络“收敛”的速度更快了.由于mini-batch这么棒棒,自然是神经网络中

神经网络基础-梯度下降和BP算法

https://blog.csdn.net/weixin_38206214/article/details/81143894 在深度学习的路上,从头开始了解一下各项技术.本人是DL小白,连续记录我自己看的一些东西,大家可以互相交流.本文参考:本文参考吴恩达老师的Coursera深度学习课程,很棒的课,推荐 本文默认你已经大致了解深度学习的简单概念,如果需要更简单的例子,可以参考吴恩达老师的入门课程:http://study.163.com/courses-search?keyword=%E5%9

机器学习最常用优化之一——梯度下降优化算法综述

转自:http://www.dataguru.cn/article-10174-1.html 梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法.几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现.但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释.这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用. 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的

梯度下降优化算法综述

本文翻译自Sebastian Ruder的"An overview of gradient descent optimization algoritms",作者首先在其博客中发表了这篇文章,其博客地址为:An overview of gradient descent optimization algoritms,之后,作者将其整理完放在了arxiv中,其地址为:An overview of gradient descent optimization algoritms,在翻译的过程中以

NN优化方法对比:梯度下降、随机梯度下降和批量梯度下降

1.前言 这几种方法呢都是在求最优解中经常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中,都是围绕以下这个式子展开: 其中在上面的式子中hθ(x)代表,输入为x的时候的其当时θ参数下的输出值,与y相减则是一个相对误差,之后再平方乘以1/2,并且其中 注意到x可以一维变量,也可以是多维变量,实际上最常用的还是多维变量.我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解.这个θ的更新过程可以描

深度学习中梯度下降知识准备

考虑一个代价函数C , 它根据参数向量 计算出当前迭代模型的代价,记作C(). 机器学习中,我们的任务就是得到代价的最小值,在机器学习中代价函数通常是损失函数的均值,或者是它的数学期望.见下图: 这个叫做泛化损失,在监督学过程中,我们知道z=(x,y)  ,并且 f(x) 是对y的预测. 什么是这里的梯度呢? 当 是标量的时候,代价函数的梯度可表示如下: 当 很小的时候,它就是的另外一种表达,而我们就是让小于零,且越小越好. 当时一个向量的时候,代价函数的 梯度也是一个向量,每个都是一个i,这里

(转)零基础入门深度学习(6) - 长短时记忆网络(LSTM)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,<零基础入门深度学习>系列文章旨在讲帮助爱编程的你从零基础达到入门级水平.零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章.虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码,程序员的你一定能看懂的(我周围是一群狂热的Clean