机器学习|什么是梯度下降(小白向)|探寻最优解之路

文章目录

  • 前言
  • 一、什么是梯度下降?
  • 二、梯度下降法一般步骤
    • 1.确定一个小目标——预测函数
    • 2.找到差距——代价函数
    • 3.明确搜索方向——梯度计算
    • 4.一步要走多远?——学习率
  • 三、梯度下降的分类
      • 批量梯度下降(Batch Gradient Descent)
      • 随机梯度下降(SGD)
      • 小批量梯度下降(Mini-batch Gradient Descent)
      • 实践建议
  • 三、总结
  • 四、后话


前言

我们身处人工智能的时代,各种算法层出不穷,令我们眼花缭乱,望而却步,那么有没有一种核心的,最基础的算法,能够作为一把钥匙帮助我们打开机器学习领域的大门呢,那就是“梯度下降法”啦,那么,什么是梯度?为什么要下降?怎么下降呢?


一、什么是梯度下降?

想象一下,你在一座大山的山顶上,你的目标是找到下山最快的路径。梯度下降算法的工作方式与此类似,只不过是在数学空间中寻找函数最小值的过程。它是一种迭代优化算法,用于最小化或最大化一个函数(在机器学习中通常是损失函数),通过沿着函数梯度的反方向移动来逐步调整参数。
OK记住这个下山的例子,我们要开始分析啦!

二、梯度下降法一般步骤

1.确定一个小目标——预测函数

机器学习的一个常见任务是:通过学习算法发现一堆数据背后的规律,然后不断改进模型,使得这个模型能够很好地做出预测。


通俗示例:
数据如下:已知房价由房子的面积,朝向,距离市中心地距离这三个因变量决定。现在有500条数据,每条数据包含一个房子的面积,朝向,距离市中心和房价。例如:房子1:面积120平,朝向正南,距离市中心3000米,房价:200万。
你需要做的:是找到一个目标函数很好的拟合这些数据,以便于我给你一条新的数据,它包括三个因变量,然后带入你的函数,预测出房价。
OK这就是一个常见任务。


现有一个坐标系:横坐标x:面积,纵坐标y:房价。有一堆样本点,你需要找到一个函数拟合这些点,是y=wx还是y=wx²? 直觉告诉你这是一条直线,那么好,现在我们从一元一次函数开始吧!这个问题中 目标函数或者说预测函数就是:y=wx。

在这里插入图片描述

2.找到差距——代价函数

问题来了,怎么判断拟合的程度好不好呢?我们可以用样本点偏离目标函数的程度表示,偏离越大,拟合越不好,反之越好。
最常用的方法是均方误差,顾名思义:就是误差平方和的平均值。
我们现在算一下平方误差,现有一个点p1(x1,y1),要算这个点的误差e1,那么如下图:

这个误差函数也被称为代价函数(cost function),为了偏离更小,也就是拟合程度更好,我们当然希望找到一个w,使得e最小,也就是求最小值点
在这里插入图片描述


这样,我们成功将样本点的拟合过程映射到了一个函数图像上:
在这里插入图片描述

3.明确搜索方向——梯度计算

梯度(gradient)就是导数,在二次函数中也就是斜率。
我们随便选择一个初始点,直觉告诉我们,往下降的方向走准没错!
在这里插入图片描述

4.一步要走多远?——学习率

往下降的方向走,方向对了,但是步子迈多大?
给出一个式子:
新w=旧w - 斜率*学习率
步子迈太大——学习率太高,例如=0.2,可能会出现以下效果
在这里插入图片描述

恰当的学习率(例如0.01)是受推崇的,效果也不错,很快找到了最低点

在这里插入图片描述


三、梯度下降的分类

梯度下降有几种变体,主要区别在于计算梯度时使用数据的不同方式:

批量梯度下降:使用所有训练数据计算梯度,是最准确但最慢的方法。
随机梯度下降(SGD):每次只使用一个训练样本来更新参数,速度快但波动较大。
小批量梯度下降:折中方案,每次使用一小批样本计算梯度,既保证了速度又减少了波动。


下面是文字解释
在机器学习中,梯度下降算法是调整模型参数以最小化损失函数的重要方法。根据如何选择数据来计算梯度,梯度下降有三种主要形式:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent,简称SGD)以及小批量梯度下降(Mini-batch Gradient Descent)。下面,我们将逐一探讨这三种方法的特点和适用场景。

批量梯度下降(Batch Gradient Descent)

定义:批量梯度下降使用整个训练数据集来计算梯度。这意味着,在每一次迭代中,算法都会基于所有训练样本的平均梯度来更新参数。

