2020-6-3 吴恩达-改善深层NN-w2 优化算法(2.7 RMSprop -消除梯度下降中的摆动,加速下降,加快学习 -和动量异同点)

本文主要是介绍2020-6-3 吴恩达-改善深层NN-w2 优化算法(2.7 RMSprop -消除梯度下降中的摆动,加速下降,加快学习 -和动量异同点),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

2.7 RMSprop

RMSprop的算法,全称root mean square prop算法,它也可以加速梯度下降。
在这里插入图片描述

观察上图。上节课已经介绍过,传统或者mini-batch梯度下降过程,虽然横轴方向正在推进,但纵轴方向会有大幅度摆动。

为了分析这个例子,假设纵轴代表参数 b b b,横轴代表参数 W W W,可能有 W 1 W_1 W1 W 2 W_2 W2或者其它重要的参数,为了便于理解,被称为 b b b W W W

所以,为了加速下降,加速学习过程,类似动量梯度下降法,你想减缓纵轴 b b b 方向的学习。同时加快,至少不是减缓横轴 W W W 方向的学习,RMSprop算法可以实现这一点。

和动量梯度下降法一样,RMSprop算法会照常计算当下mini-batch的微分 d W dW dW d b db db

RMSprop算法中使用的指数加权平均数符号是 S d W S_{dW} SdW S d b S_{db} Sdb。而动量梯度下降法使用的是 v d W v_{dW} vdW v d b v_{db} vdb

公式如下

  • S d W = β S d W + ( 1 − β ) d W 2 S_{dW}=\beta S_{dW}+(1-\beta) dW^2 SdW=βSdW+(1β)dW2
  • S d b = β S d b + ( 1 − β ) d b 2 S_{db}=\beta S_{db}+(1-\beta) db^2 Sdb=βSdb+(1β)db2

说明

  • 这是使用的是微分平方的加权平均数
  • 平方是针对整个符号 d W dW dW d b db db 的操作

RMSprop会按照如下方式更新参数值

  • W : = W − α d W S d W W := W - \alpha \frac {dW}{\sqrt {S_{dW}}} W:=WαSdW dW
  • b : = b − α d b S d b b := b - \alpha \frac {db}{\sqrt {S_{db}}} b:=bαSdb db

解释一下原理

我们已经说过,要加速梯度下降速度,在横轴方向,我们希望学习速度快,而在垂直方向,我们希望减缓纵轴上的摆动,所以有了梯度加权平均(也就是要考虑历史梯度影响) S d W S_{dW} SdW S d b S_{db} Sdb

观察本文开头图中传统/mini-batch梯度下降的折线,斜率或者说函数的倾斜程度在垂直方向( b b b)特别大,类似下图。
在这里插入图片描述

也就是说,微分在垂直方向的要比水平方向的大得多, d b db db 比较大, d W dW dW 比较小。

d b db db 比较大,根据公式 S d b S_{db} Sdb 也会比较大; d W dW dW 比较小,那么 S d W S_{dW} SdW也会比较小。

结果就是纵轴( b b b)上的更新要被一个较大的数相除,就能消除摆动,而水平方向( W W W)的更新则被较小的数相除。
在这里插入图片描述

如上图。RMSprop算法梯度下降过程是绿色线,纵轴方向上摆动较小,而横轴方向继续推进。

使用RMSprop算法跟Momentum有很相似的一点,可以消除梯度下降中的摆动,包括mini-batch梯度下降。你可以用一个更大学习率 α \alpha α,加快算法学习速度,而无须在纵轴上垂直方向偏离。

Momentum 和 RMSprop是存在区别的。
前者是在梯度的更新方向上做优化,没有考虑数值大小;后者在数值大小上进行优化,在梯度值较大的方向进行适当的减小步伐,在梯度值较小的方向适当增大步伐,没有考虑方向。
但是两者在优化效果上基本上是一致的,即减小了个别方向上的震动幅度,加快了收敛速度。

要说明一点,这里一直把纵轴和横轴方向分别称为 b b b W W W,只是为了方便展示而已。实际中,你会处于参数的高维度空间。在你要消除摆动的维度中,最终你要计算一个更大的微分平方和的加权平均值(例如 S d b S_{db} Sdb),最后去掉了那些有摆动的方向。

这就是RMSprop,全称是均方根,因为你将微分进行平方,然后最后使用平方根。

为了避免和Momentum算法的超参 β \beta β混淆,我们把RMSprop的超参改为 β 2 \beta_2 β2,公式变为

  • S d W = β 2 S d W + ( 1 − β 2 ) d W 2 S_{dW}=\beta_2 S_{dW}+(1-\beta_2) dW^2 SdW=β2SdW+(1β2)dW2
  • S d b = β 2 S d b + ( 1 − β 2 ) d b 2 S_{db}=\beta_2 S_{db}+(1-\beta_2) db^2 Sdb=β2Sdb+(1β2)db2

有一点请注意,如果 S d W S_{dW} SdW S d b S_{db} Sdb趋近为0,也就是更新W和b时候,分母为0,我们要在分母上加上一个很小很小的数 ϵ \epsilon ϵ,例如 10-8,这只是保证数值能稳定一些。公式变为

  • W : = W − α d W S d W + ϵ W := W - \alpha \frac {dW}{\sqrt {S_{dW}}+\epsilon} W:=WαSdW +ϵdW
  • b : = b − α d b S d b + ϵ b := b - \alpha \frac {db}{\sqrt {S_{db}}+\epsilon} b:=bαSdb +ϵdb

这篇关于2020-6-3 吴恩达-改善深层NN-w2 优化算法(2.7 RMSprop -消除梯度下降中的摆动,加速下降,加快学习 -和动量异同点)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX