数据分析-深度学习 Pytorch Day5

news2024/12/22 20:37:40

李宏毅《机器学习》第6讲——梯度下降

Review: 梯度下降法

在回归问题的第三步中,需要解决下面的最优化问题:

我们要找一组参数θ ,让损失函数越小越好,这个问题可以用梯度下降法解决。

假设θ有里面有两个参数θ1,θ2,随机选取初始值

然后分别计算初始点处,两个参数对L的偏微分,然后θ0减掉η乘上偏微分的值,得到一组新的参数。同理反复进行这样的计算。黄色部分为简洁的写法,▽L(θ) 即为梯度。η叫做学习率。

将梯度下降法的计算过程进行可视化

Tip1:调整学习速率

小心翼翼调整学习速率

调整学习速率

1.可视化损失函数曲线

如图左,假设从左边最高点开始,如果学习率调整的刚刚好,比如红色的线,就能顺利找到最低点。如果学习率调整的太小,比如蓝色的线,就会走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。如果学习率调整的有点大,比如绿色的线,就会在上面震荡,走不下去,永远无法到达最低点。还有可能非常大,比如黄色的线,直接就飞出去了,更新参数的时候只会发现损失函数越更新越大。

有很多参数的时候,可视化太复杂不现实。

2.可视化对损失函数的影响

如图右,将参数改变对损失函数的影响进行可视化。比如学习率太小(蓝色的线),损失函数下降的非常慢;学习率太大(绿色的线),损失函数下降很快,但马上就卡住不下降了;学习率特别大(黄色的线),损失函数就飞出去了;红色的就是差不多刚好,可以得到一个好的结果。

自适应学习率

随着次数的增加,通过一些因子来减少学习率

比如:

  • 根据距离:通常刚开始,初始点会距离最低点比较远,所以使用大一点的学习率,update好几次参数之后呢,比较靠近最低点了,此时减少学习率

  • 根据次数:随着次数增加减小学习率。
    学习率不能是一个值通用所有特征,不同的参数需要不同的学习率

Adagrad算法

每个参数的学习率都把它除上之前微分的均方根。

Ada算法.png

σt:之前参数的所有微分的均方根,对于每个参数都是不一样的。

将Adagrad 的式子进行简化:

Ada简化.png

Adagrad的矛盾:

在Adagrad中,当梯度越大的时候,步伐应该越大,但下面分母又导致当梯度越大的时候,步伐会越小。

image

比如初始点在 x0,最低点为 −b/2a,最佳的步伐就是x0 到最低点之间的距离 |x0+b/2a|,也可以写成 | (2ax0+b)/2a |。而刚好|2ax0+b| 就是方程绝对值在 x0 这一点的微分。

这样可以认为如果算出来的微分越大,则距离最低点越远。而且最好的步伐和微分的大小成正比。所以如果踏出去的步伐和微分成正比,它可能是比较好的。

结论1-1:梯度越大,就跟最低点的距离越远。

这个结论在多个参数的时候就不一定成立了。

对比不同参数

上图左边是两个参数的损失函数,颜色代表损失函数的值。如果只考虑参数w1,就像图中蓝色的线,得到右边上图结果;如果只考虑参数w2,就像图中绿色的线,得到右边下图的结果。确实对于 a 和b,结论1-1是成立的,同理c 和b 也成立。但是如果对比

a 和c,就不成立了,c 比 a 大,但 c 距离最低点是比较近的。

所以结论1-1是在没有考虑跨参数对比的情况下,才能成立的。所以还不完善。

之前说到的最佳距离 | (2ax0+b)/2a |,还有个分母2a,对function进行二次微分刚好可以得到:

所以最好的步伐应该是:一次微分/二次微分。

Adagrad就是在不做多余运算的情况下考虑了二次微分。

Tip2:随机梯度下降法

Stochastic Gradient Descent

对比常规梯度和SGD

常规梯度下降法走一步要处理到所有二十个例子,但随机算法此时已经走了二十步(每处理一个例子就更新)。

Tip3:特征缩放

