梯度下降法

前言:在均方差损失函数推导中,我使用到了梯度下降法来优化模型,即迭代优化线性模型\hat{y}=\theta _{0}+\theta_{1}x中的\theta _{0}\theta_{1}。现在进一步了解梯度下降法的含义以及具体用法。

一、梯度下降法(入门级理解)

定义:梯度下降是一种用于最小化损失函数的优化算法。在机器学习和深度学习中,梯度下降被广泛应用于更新模型参数,以使模型能够更好地拟合训练数据。

基本思想:通过不断迭代,沿着损失函数的负梯度方向更新模型参数,直到达到损失函数的最小值。具体来说,对于每个迭代步骤,算法会计算损失函数对每个参数的偏导数(梯度),然后沿着负梯度的方向更新参数。

理解:

        对于我们所建立的损失函数J(w,b),我们需要不断改变其中的w、b来使得J(w,b)取得最小值。通常而言,我们会首先设w、b均为0,通过不断改变w、b的取值求得对应J(w,b)的值,并找到其中的最小值。

        吴恩达老师给出的例子中绘制了J(w,b)对应的函数图像,我们通过高中导数求函数最小值的知识很容易得出J(w,b)取得最小值的点。梯度下降法就是为了得到J(w,b)取得最小值时对应的点。

        然而,真实情况下,我们的数据通常不会只有两个维度。下图展现的才是我们通常需要分析的图:

 

        将上面的图看作山峰,梯度下降法所做的是,你要自旋360^{\circ}环顾四周并询问自己,如果我想尽快下山并去往其中一个山谷,我应该选哪个方向迈出一步。很明显应该是梯度最大的方向(不会被摔死,不要瞎想)。所以可以理解梯度下降法的核心就是每一步都选择下降梯度最大的方向。

         需要注意的是选择不同的出发点会到达不同的局部最小值。

二、梯度下降算法

对于模型y=wx+b

  • 首先对w,b赋予初值【可以使用随机数、或者其他方式初始化】
  • 然后求损失函数J(w,b)并对w、b分别求偏导数(梯度)

                J(w,b)=\frac{1}{2n}\sum_{i=1}^{n}(y_{i}-(wx+b))

        ​​​​​​​        w=w-\alpha \frac{\partial }{\partial w}J(w,b)

        ​​​​​​​        b=w-\alpha \frac{\partial }{\partial b}J(w,b)

  • 更新w,b的值:沿着梯度的反方向更新参数 w 和 b,即向着损失函数减小的方向移动。这个更新过程可以使用不同的学习率α来控制每次更新的步长。
  • 重复迭代:重复执行求偏导数和更新w、b值的工作,直到达到预定的迭代次数或者损失函数收敛到一个满意的值。

三、(附)学习率α 

上面提到在求解新的w和b时需要使用到学习率α,以下是学习率α的详细介绍。

定义:学习率是梯度下降算法中的一个重要参数,用于控制每次参数更新的步长。在梯度下降算法中,我们沿着损失函数的负梯度方向更新参数,学习率就是用来调节这个更新步长的参数

注意点:如果学习率设置得太小,那么参数更新的步长就会很小,收敛速度会很慢,需要更多的迭代次数才能收敛到最优值;而如果学习率设置得太大,可能会导致参数更新过大,甚至导致算法发散。(学习率α一般通过实验和经验进行选择)

常见自适应学习率优化算法:

  1. AdaGrad(Adaptive Gradient Algorithm):AdaGrad 是一种自适应学习率算法,它根据参数的梯度历史信息来调整学习率。具体来说,它对每个参数的学习率进行缩放,使得在训练过程中梯度较大的参数的学习率变小,而梯度较小的参数的学习率变大。

  2. RMSprop(Root Mean Square Propagation):RMSprop 也是一种自适应学习率算法,它通过引入一个衰减系数,来对梯度的平方进行加权平均。这样可以使得梯度较大的参数的学习率减小,而梯度较小的参数的学习率增大。

  3. Adam(Adaptive Moment Estimation):Adam 是一种结合了动量(momentum)和自适应学习率的优化算法。它利用梯度的一阶矩估计和二阶矩估计来调整参数的学习率,同时具有一定的动量效果,可以加速收敛过程。

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

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

相关文章

Python爬取今日头条热门文章

前言 今日头条文章收益是没有任何门槛,只要是你发布文章,每篇文章的阅读量超过1000就能有收益,阅读量越多收益越高。于是乎我就有了个大胆的想法。何不利用Python爬虫,爬取热门文章,然后完成自动化发布文章呢&#xf…

专访 | STIF2023第四届国际科创节访第七在线CEO赵嘉程

12月15日,在STIF2023第四届国际科创节暨数服会上,第七在线获得年度数智化创新典范奖,第七在线CEO赵嘉程在颁奖典礼现场接受了媒体专访。 主持人:赵总,您好,欢迎您接受我们的专访,首先我们特别想…

二、Redis的特性与应用场景

Redis是一个在内存中存储数据的中间件,主要用于作为数据库、数据缓存,在分布式系统中有着非常重要的地位。面试中可以围绕Redis的特性进行介绍。 一、Redis特性 1、在内存中存储数据 MySQL主要是“表”的方式来存储组织数据的,是“关系型数…

杰发科技AC7840——Eclipse环境DMA注意事项

