RMSprop

知道了动量(Momentum)可以加快梯度下降,还有一个叫做RMSprop的算法,全称是root mean square prop算法,它也可以加速梯度下降,来看看它是如何运作的。

回忆一下之前的例子,如果执行梯度下降,虽然横轴方向正在推进,但纵轴方向会有大幅度摆动,为了分析这个例子,假设纵轴代表参数\(b\),横轴代表参数\(W\),可能有\(W_{1}\),\(W_{2}\)或者其它重要的参数,为了便于理解,被称为\(b\)和\(W\)。

所以,想减缓\(b\)方向的学习,即纵轴方向,同时加快,至少不是减缓横轴方向的学习,RMSprop算法可以实现这一点。

在第\(t\)次迭代中,该算法会照常计算当下mini-batch的微分\(dW\),\(db\),所以会保留这个指数加权平均数,用到新符号\(S_{dW}\),而不是\(v_{dW}\),因此\(S_{dW}= \beta S_{dW} + (1 -\beta) {dW}^{2}\),澄清一下,这个平方的操作是针对这一整个符号的,这样做能够保留微分平方的加权平均数,同样\(S_{db}= \beta S_{db} + (1 - \beta){db}^{2}\),再说一次,平方是针对整个符号的操作。

接着RMSprop会这样更新参数值,\(W:= W -a\frac{dW}{\sqrt{S_{dW}}}\),\(b:=b -\alpha\frac{db}{\sqrt{S_{db}}}\),来理解一下其原理。记得在横轴方向或者在例子中的\(W\)方向,希望学习速度快,而在垂直方向,也就是例子中的\(b\)方向,希望减缓纵轴上的摆动,所以有了\(S_{dW}\)和\(S_{db}\),希望\(S_{dW}\)会相对较小,所以要除以一个较小的数,而希望\(S_{db}\)又较大,所以这里要除以较大的数字,这样就可以减缓纵轴上的变化。看这些微分,垂直方向的要比水平方向的大得多,所以斜率在\(b\)方向特别大,所以这些微分中,\(db\)较大,\(dW\)较小,因为函数的倾斜程度,在纵轴上,也就是b方向上要大于在横轴上,也就是\(W\)方向上。\(db\)的平方较大,所以\(S_{db}\)也会较大,而相比之下,\(dW\)会小一些,亦或\(dW\)平方会小一些,因此\(S_{dW}\)会小一些,结果就是纵轴上的更新要被一个较大的数相除,就能消除摆动,而水平方向的更新则被较小的数相除。

RMSprop的影响就是的更新最后会变成这样(绿色线),纵轴方向上摆动较小,而横轴方向继续推进。还有个影响就是,可以用一个更大学习率\(a\),然后加快学习,而无须在纵轴上垂直方向偏离。

要说明一点,一直把纵轴和横轴方向分别称为\(b\)和\(W\),只是为了方便展示而已。实际中,会处于参数的高维度空间,所以需要消除摆动的垂直维度,需要消除摆动,实际上是参数\(W_1\),\(W_2\)等的合集,水平维度可能\(W_3\),\(W_4\)等等,因此把\(W\)和\(b\)分开只是方便说明。实际中\(dW\)是一个高维度的参数向量,\(db\)也是一个高维度参数向量,但是的直觉是,在要消除摆动的维度中,最终要计算一个更大的和值,这个平方和微分的加权平均值,所以最后去掉了那些有摆动的方向。所以这就是RMSprop,全称是均方根,因为将微分进行平方,然后最后使用平方根。

最后再就这个算法说一些细节的东西,然后再继续。接下来,会将RMSpropMomentum结合起来,在Momentum中采用超参数\(\beta\),为了避免混淆,现在不用\(\beta\),而采用超参数\(\beta_{2}\)以保证在MomentumRMSprop中采用同一超参数。要确保的算法不会除以0,如果\(S_{dW}\)的平方根趋近于0怎么办?得到的答案就非常大,为了确保数值稳定,在实际操练的时候,要在分母上加上一个很小很小的\(\varepsilon\),\(\varepsilon\)是多少没关系,\(10^{-8}\)是个不错的选择,这只是保证数值能稳定一些,无论什么原因,都不会除以一个很小很小的数。所以RMSpropMomentum有很相似的一点,可以消除梯度下降中的摆动,包括mini-batch梯度下降,并允许使用一个更大的学习率\(a\),从而加快的算法学习速度。

