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

12.梯度下降法的具体解析——举足轻重的模型优化算法

引言

梯度下降法(Gradient Descent)是一种广泛应用于机器学习领域的基本优化算法,它通过迭代地调整模型参数,最小化损失函数以求得到模型最优解。

通过阅读本篇博客,你可以:

1.知晓梯度下降法的具体流程

2.掌握不同梯度下降法的区别

一、梯度下降法的流程

梯度下降法的流程通常分为以下四个步骤。

1.初始化模型参数

初始化模型参数其实就是random随机一个初始的 \theta (一组 W_{0},...,W_{n})。这样我们就可以得到上图中的 Starting Point(开始点)

2.计算当下参数的梯度

计算模型参数的梯度,其实就是对于当前损失函数所在位置进行求偏导,公式:

gradient_{j} = \frac{\partial J(\theta)}{\partial \theta_{j}}

公式推导 J(\theta) 是损失函数,\theta_{j} 是样本中某个特征维度 x_{j} 对应的权值系数,也可以写成 W_{j} 。对于多元线性回归来说,损失函数 J(\theta) = \frac{1}{2}(h_{\theta}x - y)^{2} (推导过程在9.深入线性回归推导出MSE——不容小觑的线性回归算法-CSDN博客中),因为我们的MSE中 Xy 是已知的,\theta 是未知的,而 \theta 不是一个变量而是许多向量组成的矩阵,所以我们只能对含有一堆变量的函数MSE中的一个变量求导,即偏导,下面就是对 \theta_{j} 求偏导。

\frac{\partial J(\theta)}{\partial \theta_{j}} = \frac{\partial \frac{1}{2}(h_{\theta}x-y)^{2}}{\partial \theta_{j}}

由于链式求导法则,我们可以推出:

\Rightarrow \frac{\partial J(\theta)}{\partial \theta_{j}} = 2 \cdot \frac{1}{2}(h_{\theta}x-y) \cdot\frac{\partial (h_{\theta}x - y)}{\partial \theta_{j}}

在多元线性回归中,h_{\theta}x 就是 W^{T}X,也就是 \omega _{0}x_{0} + \omega_{1}x_{1}+...+\omega_{n}x_{n},我们通常把它写成\sum_{n}^{i = 0}\omega _{i}x_{i} ,所以继续推导公式:

\Rightarrow \frac{\partial J(\theta)}{\partial \theta_{j}} = (h_{\theta}x - y) \cdot \frac{\partial \sum_{n}^{i =0}(\theta_{i}x_{i}-y)}{\partial \theta_{j}}

由于我们是对 \theta_{j} 求偏导,那么和 \theta_{j} 无关的可以忽略不计,所以公式变为:

\Rightarrow \frac{\partial J(\theta)}{\partial \theta_{j}} = (h_{\theta}x - y) \cdot x_{j}

所以,我们可以得到结论:\theta_{j} 对应的梯度(gradient)与预测值 \hat{y} 和真实值 y 有关,同时还与每个特征维度 x_{j} 有关。如果我们分别对每个维度求偏导,即可得到所有维度对应的梯度值。

3.根据梯度和学习率更新参数

通过11.梯度下降法的思想——举足轻重的模型优化算法-CSDN博客的学习,我们已经知道了梯度下降法的公式:

W_{j}^{t+1} = W_{j}^{t} - \eta \cdot gradient_{j}

在获得了梯度之后,我们可以将公式表示为:

W_{j}^{t+1} = W_{j}^{t} - \eta \cdot (h_{\theta}x - y) \cdot x_{j}

通过这个公式我们就可以去更新参数逼近最优解。

4.判断是否收敛

在如何判断收敛问题上,我相信大多数的人都会认为直接判断梯度(gradient)是否为0。其实这样的方法是错误的,由于非凸损失函数的存在,gradient = 0 的情况可能是极大值!所以我们使用了另外一种方法,设置合理的阈值(Threshold)来界定函数是否收敛。即判断不等式:

Loss^{t} - Loss^{t+1} < Threshold

如果前一次的损失函数 Loss^{t} 减去这次迭代后的损失函数 Loss^{t+1} 小于我们设定的阈值Threshold ,那我们认为函数收敛,当前的参数就是我们寻求的最优解。反之,我们重复第二步与第三步,一直达到最优解为止。其实我们是在判断 Loss 的下降收益是否更合理,随着迭代次数的增多,Loss 减小的幅度不再变化就可以认为停止在最低点。