优点

  • 准确性:由于考虑了所有训练数据,梯度的估计更为准确,使得每次更新都朝着全局最小值的方向前进。

缺点

  • 计算成本高:需要在每个迭代步骤中处理整个数据集,这在大数据集上可能导致非常慢的收敛速度。
  • 内存需求:必须将所有训练数据保留在内存中,这对于大规模数据集来说可能是个问题。

随机梯度下降(SGD)

定义:随机梯度下降在每次迭代时只使用单个训练样本来计算梯度并更新参数。这意味着更新过程是基于随机选择的样本进行的。

优点

  • 计算效率:由于每次迭代只需要处理一个样本,SGD在大型数据集上的计算速度远快于批量梯度下降。
  • 避免局部最小值:随机性可以帮助模型跳出局部最小值,更有可能找到全局最小值。

缺点

  • 波动性:由于每次更新都依赖于单个样本,更新过程可能非常不稳定,导致损失函数的值在迭代过程中大幅波动。

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

定义:小批量梯度下降是批量梯度下降和随机梯度下降的一种折中方案。它在每次迭代中使用一个小批量的样本集合来计算梯度。

优点

  • 速度与稳定性:相比批量梯度下降,小批量梯度下降的计算速度更快,同时比随机梯度下降更稳定,因为它减少了噪声的影响。
  • 硬件效率:现代GPU和CPU设计往往对处理小批量数据特别有效,这使得小批量梯度下降在实践中成为首选。

缺点

  • 设置难度:需要选择合适的小批量大小,太小会导致波动性,太大则会降低算法的速度优势。

实践建议

在实际应用中,小批量梯度下降因其综合了速度和稳定性的优势而被广泛采用。批量大小的选择通常是一个经验参数,需要根据具体问题和可用资源来决定。对于大多数情况,小批量梯度下降提供了梯度下降算法的最佳平衡点,是深度学习和机器学习项目中的标准选择。

三、总结

梯度下降的一般过程:

  1. 定义代价函数(const function)
  2. 选择起始点(starting point)
  3. 计算梯度(gradient)
  4. 按照学习率前进(learning rate)
    重复3 4 步骤,直至函数收敛。

四、后话

以上只是一个简单例子,实际的目标函数可能相当复杂,可能几十个因变量决定一个函数值,那对应的代价函数当然也会很复杂了。
你的代价函数可能是七拐八拐,可能是一个复杂的三维曲面,可能是一个我们无法想象的几十维度的函数图像。
在这里插入图片描述

在这里插入图片描述

这也就是“为什么不用初中知识 直接求这个代价函数最小值点呢,为什么还要一步一步梯度下降呢”这个问题的答案啦!因为给你一个10元函数,你怎么求呢 对吧。而无论多少维度,都是可以梯度下降去求的!


梯度下降算法是机器学习中不可或缺的一部分,它帮助我们在高维空间中找到最优解。无论是调整神经网络的权重,还是优化线性回归模型,梯度下降都是实现这些任务的关键工具。希望本文能帮助你对这一概念有了更深入的理解。

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

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

相关文章

Java语言程序设计基础篇_编程练习题***16.31(游戏:四子连)

目录 题目:***16.31(游戏:四子连) 习题思路 代码示例 结果展示 题目:***16.31(游戏:四子连) 编程练习题8.20让两个玩家在控制台上可以玩四子连的游戏。为这个程序重写一个GUI版本…

Catf1ag CTF Web(八)

前言 Catf1agCTF 是一个面向所有CTF(Capture The Flag)爱好者的综合训练平台,尤其适合新手学习和提升技能 。该平台由catf1ag团队打造,拥有超过200个原创题目,题目设计注重知识点的掌握,旨在帮助新手掌握C…

数据结构----队列

1 什么是队列? 只允许在两端进行插入和删除操作的线性表,在队尾插入,在队头删除 插入的一端,被称为"队尾",删除的一端被称为"队头" 在队列操作过程中,为了提高效率&#xff0…

开源通用验证码识别OCR —— DdddOcr 源码赏析(一)

文章目录 [toc] 前言DdddOcr环境准备安装DdddOcr使用示例 源码分析实例化DdddOcr实例化过程 分类识别分类识别过程 未完待续 前言 DdddOcr 源码赏析 DdddOcr DdddOcr是开源的通用验证码识别OCR 官方传送门 环境准备 安装DdddOcr pip install ddddocr使用示例 示例图片如…

Java语言程序设计——篇十五(3)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

