学习率 Learing Rate 的调整

news2024/10/18 6:14:27

在这里插入图片描述

🚀 机器学习系列前期回顾

1、初识机器学习
2、线性模型到神经网络
3、local minima 的问题如何解决
4、batch和momentum

🚀在初识机器学习中,了解了机器学习是如何工作的并引入了线性模型
🚀在线性模型到神经网络这节,将线性模型进一步改进为弹性较大的神经网络模型并在结尾简要说了一下使用一个batch更新一次参数
🚀在local minima的问题如何解决这节,解决了求解模型未知参数的时候遇见local minima的解决办法
🚀在这batch和momentum这节,探索了不同batch大小可以让梯度下降很好的走出local minima,同时进一步引入momentum,使得local minima不在是问题。
🚀在这小节,我们将继续探索训练网络中会遇见的另外一个问题。

1、出现的问题

随着训练次数的进行,损失值会越来越小,如下图所示。随着训练次数来到500次之后,损失非常小的时候,我们也许就会认为训练来到了critical point,可是事实真的是这样吗?我们仅仅通过损失值不再下降就得出来到了critical point,是一种草率的判断,我们还应去看看再500次训练后的每个损失值点处的梯度是否很接近于零,只有这样,我们才可以得出是到达了 critical point

在这里插入图片描述
所以损失值不再下降了,有可能不是卡在了critical point

我们将每个损失点处的梯度计算出来,绘制的图如下所示。不难看出,在300-400和600-700这些区间里,损失值很低,但他们的梯度有时候确一点也不低,所以损失稳定且很低不一定是由于critical point导致的。

在这里插入图片描述
导致以上现象的原因如下:
在这里插入图片描述
由于梯度更新的步子太快,从而导致其在山壁之间来回震荡,即出现损失很小且稳定,但是梯度不趋于零的现象。

2、如何解决

当损失值要接近于最低点的时候,由于学习率过大从而导致最后在山谷之家来回震荡,从而到达不了最低点;既然是由于学习率引起的这个问题,所以首先想到的就是调低学习率,让其步子小一点。

来看一下下图,其绘制的一个损失面图,黄色叉的位置是最佳的,黑色位置是使用梯度下降的初始位置。
在这里插入图片描述

来看一下,使用梯度下降算法后,其真实的路径走向如下,更新的w和b并没有让损失降低,反而是让其损失大小上下横跳。

在这里插入图片描述

所以,也就是说,可能是学习率太高了,导致每一次更新的w和b都过大了,所以就试着将学习率调低,最开始的时候,走的很顺利,一旦到达了较为平缓的地方(即将接近谷底的地方),由于其学习率低且坡度小,就会导致最后更新得到的w和b变化非常的小,从而导致其梯度走起来非常的慢,在转弯后的那个部分集中了10万个点,发现其学习率遇见坡度较小 的位置,其几乎走不动。
在这里插入图片描述
所以不难发现,对于学习率的设置应该对每一个不同的位置特定化,当遇见坡度较大的时候,其学习率应该小一点就比较好;当坡度较小时;其学习率应该较大比较好。即将之前更新参数 θ \theta θ 的式子改成下图绿色框住的式子,即将学习率下面加了一个 σ i t \sigma_i^t σit来得到不同位置不同的学习率。
在这里插入图片描述

其更新后的式子如何更新参数

其更新的过程如下, σ i t \sigma_i^t σit i i i表示其中的某个参数,为了便于理解方便就保持 i i i不变,看一个参数是如何更新的,

  • 在最开始,将 σ i 0 \sigma_i^0 σi0设置为 ∣ g j 0 ∣ |g_j^0| gj0,其实由于第一次更新,对于学习率的的设置还是不可知的,所以,就是直接用当前参数值减去学习率。
  • 第二次更新参数的时候, σ i 1 \sigma_i^1 σi1设置为了第一次梯度和第二次梯度的平方和平均再开根号。
  • σ i t \sigma_i^t σit的设置依次如下,每次都是前几次梯度的平方求和求平均再开根号。

在这里插入图片描述
为什么如此设置 σ i t \sigma_i^t σit就可以实现对于不同点设置不同的学习率呢? 原因如下:
对于梯度较大的来说,其最后算出来的 σ \sigma σ就会也会比较大,由于 σ \sigma σ是在学习率的分母上,所以整体的学习率反而是下降的;对于梯度较小的来说,其最后算出来的 σ \sigma σ就会也会比较小,由于 σ \sigma σ是在学习率的分母上,所以整体的学习率反而是变大的;所以就达到坡度大,学习率小;坡度小,学习率大的要求。
在这里插入图片描述