二、梯度下降法的分类

我们根据梯度下降法流程中求取梯度的步骤样本数量的不同,将梯度下降法分为三个基本的类别。它们每次学习(更新模型参数)使用的样本个数,每次更新使用不同的样本会导致每次学习的准确性和学习时间不同

1.全量梯度下降(Batch Gradient Descent)

全量梯度下降(Batch Gradient Descent)通过使用整个数据集在每次迭代中计算损失函数的梯度,以此更新模型参数(也称批量梯度下降)。由于我们使用整个数据集的样本,所以全量梯度下降的公式为:

W_{j}^{t+1} = W_{j}^{t} - \eta \cdot \sum_{m}^{i = 1}(h_{\theta}x_{i} - y_{i}) \cdot x_{j}

在全量梯度下降中,对于 \theta 的更新,所有的样本都有贡献,也就是参与调整 \theta 。所以从理论上来说一次更新的幅度是比较大的。

全量梯度下降法的优点在于收敛稳定,每次更新都朝着全局最优的方向移动。并且能够净化噪声,由于使用整个数据集计算梯度,随机噪声对更新的影响较小,使得损失函数的路径相对平滑。

缺点也是相当明显,当数据集非常大时,全量梯度下降法每个迭代计算数据集的梯度是非常耗时且占用内存的。所以不适合处理实时数据,比如在线学习和实时更新数据场景。

上图表示的梯度下降法中两个维度参数的关系,我们可以将圆圈看成一个碗的俯视图,碗底就是我们要找的最优解。我们不难发现,全量梯度下降法每次迭代都直接向碗底行进,目标明确。

2.随机梯度下降(Stochastic Gradient Descent)

随机梯度下降(Stochastic Gradient Descent)通过使用数据集中的一个随机样本在每次迭代中计算损失函数的梯度,以此更新模型参数。由于使用随机的一个样本,所以随机梯度下降的公式就是:

W_{j}^{t+1} = W_{j}^{t} - \eta \cdot (h_{\theta}x - y) \cdot x_{j}

随机梯度下降的优点在于计算速度快,由于每次迭代只对一个样本计算梯度,因此更新速度快,适合大规模数据集。它还拥有更强的泛化能力,由于引入了随机性,SGD能更好地跳出局部最优,避免过拟合(过拟合相关内容会在专栏后续文章中更新)。并且能够处理实时数据,可以在线学习,所以适用于动态更新的场景。

同样地,由于每次更新只基于一个样本,SGD的收敛并不稳定,梯度波动较大,会导致损失函数的收敛路径不平稳。并且由于随机性的存在,SGD通常需要更多的迭代次数才能收敛到最优解,即收敛速度变慢

从上图我们可以看出,相比较全量梯度下降,SGD需要迭代更多的次数才能找到最优解。

3.小批量梯度下降(Mini-batch Gradient Descent)

小批量梯度下降(Mini-batch Gradient Descent)通过使用数据集的一部分样本在每次迭代中计算损失函数的梯度,以此更新模型参数。由于使用了数据集的部分样本,所以小批量梯度下降的公式为:

W_{j}^{t+1} = W_{j}^{t} - \eta \cdot \sum_{batchsize}^{i = 1}(h_{\theta}x_{i} - y_{i}) \cdot x_{j}

小批量梯度下降综合了全量梯度下降与随机梯度下降,在更新速度与更新次数中取得一个平衡。其每次更新从数据集中随机选择 batchsize 个样本进行学习。相对于随机梯度下降法,小批量梯度下降法降低了收敛的波动性(降低了参数更新的方差),使得更新更加稳定。相对于全量梯度下降法,其提高了每次学习的速度。

小批量梯度下降的优点在于平衡了计算效率和收敛稳定性。并且不用担心内存瓶颈而使用向量化计算,还能利用GPU的并行计算能力提高计算速度。在每个小批量中,我们可以设置不同的学习率,提高模型的训练表现。

小批量梯度下降的缺点则在于样本的大小会影响训练效果,所以我们要人为地选择合适的样本大小。