所以学会了如何运用RMSprop,这是给学习算法加速的另一方法。关于RMSprop的一个有趣的事是,它首次提出并不是在学术研究论文中,而是在多年前Jeff HintonCoursera的课程上。想Coursera并不是故意打算成为一个传播新兴的学术研究的平台,但是却达到了意想不到的效果。就是从Coursera课程开始,RMSprop开始被人们广为熟知,并且发展迅猛。

讲过了Momentum,讲了RMSprop,如果二者结合起来,会得到一个更好的优化算法

神经网络优化篇:详解RMSprop的更多相关文章

  1. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  2. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  3. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  4. CentOS 7 下编译安装lnmp之PHP篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...

  5. CentOS 7 下编译安装lnmp之MySQL篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...

  6. CentOS 7 下编译安装lnmp之nginx篇详解

    一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168   ...

  7. Canal:同步mysql增量数据工具,一篇详解核心知识点

    老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...

  8. java提高篇-----详解java的四舍五入与保留位

    转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...

  9. 组件--Fragment(碎片)第二篇详解

    感觉之前看的还是不清楚,重新再研究了一次 Fragment常用的三个类: android.app.Fragment 主要用于定义Fragment android.app.FragmentManager ...

  10. JavaScript基础篇详解

    全部的数据类型: 基本数据类型: undefined Number Boolean null String 复杂数据类型: object ①Undefined: >>>声明但未初始化 ...

随机推荐

  1. C++ MiniZip实现目录压缩与解压

    Zlib是一个开源的数据压缩库,提供了一种通用的数据压缩和解压缩算法.它最初由Jean-Loup Gailly和Mark Adler开发,旨在成为一个高效.轻量级的压缩库,其被广泛应用于许多领域,包括 ...

  2. .NET开源的处理分布式事务的解决方案

    前言 在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战.今天给大家推荐一个.NET开源的处理分布式事务的解决方案基于 .NET St ...

  3. Enterprise Architect去掉元素背景渐变效果

    打开设置界面:TOOLS - Options 修改Gradients and Background的Gradient Fill Direction for属性为none即可

  4. 虚拟机运行Hadoop | 各种问题解决的心路历程

    ps:完成大数据技术实验报告的过程,出项各种稀奇古怪的问题.(知道这叫什么吗?经济基础决定上层建筑,我当时配置可能留下了一堆隐患,总之如果有同样的问题,希望可以帮到你) 一.虚拟机网络连接不通的各种情 ...

  5. 【UniApp】-uni-app-修改组件主题和样式

    前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-扩展组件 那么了解完了uni-app-扩展组件之后,这篇文章来给大家介绍一下 uni-app-修改组件主题和样式 首先不管三七二十一, ...

  6. [复习随笔]python_dcgan网络复习小知识:模型定义

    定义参数 dataroot - the path to the root of the dataset folder. We will talk more about the dataset in t ...

  7. [AGC030D] Inversion Sum

    Problem Statement You are given an integer sequence of length $N$: $A_1,A_2,...,A_N$. Let us perform ...

  8. Arrarylist集合的使用

    前提:最近JAVA实训课老师讲了一些Arrarylist集合的相关知识,刚好端午假期有空就把这课上学到的知识和自己碰到的一些问题总结下来. 一.Arrarylist集合的使用(以学生信息存储作为演示) ...

  9. Windows和Linux下通过go实现自删除

    自删除在攻防中都挺常见的,自写远控通常也有需要.可是在度娘里搜不到什么办法,于是就查查Windows api学习记录一回. linux 先获得当前程序的文件名,再使用syscall这个包中的Unlin ...

  10. Win10 SFC& Dism修复系统

    在Win10开始按钮上点击右键(或按Win + X快捷键),在弹出的系统快捷菜单中点击  Windows PowerShell(管理员)或者  命令提示符CMD (管理员) 方法 1 SFC输入&qu ...