其实也不难发现,这种方式也是存在问题的,对于在1000次更新的时候,他再考虑的时候竟然还需要第一次更新时候的梯度,这显然是非常不合理的,所以有以下改进:

每次更新的时候,只考虑最近的两次梯度。

在这里插入图片描述

3、该进后的训练结果

先选用第一次的该进后的进行训练得到以下结果,可以发现,其实是可以走到最后的最优点的,但是为什么会在最优点的附近震荡几次呢?
在这里插入图片描述
其原因就是考虑的梯度太多,将所有的梯度都考虑了进来导致的;蓝色区域梯度都较大,会使其学习率较低,使其平稳缓慢的走到梯度较小的区域;进入绿色区域,随着一直在梯度较小的区域,会导致学习率变大,由于梯度较小区域的累计,就会导致学习率突然的变大,从而出现红框里面的现象,但是一旦出去了,还是会由于梯度突然变大,降低学习率又会回来,从而就会出现红框里面的现象。

在这里插入图片描述

其实出现这个问题,我们也是可以改变学习率本身的大小进而规避掉这个问题,其实究其根本就是由于学习率本身不变,只是通过改变 σ \sigma σ进而影响学习率从而导致最后出现后面的震荡的情况,如果将学习率本身也随着时间改变的话,即让后期的学习率也减小,就不会出现以上情况了。(学习率本身的变化如下图所示)

在这里插入图片描述
没加Learing Rate Decay和加上Learing Rate Decay的对比如下
在这里插入图片描述
除掉Learing Rate Decay以外,还有一个叫做warm up的技术也是可以的,其学习率随时间的变化曲线如下

在这里插入图片描述

4、再加上momentum

通过对以上式子的改写,即将梯度 g g g替换为 m m m,但是又出现了一个新的问题: m m m是前面所有梯度的和,而 σ \sigma σ也几乎是,一个在分母一个在分子,不就抵消了吗,有何意义?
在这里插入图片描述
产生这个疑问最根本的原因就是没有理解 m m m σ \sigma σ的本质, m m m的和是一个向量和,而 σ \sigma σ只是简单的代数和。

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

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

相关文章

远控代码的重构-远控网络编程的设计上

套路化代码 但是我们这是一个MFC工程,我们需要考虑不是所有操作都需要到main函数里面实现,有些操作可以在main函数之前完成,有些可以在main函数返回以后完成,静态全局变量满足这个需求,我们需要添加一个自己的类 编辑器细节1 添加类和添加类向导的区别,一个是添加自己的类,一…

Python之爬虫读取网页数据

目录: 1、简介2、代码示例3、验证4、项目示例5、网页数据提取 1、简介 选择Python作为爬虫开发的首选语言‌,主要是因为Python具有简洁易学的语法、丰富的库支持、跨平台特性、强大的社区支持、动态类型、可扩展性以及异步编程支持等优势。‌ ‌简洁易学…

4.7 大数据应用场景

文章目录 今天,我非常荣幸能与大家分享一个充满潜力和变革的主题——大数据的应用场景。在这个信息爆炸的时代,大数据已经成为推动各行各业发展的重要驱动力。接下来,我将带领大家探索大数据在不同行业中的神奇应用。 首先,让我们…

计算机领域快刊合集,无版面费,初审仅2天!

投稿选刊不迷路,就到科检易学术 本期主要给大家介绍,计算领域方向的期刊,无需版面费,非常适合正在毕业or晋升的学者。 期刊一 APPLIED INTELLIGENCE IF:3.4 JCR2区中科院3区 【自引率】11.8% 【年发文量】1000篇左右 初审…

python函数返回值是什么

函数返回值简介 1、简单介绍print和return的区别,print仅仅是打印在控制台,而return则是将return后面的部分作为返回值:作为函数的输出,可以用变量接走,继续使用该返回值做其它事。 2、函数需要先定义后调用&#xf…

详解Oracle审计(二)

题记: 本文将承接上篇详细介绍oracle的审计功能,基于11g版本,但对12c,19c也同样适用。 1. 语句审计实操演示实例 sqlplus / as sysdba show parameter audit_trail alter system set audit_traildb_extended scopespfile; star…

从0开始深度学习(11)——多层感知机

前面介绍了线性神经网络,但是线性模型是有可能出错的,因为线性模型意味着是单调假设,但是现实中往往很复杂。例如,我们想要根据体温预测死亡率。 对体温高于37摄氏度的人来说,温度越高风险越大。 然而,对体…