比如有个函数:

y=b+w1x1+w2x2

x1和x2的分布不同,可以通过scaling统一2个不同特征的分布。

为什么要这么做?

为什么要特征缩放

上图左边是 x1 的scale比 x2 要小很多,所以当 w1 和 w2 做同样的变化时,w1 对y 的变化影响是比较小的,x2对 y 的变化影响是比较大的。

坐标系中是两个参数的error surface(现在考虑左边蓝色),因为 w1 对 y的变化影响比较小,所以 w1 对损失函数的影响比较小,w1 对损失函数有比较小的微分,所以w1方向上是比较平滑的。同理 x2 对y 的影响比较大,所以 x2对损失函数的影响比较大,所以在 x2 方向有比较尖的峡谷。

上图右边是两个参数scaling比较接近,右边的绿色图就比较接近圆形。

怎么做特征缩放?

比较常规的一种方法:

特征缩放常规方法

梯度下降的理论基础

数学理论

梯度下降理论

比如在θ0处,可以在一个小范围的圆圈内找到损失函数细小的 θ1,不断的这样去寻找。

接下来就是如果在小圆圈内快速的找到最小值?

泰勒展开式

多变量泰勒展开式和简化

泰勒展开式太复杂了,这里不展开,有兴趣可以看Datawhale的课程笔记。

https://datawhalechina.github.io/leeml-notes/#/chapter6/chapter6?id=%e4%bb%80%e4%b9%88%e6%98%af%e6%a2%af%e5%ba%a6%e4%b8%8b%e9%99%8d%e6%b3%95%ef%bc%9f

梯度下降限制

梯度下降限制

容易陷入局部极值 还有可能卡在不是极值,但微分值是0的地方 还有可能实际中只是当微分值小于某一个数值就停下来了,但这里只是比较平缓,并不是极值点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(一)

第七章 实战项目提升,完善简历 19.OV7725摄像头实时采集送HDMI显示(一) 在例程“OV7725摄像头实时采集送HDMI显示”中,我们将走近FPGA图像处理的世界,图像处理、数字信号、高速接口也一直被业界公认为FPGA应用的三大主…

k8s ingress概念和实践

什么是Ingress Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP/HTTPS 该特性从1.19版本开始作为stable状态进行发布 Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。 如下…

Python算法:三种简单排序的方法

目录 前言 1、插入排序 实例 2、选择排序 实例 3、冒泡排序 实例 前言 声明:本文所有动图来源为菜鸟教程 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红…

监督学习、半监督学习、无监督学习、自监督学习、强化学习和对比学习

目录 一、监督学习 二、半监督学习 三、无监督学习 3.1.聚类算法 3.2.降维算法 3.3.异常检测 3.4.自动编码器 3.5.生成模型 3.6.关联规则学习 3.7.自组织映射(SOM) 四、自监督学习 4.1. 基于上下文(Context based) 4.2. 基于时序&#xff08…

85.【Vue-细刷-01】

Vue(一)、利用Vscode开发Vue1.在桌面创建文件夹code2.使用Vscode进行打开这个文件夹3.在Vscode的右键创建文件夹4.右键创建.html文件(二)、第一个Vue程序1.下载并引入Vue.js2.引入vue.js3.创建视图层4.创建Model层5.获取Vue实列中的数据6.效果展示⭐为什么要使用new 关键字来创…

文件操作(二):学习笔记10

目录 一.概念梳理 1.文件的分类 2.程序运行时,内存和外存数据交流的过程 二.文件缓冲区 三.常用的文件读写函数笔记 1.常用格式化文件读写函数 (1)格式化文件写入函数 用fprintf进行文件写入操作: (2)格式化文件读取函数 用fscanf进行文件读取 2…

Java枚举类与注解