从下图中我们就能看到随机梯度下降与小批量梯度下降的区别。

总结

本篇博客讲解了梯度下降法的流程和大致的分类。希望可以对大家起到作用,谢谢。


关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!

相关文章:

12.梯度下降法的具体解析——举足轻重的模型优化算法

引言 梯度下降法(Gradient Descent)是一种广泛应用于机器学习领域的基本优化算法&#xff0c;它通过迭代地调整模型参数&#xff0c;最小化损失函数以求得到模型最优解。 通过阅读本篇博客&#xff0c;你可以&#xff1a; 1.知晓梯度下降法的具体流程 2.掌握不同梯度下降法…...

GPT对话知识库——C、C++,还有Java,他们之间有什么区别

目录 1&#xff0c;问&#xff1a; 1&#xff0c;答&#xff1a; 1. 语言特性与设计理念 C 语言&#xff1a; C 语言&#xff1a; Java 语言&#xff1a; 2. 内存管理 3. 运行效率 C 和 C&#xff1a; Java&#xff1a; 4. 程序的执行方式 C 和 C&#xff1a; Jav…...

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon&#xff08;禹贡&#xff09;&#xff0c;基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力&#xff0c;提供专业的GIS&#xff08;Geographic Information System&#xff09;功能&#xff0c;赋能传统关系型数据库。 Yukon 支…...

Linux命令:用于显示 Linux 发行版信息的命令行工具lsb_release详解

目录 一、概述 二、用法 1、基本用法 2、选项 3、获取帮助 三、示例 1. 显示所有信息 2. 只显示发行版名称 3. 只显示发行版版本号 4. 只显示发行版代号 5. 只显示发行版描述 6. 只显示值&#xff0c;不显示标签 四、使用场景 1、自动化脚本 2、诊断问题 3、环…...

sbb-classes 元素

sbb-classes 元素 在 JAIN SLEE&#xff08;服务级别事件扩展&#xff09;中&#xff0c;sbb-classes 元素用于定义服务边界组件&#xff08;SBB&#xff09;的类结构及其相关配置。这是每个 SBB 的必备部分&#xff0c;包含多个子元素&#xff0c;负责描述 SBB 的抽象类、接口…...