LeetCode 3200.三角形的最大高度:枚举

【LetMeFly】3200.三角形的最大高度:枚举 力扣题目链接:https://leetcode.cn/problems/maximum-height-of-a-triangle/ 给你两个整数 red 和 blue,分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形,满足第 1 行…

远距离长航时低成本泡沫垂直起降固定翼无人机技术详解

关于远距离长航时低成本泡沫垂直起降固定翼无人机技术,以下是一个详细的技术解析: 一、技术概述 远距离长航时低成本泡沫垂直起降固定翼无人机是一种结合了垂直起降技术和固定翼设计优势的无人机系统。该技术通过采用泡沫材料制造无人机机体&#xff0…

iOS IPA上传到App Store Connect的三种方案详解

引言 在iOS应用开发中,完成开发后的重要一步就是将IPA文件上传到App Store Connect以便进行测试或发布到App Store。无论是使用Xcode进行原生开发,还是通过uni-app、Flutter等跨平台工具生成的IPA文件,上传到App Store的流程都是类似的。苹果…

车易泊车位管理相机 —— 智能管理,停车无忧

在现代城市生活中,停车问题一直是困扰着车主和城市管理者的难题。车位难找、停车管理混乱等问题不仅浪费了人们的时间和精力,也影响了城市的交通秩序和形象。而车易泊车位管理相机的出现,为解决这些问题提供了一种高效、智能的解决方案。 一、…

DataWhale10月动手实践——Bot应用开发task03学习笔记

一、工作流 1. 工作流的定义 工作流由多个节点组成,这些节点可以包括大语言模型(LLM)、代码模块、逻辑判断工具、插件等。每个节点需要不同的信息来执行其功能。工作流的核心含义是:对工作流程及其操作步骤之间的业务规则进行抽…

无人机之位置信息计算篇

一、主要导航技术 卫星导航 全球定位系统(GPS):无人机上装有专门的接收器,用于捕获GPS系统发射的无线电信号。当无人机接收到来自至少四颗卫星的信号时,通过计算信号抵达时间的微小差异,即可运用三角定位…

SQL语句查询

SQL语句查询 查询产生一个虚拟表 看到的是表形式显示的结果&#xff0c;但结果并不真正存储 每次执行查询只是从数据表中提取数据&#xff0c;并按照表的形式显示出来 查询语法 SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] SELECT …

插齿刀的齿数选择不同会有什么影响?

插齿——作为一种常用的制齿手段&#xff0c;经常被用到有台肩的齿轮以及空刀槽很窄的双联或多联齿轮&#xff0c;以及各种内齿加工中。虽然强力车齿在现在应用的越来越多了&#xff0c;但是插齿这种加工应该在相当长的一段时间内还是会继续服役的。中这期咱们聊聊插齿刀齿数对…

显示指定目录下所有.c文件中出现指定字符串的行号 Linux环境 C语言实现

问题&#xff1a;显示指定目录及其后代目录下所有.c文件中出现指定字符串的行号 算法&#xff1a; 分为两个文件编写 &#xff1a; display_string_lineno.c &#xff0c; Read_line.c 分为三个函数编写 &#xff1a; void display_lineno(char* dirname,const char *pstr)…

sankey.top - 桑基图/桑吉图/流程图/能量流/物料流/能量分析

sankey.top 桑基图大师(SankeyMaster)是您创建复杂桑基图表的首选工具。轻松输入数据并创建桑基图表&#xff0c;准确揭示复杂的数据关系&#xff01; 应用 https://apps.apple.com/cn/app/sankeymaster-sankey-diagram/id6474908221 在线编辑器 https://studio.sankeymaste…

解决ultralytics中的YOLOv8在执行task.py文件添加模块操作出现的KeyError报错

报错详情&#xff1a; 在ultralytics项目文件夹内运行/home/xxx/ultralytics/train.py进行单GPU训练的时候训练可以正常进行 from ultralytics import YOLO# Load a model model YOLO("/home/xxx/ultralytics/ultralytics/cfg/models/v8/yolov8s-FASFF.yaml") # …

Github学生包的JetBrains认证过期/idea认证过期如何解决?

官网通过Github更新状态即可JetBrains Account 注意要到邮箱走流程

自动化测试与敏捷开发的重要性

敏捷开发与自动化测试是现代软件开发中两个至关重要的实践&#xff0c;它们相互补充&#xff0c;共同促进了软件质量和开发效率的提升。 敏捷开发的重要性 敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法。它强调以下几个核心价值观和原则&#xff1a; 个体和交互…