0.序 用 户 使 用 DMA 时 , 所 有 DMA 搬 运 的 SRAM 数 据 都 必 须 存 放 在 SRAM_U 区 (0x20000000~0x2000EFFF) 。 1. 修改办法 第一步: RAM定义 /* Specify the memory areas */ MEMORY {FLASH (rx) : ORIGIN 0x00000000, LENGT…

dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib

更新Xcode14后低版本iPhone调试报错 dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /var/containers/Bundle/Application/…/….app/… Reason: image not found 这是缺少libswiftCoreGraphics库 直接导入libswiftCoreGraphics库即…

【新手小白的xsslab靶场学习】

第1关 最开始页面源代码 直接输入<script>alert(1)</script> 第2关 页面源代码 先尝试<script>alert(1)</script>看页面源代码 <h2>里面尖括号被编码&#xff0c;<input>里面没有编码,直接双引号闭合&#xff0c; 修改payload&…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-01x00

如上表所示&#xff0c;MOE0&#xff0c;OSSI1&#xff0c;CCxE0&#xff0c;CCxNE0时&#xff0c;OCx与OCxN的输出状态取决于GPIO端口上下拉状态。 ---------------------------------------------------------------------------------------------------------------------…

elasticsearch-curator: es索引生命周期(关闭、删除索引)

1&#xff0c;下载安装 rpm包下载安装 # 防止安装rpm包报错&#xff1a;error: [upel]: elasticsearch-curator NOKEY &#xff1b; # error: [upel]: elasticsearch-curator signature check fail rpm --import https://artifacts.elastic.co/GPG-KEY-ela…

基于RetinaFace+Jetson Nano的智能门锁系统——第二篇(配置环境)

文章目录 设备一、安装远程登录终端Xshell1.1下载Xshell1.2新建回话1.3查询ip地址1.4启动连接 二、安装远程文件管理WinScp2.1下载WinScp2.2连接Jetson Nano2.3连接成功 三、安装远程桌面VNC Viewer3.1下载VNC Viewer3.2在Jetson Nano安装VNC Viewer3.3设置VINO登录选项3.4将网…

单片机原理及应用:计数按键控制数码管显示

承接上文&#xff0c;我们来介绍一下按键和数码管的配合工作&#xff0c;由于数码管显示的字符和位数多种多样&#xff0c;无法做到一个字符对应一个按键&#xff0c;所以程序主要记录按键的使用次数来切换数码管的显示。 #include <reg52.h> //包含reg52.h头…

opencv003图像裁剪(应用NumPy矩阵的切片)

这一部分相对于马上要学习的二值化是要更更更简单一些的&#xff0c;只需三行&#xff0c;便能在opencv上裁剪图像啦&#xff08;顺便云吸猫&#xff0c;太可爱了&#xff01;&#xff09; 出处见水印&#xff01; 1、复习图像的显示 前几天期末考试&#xff0c;太久没有看…

第28关 k8s监控实战之Prometheus(一)

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。对于运维开发人员来说&#xff0c;不管是哪个平台服务&#xff0c;监控都是非常关键重要的。 在传统服务里面&#xff0c;我们通常会到zabbix、open-falcon、netdata来做服务的监控&#xff0…

error C2666: “Date::operator ==”: 重载函数具有类似的转换

error C2666: “Date::operator ”: 重载函数具有类似的转换 1.错误描述2.解决方案 1.错误描述 class Date { public:Date(int year 2024, int month 1, int day 1){_year year;_month month;_day day;}bool operator(const Date& d){return _year d._year&&…

接入第三方登录

1.进行认证 https://graph.qq.com/oauth2.0/authorize?response_typecode&client_id[YOUR_APPID]&redirect_uri[YOUR_REDIRECT_URI]&scope[THE_SCOPE] https://graph.qq.com/oauth2.0/show?whichLogin&displaypc&client_id101284669&redirect_urih…

认识SpringBoot项目中的Starter

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

流量预测_MLP模型_keras

目录 0、我在干什么&#xff1f;1、import libararies2、加载数据load data3、独家观察数据函数 :heartbeat:4、数据预处理pre-processing&#xff08;1&#xff09;将时间戳转换为一个日期时间索引&#xff08;2&#xff09;填充所有缺失的值&#xff08;3&#xff09;将时间序…

ElasticSearch的DSL查询语法解析

Elasticsearch提供了基于ISON的DSL (Domain Specific Lanquage)来定义查询。 目录 一、常见查询类型 二、DSLQuery基本语法 三、全文检索查询 3.1 match查询&#xff1a;会对用户输入内容分词&#xff0c;常用于搜索框搜索 &#xff0c;语法&#xff1a; 3.2 multi match…

UI自动化Selenium ActionChains鼠标(动作链)

我们在实现UI自动化过程中&#xff0c;有时会遇到鼠标模拟操作&#xff0c;如鼠标悬停后&#xff0c;菜单划出&#xff1b;鼠标按下后&#xff0c;下拉展开&#xff1b;单击、双击、拖动等等&#xff1b;但我们常常对鼠标的单击和双击比较了解&#xff08;click和doubleclick&a…

什么是 MVVM ?

课堂笔记 什么是 MVVM &#xff1f; MVVM 是一种架构模式&#xff0c;它最初是由微软的两位工程师在 2005 年的时候所提出的。 Model&#xff1a;Model代表的是你的数据View&#xff1a;视图&#xff0c;直接和用户打交道的ViewModel&#xff1a;ViewModel 是 View 和 Model…

【嵌入式开发 Linux 常用命令系列 4.2 -- git .gitignore 使用详细介绍】

文章目录 .gitignore 使用详细介绍.gitignore 文件的位置.gitignore 语法规则使用示例注意事项 .gitignore 使用详细介绍 .gitignore 文件是一个特殊的文本文件&#xff0c;它告诉 Git 哪些文件或目录是可以被忽略的&#xff0c;即不应该被纳入版本控制系统。这主要用于避免一…