(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识

任务编号 任务名称 任务描述 1 破冰活动 提交一份自我介绍。 2 实践项目 创建并提交一个项目。 破冰活动 提交一份自我介绍。 每位参与者提交一份自我介绍。 提交地址&#xff1a;https://github.com/InternLM/Tutorial 的 camp3 分支&#xff5e; 安装并设置git 克隆仓库并…...

12.数据结构和算法-栈和队列的定义和特点

栈和队列的定义和特点 栈的应用 队列的常见应用 栈的定义和特点 栈的相关概念 栈的示意图 栈与一般线性表有什么不同 队列的定义和特点 队列的相关概念...

15分钟学 Python 第34天 :小项目-个人博客网站

Day 34: 小项目-个人博客网站 1. 引言 随着互联网的普及&#xff0c;个人博客已成为分享知识、体验和见解的一个重要平台。在这一节中&#xff0c;我们将使用Python的Flask框架构建一个简单的个人博客网站。我们将通过实际的项目来学习如何搭建Web应用、处理用户输入以及管理…...

从零开始实现RPC框架---------项目介绍及环境准备

一&#xff0c;介绍 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调⽤&#xff0c;是⼀种通过⽹络从远程计算机上请求服务&#xff0c;⽽不需要 了解底层⽹络通信细节。RPC可以使⽤多种⽹络协议进⾏通信&#xff0c; 如HTTP、TCP、UDP等&#xff0c; 并且在 TCP/…...

论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN

摘要 背景&#xff1a; 基于GAN的融合方法存在训练不稳定&#xff0c;提取图像的局部和全局上下文语义信息能力不足&#xff0c;交互融合程度不够等问题 贡献&#xff1a; 提出双耦合交互式融合GAN&#xff08;Dual-Coupled Interactive Fusion GAN&#xff0c;DCIF-GAN&…...

java基础 day1

学习视频链接 人机交互的小故事 微软和乔布斯借鉴了施乐实现了如今的图形化界面 图形化界面对于用户来说&#xff0c;操作更加容易上手&#xff0c;但是也存在一些问题。使用图形化界面需要加载许多图片&#xff0c;所以消耗内存&#xff1b;此外运行的速度没有命令行快 Wi…...

cpp,git,unity学习

c#中的? 1. 空值类型&#xff08;Nullable Types&#xff09; ? 可以用于值类型&#xff08;例如 int、bool 等&#xff09;&#xff0c;使它们可以接受 null。通常&#xff0c;值类型不能为 null&#xff0c;但是通过 ? 可以表示它们是可空的。 int? number null; // …...

HTML增加文本复制模块(使用户快速复制内容到剪贴板)

增加复制模块主要是为了方便用户快速复制内容到剪贴板&#xff0c;通常在需要提供文本信息可以便捷复制的网页设计或应用程序中常见。以下是为文本内容添加复制按钮的一个简单实现步骤&#xff1a; HTML结构&#xff1a; 在文本旁边添加一个复制按钮&#xff0c;例如 <butto…...

Spring Cloud面试题收集

Spring Cloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用 spring boot 的开发风格做到一键启动和部署。…...

观测云对接 SkyWalking 最佳实践

简介 SkyWalking 是一个开源的 APM&#xff08;应用性能监控&#xff09;和可观测性分析平台&#xff0c;专为微服务、云原生架构和基于容器的架构设计。它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化的解决方案。如果您的应用中正在使用SkyWalking &#xf…...

AI少女/HS2甜心选择2 仿天刀人物卡全合集打包

内含AI少女/甜心选择2 仿天刀角色卡全合集打包共21张 下载地址&#xff1a;https://www.51888w.com/408.html 部分演示图&#xff1a;...

MISC - 第11天(练习)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天继续讲解MISC的相关知识 john-in-the-middle 导出http数据文件里面logo.png 是旗帜图案&#xff0c;放到stegsolve查看 通过转换颜色&#xff0c;发现flag信息 flag{J0hn_th3_Sn1ff3r} [UTCTF2020]docx 附件信息…...

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。 图1 PUMA560机器人的各连杆坐标系 表1 PUMA560机器人的连杆参数 用代数法对其进行运动学反解。具体步骤如下: 1、求θ1 PMUMA56...

centos常用知识和命令

linux目录及结构 /etc #存配置文件 /var #存日志文件 /home #用户家目录 /root #root用户家目录 /bin #命令文件目录 /sbin #超级管理员命令目录 /dev #设备文件目录 /boot #系统启动核心目录 /lib #库文件目录 /mnt #挂载目录 /tmp #临时文件目录 /usr #用户程序存…...

基于yolov8调用本地摄像头并将读取的信息传入jsonl中

最近在做水面垃圾识别的智能船 用到了yolov8进行目标检测 修改并添加了SEAttention注意力机制 详情见其他大神 【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用_yolov8添加se-CSDN博客 并且修改传统的iou方法改为添加了wise-io…...

Linux中的进程间通信之管道

管道 管道是Unix中最古老的进程间通信的形式。 我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 匿名管道 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd&#xff1a;文件描述符数组,其中fd[0]表示读端, fd[1]表示写端 …...

【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题

Vue Router mode&#xff0c;为 history 无效&#xff0c;建议使用默认值 hash&#xff1b;...

【PyTorch】生成对抗网络

生成对抗网络是什么 概念 Generative Adversarial Nets&#xff0c;简称GAN GAN&#xff1a;生成对抗网络 —— 一种可以生成特定分布数据的模型 《Generative Adversarial Nets》 Ian J Goodfellow-2014 GAN网络结构 Recent Progress on Generative Adversarial Networks …...

Vue3轻松实现前端打印功能

文章目录 1.前言2.安装配置2.1 下载安装2.2 main.js 全局配置3.综合案例3.1 设置打印区域3.2 绑定打印事件3.3 完整代码4.避坑4.1 打印表格无边框4.2 单选框复选框打印不选中4.3 去除页脚页眉4.4 打印內容不自动换行1.前言 vue3 前端打印功能主要通过插件来实现。 市面上常用的…...

SHA-1 是一种不可逆的、固定长度的哈希函数,在 Git 等场景用于生成唯一的标识符来管理对象和数据完整性

SHA-1 (Secure Hash Algorithm 1) 是一种加密哈希函数&#xff0c;它能将任意大小的数据&#xff08;如文件、消息&#xff09;转换为一个固定长度的 160 位&#xff08;20 字节&#xff09;哈希值。这种哈希值通常以 40 个十六进制字符的形式表示&#xff0c;是数据的“指纹”…...

Activiti7 工作流引擎学习

目录 一. 什么是 Activiti 工作流引擎 二. Activiti 流程创建步骤 三. Activiti 数据库表含义 四. BPMN 建模语言 五. Activiti 使用步骤 六. 流程定义与流程实例 一. 什么是 Activiti 工作流引擎 Activiti 是一个开源的工作流引擎&#xff0c;用于业务流程管理&#xf…...

pytorch使用LSTM模型进行股票预测

文章目录 tushare获取股票数据数据预处理构建模型训练模型测试模型tushare获取股票数据 提取上证指数代码为603912的股票:佳力图,时间跨度为2014-01-01到今天十年的数据。 import tushare as ts pro = ts.pro_api()#准备训练集数据df = ts.pro_bar(ts_code=603912.SH, star…...

掌握 C# 异常处理机制

在任何编程语言中&#xff0c;处理错误和异常都是不可避免的。C# 提供了强大的异常处理机制&#xff0c;可以帮助开发者优雅地捕获和处理程序中的异常&#xff0c;确保程序的健壮性和可靠性。本文将带你了解 C# 中的异常类、try-catch 语句、自定义异常以及 finally 块的使用。…...

【Redis】Redis Cluster 简单介绍

Redis Cluster 是 Redis 3.0 提供的一种分布式解决方案, 允许数据在多个节点之间分散存储, 从而实现高可用性和可扩展性。 特点: 分片: Redis Cluster 将数据分散到多个节点, 通过哈希槽 (hash slots) 机制将键映射到不同的节点上。总共有 16384 个哈希槽, 每个节点负责一部分…...

【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000010 案列 EXCEL单元格格式。EXCEL文本型和常规型转…...

赣州做网站优化/google优化师

问题描述&#xff1a; 使用unordered_map时&#xff0c;需要用到#include <unordered_map>头文件&#xff0c;此时&#xff0c;进行编译时会报错。 报错内容&#xff1a; #error This file requires compiler and library support for the ISO C 2011 standard. This …...

网络和网站的区别/淘宝数据查询

之前的文章中讲到&#xff0c;JMM是内存模型规范在Java语言中的体现。JMM保证了在多核CPU多线程编程环境下&#xff0c;对共享变量读写的原子性、可见性和有序性。本文就具体来讲讲JMM是如何保证共享变量访问的原子性的。原子性问题#原子性是指&#xff1a;一个或多个操作&…...

顺德 网站设计/网络销售公司经营范围

java小白的学习记录...... 前提&#xff1a;已经按照上一篇博文 [java][13]创建package 建立了java project 1、在mydemos包中建立TestTeacher类&#xff0c;试图调用mydemos2中的Teacher类2、导入包 1&#xff09;法1 -- 手动输入 导入包&#xff1a;import 包名.类名&#x…...

本地网站搭建视频教程/网址大全浏览器主页

找出x-y之间的完数个数 n&#xff08;完数是一个数的因子之和是这个数本身。例如6123&#xff09;&#xff08;y大于等于x&#xff09;。 样例输入&#xff1a; 1 6 样例输出&#xff1a; 2 #include <iostream> using namespace std; int main() {int x,y,n0;cin>&g…...

全网网站建设优化/青岛网站设计微动力

火狐浏览器丢失书签,恢复无法处理备份文件的解决方案参考文章&#xff1a; &#xff08;1&#xff09;火狐浏览器丢失书签,恢复无法处理备份文件的解决方案 &#xff08;2&#xff09;https://www.cnblogs.com/dongliu/p/5843908.html &#xff08;3&#xff09;https://www…...

wordpress主题怎么安装/如何进行线上推广

产品名称&#xff1a;苯并吡喃腈衍生物 结构式&#xff1a; 结构和纯度表征&#xff1a;纯度>95% 产品质量指标&#xff1a;光谱范围&#xff1a;550-750 nm 应用领域与参考文献&#xff1a;苯并吡喃腈衍生物是一类具有高荧光量子效率的发色团&#xff0c;可以通过调节推拉…...