目录 一、枚举类的使用 枚举类的实现 枚举类的属性 自定义枚举类 步骤 举例 使用enum定义枚举类 使用说明 举例 Enum类的主要方法 实现接口的枚举类 二、注解的使用 概述 常见的Annotation示例 自定义Annotation(参照SupressWarnings 定义&#xff09…

一不小心,登上支付宝开发者社区热文榜单Top3

大家好,我是小悟 那天中午要午休的时候,看到微信通讯录新朋友有个红色1,像俺这种有强迫症的,那不得去把它点掉。打开一看,加好友的备注是“我是熊二,支付宝开发者社区运营”。 收到支付宝社区的运营添加微…

【ROS】dynamic_reconfigure配置详细说明

文章目录 文章目录 前言 一、编写.cfg文件 二、为节点配置dynamic_reconfigure 总结 前言 dynamic_reconfigure配置是ROS中为了方便用户对程序中的参数进行实时调整而推出的工具,配置好自己的dynamic_reconfigure文件后,可以很方便的使用ROS提供的r…

2022-12-18 网工进阶(三十八)MPLS LDP---LDP基础、工作原理(会话、标签的发布和管理、特性)、配置举例

LDP概述 LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。 LDP的工作过程主要分为两部分:LSR之间建立LDP会话;…

一种小型项目的超时机制方案

设计背景 在小型项目中,状态机的跳转往往依赖于某个事件的状态,因此监控某个事件是否处于超时状态就至关重要; 注意事项 超时机制应该能够准确的判断出事件是否真正超时,并预留出设置自定义超时处理的接口;超时机制…

什么是大数?大数有什么用?如何使用大数?

0 什么是大数 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 javamath 包中两个很有用的类:BigInteger和 BiDecimal。 这两个类可以处理包含任意长度数字序列的数值。 BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算…

Android | Fragment

Android Fragment Fragment 概念 Fragment 表示应用界面中可重复的一部分,Fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment 不能独立存在,而是必须由 Activity 或另一个 fragment 托管…

麦克纳姆轮(麦轮)原理

一、麦轮原理 麦克纳姆轮:简称麦轮,由轮毂和围绕轮毂的辊子组成。 辊子:没有动力的从动小滚轮。 麦克纳姆轮辊子轴线和轮毂轴线夹角是45度。 A轮(左旋)与B轮(右旋)互为镜像关系 麦轮在车上的…

Go语言开发小技巧易错点100例(五)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四) …

打工人必学的法律知识(五)——《女职工劳动保护特别规定》

女职工劳动保护特别规定https://flk.npc.gov.cn/detail2.html?ZmY4MDgwODE2ZjNjYmIzYzAxNmY0MTBmMWVkNTE0NTE (2012年4月18日国务院第200次常务会议通过 2012年4月28日中华人民共和国国务院令第619号公布 自公布之日起施行)第一条 为了减少和解决女职工…

如何减少频繁创建数据库连接的性能损耗?

为极速开发出一套某垂直领域电商系统,采用最简架构: 前端一台Web服务器运行业务代码后端一台DB服务器存储业务数据 大多系统初生时就是这样,只是随业务不但发展变得复杂,架构迭代。系统上线后,虽用户量不大&#xf…

第十三届蓝桥杯大赛软件类决赛Java大学B组C题——左移右移

【问题描述】 小蓝有一个长度为 N 的数组,初始时从左到右依次是 1, 2, 3, . . . N。 之后小蓝对这个数组进行了 M 次操作,每次操作可能是以下 2 种之一: 左移 x,即把 x 移动到最左边。右移 x,即把 x 移动到最右边。 …

数字信号处理音频FIR去噪滤波器(基于MATLAB GUI的开发完整代码+报告+课设)

1、内容简介利用MATLAB GUI设计平台,用窗函数法设计FIR数字滤波器,对所给出的含有噪声的声音信号进行数字滤波处理,得到降噪的声音信号,进行时域频域分析,同时分析不同窗函数的效果。将文件解压至一个目录下&#xff0…

ithewei的2022年度总结

窗外的雨,顺着晒衣架汇聚成豆大的珠,落到一楼庭院顶棚上,嘀嗒不停; 路上的车,由远及近,又由近及远,疾驰而过; 床边的猫,也已入睡,时不时发出一两声细微的鼾声…