随机梯度下降算法 入门介绍(最通俗易懂)

news2024/12/27 13:35:51

文章目录

    • 1.什么是梯度
    • 2.什么是梯度下降算法
    • 3.什么是随机梯度下降算法

1.什么是梯度

首先给出高数课程中梯度的定义:

在这里插入图片描述

如果对上面的定义没有理解也没有关系,用通俗的语言来说,梯度实际上就是一个向量,向量中的各个元素表示多元函数在某一个点对于其中一个自变量的偏导数。

例如,给出一个函数:f(x)=ln(x²+y²+z²),求出该函数在点(1,2,-2)处的梯度,计算过程如下:

  1. 计算在该点处函数f(x)对于变量x、y、z的偏导数。计算出的结果分别为2/9,4/9和-4/9。
  2. 对偏导数进行拼接,所以该函数在该点的梯度为(2/9,4/9,-4/9)。

2.什么是梯度下降算法

梯度下降算法是一种对损失函数进行优化来得到使得损失函数值最小的机器学习模型的一种算法。也就是说,梯度下降算法是一种用来在机器学习中求解最佳模型的算法。

这么说可能还不是特别好理解,我们从简单的开始,先介绍梯度下降算法的退化版“斜率下降算法”。

假设一个函数的图像如下图所示,在无法直接到达最低点的情况下,如何计算出函数的最小值?

在这里插入图片描述

首先需要考虑前进的方向。

假设这样一种情形。当你在一次爬山过程中突然起了大雾,此时想下山的你已经看不清下山的路应该往什么方向走,只能看清眼前很近距离内的路,你应该怎么办才能尽可能地走到山脚?

这时你可以采取这样一种措施:观察眼前的路,如果是下坡路就顺着向下走,走一段距离后再进行一次相同的判断。这样循环往复,你最有可能顺着下坡路成功下山。如果走到一个地方后没有下坡路而是平路了,那么此时你就可以认为自己已经到山脚了。

如果你能够理解上面下山的过程,那么你就明白了梯度下降算法的本质原理。损失函数相当于一座山,而损失函数的最小值相当于山脚,也就是山高度最低的地方,求出损失函数的最小值的过程就相当于从山上的某个地方开始找到下山的路。

假设我们的起点在上图中绿色点标记处,为了能向下走,我们需要判断下坡的方向。而在函数图像中,可以通过斜率判断下坡的方向,因为斜率为负数的方向函数值会减小,也就是我们要走的方向,所以本题中首先需要确定:为了找到最小值,我们需要向右走,也就是增大b值。

我们确定了前进的方向之后,那就得判断再下一次判断之前,我们要在这个方向走多远。

同样可以这么考虑:下坡路越陡,我们越有把握认为这条路可以走到山脚,因此可以一次性沿着这条路走得更远;相对应的,如果下坡路很平缓,我们就会对这条路是否是通往山脚产生一定的怀疑,因此在下一次判断之前,并不会沿着这条路走太远。

在函数上也是这样体现:如果该点下降方向的斜率绝对值大,那么我们一次就会移动得多一点;如果该点下降方向的斜率绝对值小,那么我们一次就会移动少一点。

为了方便控制下坡的速度,我们还需要引入学习率这个变量

学习率可以这样理解:学习率大,相当于我们是大跨步下山的;学习率小,相当于我们是一步一步挪下山的。

学习率不是一个自动生成的值,需要手动进行设置。类似于下山的人需要自行决定是大步走还是小步走。

通过上面的分析,我们可以得出更新坐标b的公式

在这里插入图片描述

对上面的公式进行几点解释:

  • 普适性:无论当前点斜率是正数还是负数,上面的公式都成立。
  • 步长控制:步长由当前点的斜率和学习率共同确定。

上面的算法过程,就可以认为是梯度下降算法的退化版“斜率下降算法”。梯度下降算法的过程与“斜率下降算法”完全类似,只不过对于每一个维度(也就是函数中的每一个自变量)都进行一次上面的过程。

相当于下山的过程中,你不仅要考虑向前还是向后是下坡路,同时还要考虑向左还是向右是下坡路,因为最后你走的方向可能是左前方、右后方等而不是直接向着一个单一方向。

上述所述的情况都是针对一个样本点而言对其损失函数进行梯度下降求解,但是实际应用中并非使用损失函数,而是求解使得损失函数在各个样本点的梯度平均值函数值最小的模型参数。损失函数在各个样本点的梯度平均值函数被称为风险函数。

3.什么是随机梯度下降算法

上面我们已经说过,传统梯度下降算法(也称为批量梯度下降算法)中每一次进行判断时都需要计算损失函数在各个样本点的梯度平均值,由此可以得出:

当样本点个数很多时,梯度下降算法逐一的计算过程会耗费大量时间。

同时,这么多的计算结果,如果需要全部保存下来,那么占用的存储空间也是很大的。

因此,对批量梯度下降算法进行改进就得到了随机梯度下降算法。

随机梯度下降算法和批量梯度下降算法的区别在于:随机梯度算法每次只使用少数几个样本点(每次不重复)的梯度的平均值就更新一次模型;而批量梯度下降算法需要使用所有样本点的梯度的平均值更新模型。

因此,随机梯度下降算法的效率明显提高,目前已经得到了广泛应用。

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

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

相关文章

Java IO流之字节流详解

