当前位置: 首页 > news >正文

【机器学习】梯度下降算法

梯度下降算法

这篇博客更加详细,以下只是我个人的理解

梯度下降算法原理讲解——机器学习-CSDN博客

梯度下降算法是一种优化算法,通过梯度下降找到函数最小值时的自变量值。

其基本思想是沿着梯度方向的反方向更新参数,直到逼近函数的极值或者函数值足够小,或者是到达最大迭代次数。

  1. 目标函数
  2. 求目标函数的导数和梯度值
  3. 沿着梯度方向的反方向更新参数
  4. 重复直到满足条件

以线性回归为例,通过找均方差损失函数最小值,得到最优的权重。

目标函数就是损失函数,求其导数的到关于权重的线性方程,根据权重的具体的数值求得当前的梯度值,得到梯度值后沿着梯度的反方向更新权重参数,而后重复,直到损失函数的损失值满足预设的条件。

关于导数和梯度值。

导数
导数值的大小是沿着一个点的切线的斜率值,描述的函数在该点的瞬时变化率,值越大,函数变化越快。

导数的方向是函数值增加最快的方向。如开口向上的二次函数
图中的两个向量的方向就对应了抛物线中的点的导数的方向,
沿着方向,函数值增加最快(这里的向量只代表导数方向)

在这里插入图片描述
梯度
在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向
如在a(x, y) = x² / 4 + y² / 3函数中
梯度就是对各个变量求偏导,而后合并为一个向量,有大小有方向。
通过对图像做平行于xoz和yoz的平面,平面和函数相交的抛物线就是一个变量不变,另一变量变化,导致函数值变化的函数图像。(可以理解为降维到两个变量时函数的变化)通过分别对其变量求导数,可以得到两个向量,对向量进行运算,就可以得到函数的梯度,是一个有大小有方向的向量。
单个变量来看,沿着向量的方向,函数值变大最快,同时考虑多个变量,就是对多个变量的导数方向进行合并,做向量加法,得到的向量就是该点的梯度。
沿着该梯度,函数值增加最快,分解到各自的维度,就是多个变量一同增加减少,参数的值也就更新了。
沿着梯度方向的反方向,不断的迭代收敛,最终会逼近函数的最小值,最小值的变量,也就是所求的权重值。
a(x, y) = x² / 4 + y² / 3这里的x,y就相当于两个权重 w 1 , w 2 w_1,w_2 w1,w2

在这里插入图片描述
在这里插入图片描述

两个维度的分量(红色,绿色)和为黄色的梯度(这里只表示方向,并不指示大小,黄色方向并不一定是该点的梯度方向)

梯度下降算法的核心就是沿着梯度方向的反方向进行权重变量的更新,直到目标函数,损失函数的最小值。

更新梯度时,乘以一定的系数,这个系数就被称为学习率。
直接减去梯度的值,在接近函数的最低点时,可能会过大,直接越过最低点,导致震荡。通过引入学习率,可以缓解这样的问题。后序会有参数更新的优化器,参数的更新也不仅指原始的学习率和梯度值,会引入其他的参数跟新公式。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 奇安信渗透测试岗位三面经验分享
  • 网络安全人才缺口大 每年相关专业毕业生仅8千余人
  • 智能客服的未来:构建全知全能的知识问答系统
  • 【ceph学习】ceph如何进行数据的读写(3)
  • EmguCV学习笔记 VB.Net 6.6 图像的矩
  • 头脑风暴:‌群体中的脑间耦合是群体创造力形成的基础
  • 互联网人+大模型=?
  • ARM32开发——(十一)GD32F4_定时器查询
  • 解决:无法从域控制器读取配置信息
  • 笔记整理—内核!启动!
  • 移动端app如何设计测试用例?
  • 2025秋招大语言模型落地实践面试题
  • Telnet不止于端口测试:探索经典工具的多样化应用
  • 短视频矩阵系统怎么开发搭建使用?解决内容创作分发效率问题的工具系统
  • 报表新功能深度解析:解锁数据展示新方式,提升业务洞察力
  • 10个确保微服务与容器安全的最佳实践
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Iterator 和 for...of 循环
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Nodejs和JavaWeb协助开发
  • Python 反序列化安全问题(二)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 笨办法学C 练习34:动态数组
  • 排序算法学习笔记
  • 驱动程序原理
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 我感觉这是史上最牛的防sql注入方法类
  • 我这样减少了26.5M Java内存!
  • 小程序01:wepy框架整合iview webapp UI
  • 栈实现走出迷宫(C++)
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #前后端分离# 头条发布系统
  • (03)光刻——半导体电路的绘制
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (补充)IDEA项目结构
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (一)、python程序--模拟电脑鼠走迷宫
  • .bashrc在哪里,alias妙用
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net 7和core版 SignalR
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .Net插件开发开源框架
  • @antv/g6 业务场景:流程图
  • @private @protected @public
  • [ SNOI 2013 ] Quare
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心