450nm 高功率蓝光激光模组使用多长时间需要更换

450nm蓝光激光模组以其独特的波长特性和高功率输出,成为了市场上备受瞩目的产品。然而,对于用户而言,了解这类高功率激光模组的使用寿命及何时需要更换,是确保工作效率和设备安全性的重要环节。本文将带大家了解450nm 高功率蓝光激…

使用钉群发送告警通知

创建钉群,添加机器人 创建群 添加机器人并设置信息 需要注意的是设置“安全设置”时如果使用自定义关键词方式,那设置的内容必须要包含告警消息的内容 代码 模拟http请求发送通知 /*** param content 消息内容* param webhook 设置告警通知的群中机器…

6款局域网管理软件优选|企业网络安全管理必备!

局域网管理软件在提高工作效率、保障信息安全等方面发挥着越来越重要的作用。 本文将详细介绍六款市场上最受欢迎的局域网管理软件,帮助企业管理者更好地理解和选择适合自己的局域网管理工具。 一、局域网管理的重要性 一个高效运作的局域网不仅可以提升工作效率&…

动态内存管理申请调整和释放

动态内存管理存放在内存中的堆区中 动态内存分配的函数:malloc、calloc、realloc、free 动态内存分配 malloc函数(内存申请空间)无初始化free函数(动态内存释放)calloc函数(内存空间申请)初始化…

页面设计任务 个人简介页面

目录 任务要求 任务讲解 源码: 详细讲解 html部分 CSS部分 任务要求 页面结构: 创建一个基本的 HTML 页面,页面标题为“我的个人简介”。页面内容分为以下四个部分: 顶部导航栏: 包含至少三个导航链接,例如:“主页”、“关于…

OpenCV几何图像变换(2)计算仿射变换矩阵的函数getAffineTransform()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算三对对应点之间的仿射变换。 该函数计算 23 的仿射变换矩阵,使得: [ x i ′ y i ′ ] map_matrix ⋅ [ x i y i 1 …

Docker的安装与镜像配置

小编目前大一,刚开始着手学习SSM,小编会把每个框架都整理成知识点发布出来。如果你也同时在学习SSM的话,不妨看看我做的这个笔记。我认为同为初学者,我把我对知识点的理解以这种代码加观点的方式分享出来不仅加深了我的理解&#…

LORA通信详解

LORA(Long Range Radio)是一种低功耗广域网(LPWAN)技术,专门设计用于物联网(IoT)设备的远距离通信。其长距离传输和低功耗特性使其在智能城市、环境监测、农业等领域中得到了广泛应用。 一、LOR…

自抗扰控制ADRC原理解析及案例应用

1. ADRC基本原理 1.1 ADRC的基本概念 自抗扰控制(Active Disturbance Rejection Control,ADRC)是一种先进的控制策略,由韩京清研究员于1998年提出。ADRC的核心思想是将系统内部和外部的不确定性因素视为总扰动,并通过…

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号: 型号 ASUS FX53VD(华硕-飞行堡垒) 板号:GL553VD 故障情况描述: 键盘无法使用,键盘除开机键外…

heic格式怎么转成jpg?3种格式转换方法分享

heic格式怎么转成jpg?将HEIC格式的图片转换为JPG格式,是图像处理中的常见需求,它极大地方便了跨平台分享与浏览。通过专业的转换软件,我们可以轻松实现这一转换过程,确保图像内容在更多设备和环境中得到兼容和展示。这…

vue 接口 传参token对 返回数据不对原因

接口不携带参数 接口token 正确 但是返回数据 返回的上一次登录的数据 处理 携带个时间戳

Python基础知识学习总结(五)

一. 字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割,每个对之间用逗号( , )分割,整个字典包括在花括号 {} 中 。 dict 作为 Python 的关键字和内置函数,变量名不建议命名…

多商户入驻商城系统源码+收银系统源码

随着移动互联网的不断发展,私域小程序对于零售门店来说早已不再陌生。很多门店也都搭建了自己专属的私域商城,但是私域商城一直是不温不火的状态,尤其针对一些腰尾部商户来说,无小程序运营能力,小程序流量匮乏&#xf…

Unity 波函数坍缩算法随机地图生成

Unity 波函数坍缩算法随机地图生成 波函数波函数基本概念位置空间波函数动量空间波函数两种波函数之间的关系波函数的本征值和本征态波函数坍缩 熵是什么熵作为状态函数时间之箭 实现原理举个例子:2D迷宫地图生成 Unity 如何实现前期准备单元格代码瓦片地图代码波函…