一、OutputStream输出流 FileOutputStream概述: 操作本地文件的字节输出流,可以把程序中的数据写到本地文件中 书写步骤: ① 创建字节输出流对象 细节1:参数一是字符串表示的路径或者File对象都是可以的 细节2:如果文…

《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 祝大家春节快乐! 视频版: https://www.bilibili.com/video/BV1UY4y1d7C7 《安富莱嵌入式周…

(考研湖科大教书匠计算机网络)第二章物理层-第三、四节:传输方式和编码与调制

文章目录一:传输方式(1)串行传输和并行传输(2)同步传输和异步传输(3)单工、半双工和全双工二:编码与调制(1)通信相关基础知识①:消息、数据、信号…

linux实战笔记整理(1.24)

后台挂起程序: 如果报错:nohup: ignoring input and appending output to nohup.out,则在指令最后加一个&让程序自己运行:nohup command增加rm 提醒:(重要的命令问三遍): 操作: …

为tableview添加带控件的单元格如复选框checkbox与combbox单元格

我们常常会有这样的需求,为QTableView增加复选框checkbox和选择下拉框combbox,毕竟依靠键盘输入不是很好约束其规范性。下面我们逐个来介绍。完成之后的效果如下: 一、准备TableView 1、数据准备 数据大家可以随意准备,有的话…

[C语言]柔性数组

目录 1.柔性数组 2.柔性数组的特点 3.柔性数组的使用 1.柔性数组 柔性数组存在于结构体中,当结构体最后一个成员元素为一个未知大小的数组,则称其为柔性数组。 struct s {int a;char arr[];//柔性数组 }; 2.柔性数组的特点 1. 结构中的柔性数…

八、python-高级语法篇(黑马程序猿-python学习记录)

黑马程序猿的python学习视频:https://www.bilibili.com/video/BV1qW4y1a7fU/ 目录 1. 什么是闭包 2. 闭包的优缺点 3. nonlocal关键字的作用 4. 简单闭包 5. 使用nonlocal关键字修改外部函数的值 6. 使用闭包实现ATM小案例 7. 装饰器概念 8. 装饰器的一般写法 9. 装…

Vue-Router详解

1、前端路由的发展历程 1.1、认识前端路由 路由其实是网络工程中的一个术语: 在架构一个网络时,非常重要的两个设备就是路由器和交换机。当然,目前在我们生活中路由器也是越来越被大家所熟知,因为我们生活中都会用到路由器&…

算法:树状数组详解(c++实现 求解动态数组区间和问题)

文章目录引入树状数组c完整代码引入 什么是树状数组??? 解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和, 区间和,这样的问题可以使用树…

Day8 spring 注解开发

1 前言使用注解类代替xml配置,使用注解代理xml中的标签2 标签2.1 用于Bean(类)上的常见注解2.1.1 Component步骤:在xml中配置包扫描,使得spring知道在哪些类上加上Component在特定类上加上Component测试/*** author : msf* date : 2023/1/24*…

#I. 哆啦A梦的时光机(bfs经典习题)

题目说明有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿越操作。大雄他们需要从现在出发,到达一个目标时间点进行探险,结束后再返回到现在,他们希望尽可能减少…

Linux——网络编程概述

Q:为什么要网络编程?A:进程间的通信是依赖于Linux内核的,只能适用于单机,而要实现联机,就要用网络编程,网络编程是面向多台设备间的通信网络编程两个重要概念:IP地址和端口&#xff…

微服务拆分之道

背景 微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,同时,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架构良好的发展机会。 在做微服务的路上&#xff0…

JavaWeb | JDBC相关API详解 1(含源码阅读)

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JDBC Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&#x…

5、常量与变量

目录 1.数值型变量 (1)整型常量 (2)实型常量 2.字符型常量 (1)字符常量 (2) 字符串常量 3. ASCII表 4. 转义符号 5.符号常量 6. 整型变量 (1)有符号基本整型 (2)无符号基…

JavaScript Break 和 Continue 语句

文章目录JavaScript Break 和 Continue 语句Break 语句Continue 语句JavaScript 标签笔记列表JavaScript Break 和 Continue 语句 break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 Break 语句 我们已经在本教程之前的章节中见到过 break 语句。它用于跳出 swi…

final的一个重要用途-宏变量和未初始化问题

/*** author 张家琛* version 1.0* date 2023/1/24 20:23*/ public class FinalDemo {public static void main(String[] args) {final var a5;System.out.println(a);} } 对于上面的程序来说,变量a其实根本就不存在,这段代码本质上执行的是转换成的&am…

MyBatis知识点笔记

目录 mybatis mapper-locations的作用? mybatis configuration log-impl 作用? resultType和resultMap的区别? 参数 useGeneratedKeys ,keyColumn,keyProperty作用和用法 取值方式#和$区别 动态标签有哪些 MyBat…

字节青训前端笔记 | Vite 入门

本节课,讲师将前置介绍有关前端工程基本知识,同时讲解前端构建工具及解决问题,进而引出作为前端构建工具的 Vite 是什么及其在开发过程中的应用。 为什么使用构建工具 前端是有一系列资源组成的,js 代码,css样式&…

ESP32 Micropython编程(Thonny)04---- 人体感应模块

本人持续分享更多关于嵌入式和单片机的知识,如果大家喜欢,别忘点个赞加个关注哦,让我们一起共同进步 最近使用到人体感应模块HC-SR501,这个模块使用十分简单,看下面代码就可以看出了,而且应用广泛&#xff…