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

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis