关于梯度下降法的一份介绍

news/2025/2/24 11:39:22

无论是机器学习(ML)还是深度学习(ML)中,梯度下降法都是一种十分优秀有用的算法,可以用它来优化模型,最小化模型的损失函数。在这片文章中我将介绍这种优化算法,包括他的概念原理、具体实例以及python代码演示。

一、概念

梯度下降法(Gradient Descent)是一种用于求解函数最小值的迭代优化算法,广泛应用于机器学习和深度学习中以优化模型参数。其基本思想是通过沿负梯度方向不断调整输入变量,逐步逼近目标函数的局部最小值点。

简单来说就是,我们当我们想要寻找一个小球从山顶到山底最短的一条路径,我们可以先让这个小球自由滑落,此时滑落时这个滑落的方向就是目前最陡的山路,当小球滑落一段时间后,我们让小球暂停,然后再让其自由滑落,沿当前最陡的山路,我们不断重复这些步骤,最后小球会滑落到山脚,并且它滑落的路径会是所有路径中最短的路径。(参考书籍《ディープラーニングの数学》)

二、原理

在上述的概念中,我们现在要寻找的就是小球滑落时的最陡峭的方向,我们可以利用如下的公式来寻找这个方向,即:

(\Delta x, \Delta y) = -\eta (\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y})

接着,让小球滑落的这个动作就是:

让实际所求的值从点(x,y)向点(x+\Delta x,y+\Delta y)移动。

而该向量(\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y})称为函数f(x,y)在点(x,y)处的梯度。

那么,我们思考,为什么上述的公式会求得最陡峭的方向呢?

首先,有函数f(x,y)的值的变化\Delta z为:

\Delta z=f(x+\Delta x, y+\Delta y)-f(x,y)

根据近似公式,得到:

\Delta z = \frac{\partial f(x,y)}{\partial x}\Delta x + \frac{\partial f(x,y)}{\partial y}\Delta y

如果我们将之写为向量的格式,即可得到:

(\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y}),(\Delta x,\Delta y)

那么,已知向量\mathbf{b}在满足如下的公式时取得内积\mathbf{a\cdot b}最小值:

b=-ka

那么,就有(\Delta x, \Delta y) = -\eta (\frac{\partial f(x,y)}{\partial x},\frac{\partial f(x,y)}{\partial y})取得最小值。

此外,在式子中,\eta无法通过某个公式直接求得,而是需要通过许多的尝试才能得到最优的结果,而它也被称为学习率

三、实例

假设有函数z=ax^2+by^2+cx,且\Delta x\Delta y为微小的值,当x从α变到\alpha +\Delta x,y从β变到\beta +\Delta y时,求使这个函数减小到最快的向量(\Delta x,\Delta y)

解:先求的偏导数:

\frac{\partial z}{\partial x}=2ax+c                  \frac{\partial z}{\partial y}=2b

x=\alpha \;\;\;\;y=\beta,于是有:

(\Delta x,\Delta y)=-\eta (2a\alpha +c,2\beta )    

四、代码演示

将上述的过程用代码演示,并且假设其中的函数为:f(x)=x^2

那么,对应的python代码如下:

def f(x):
    return x ** 2


def df(x):
    """函数f(x) = x^2的导数"""
    return 2 * x


# 梯度下降函数
def gradient_descent(starting_point, learning_rate, num_iterations):
    x = starting_point

    for i in range(num_iterations):
        gradient = df(x)

        x -= learning_rate * gradient

        if i % 10 == 0:
            print(f"Iteration {i}: x = {x}, f(x) = {f(x)}, Gradient = {gradient}")

    return x

此上


http://www.niftyadmin.cn/n/5864283.html

相关文章

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…

PHP房屋出租出售高效预约系统小程序源码

🏠 房屋出租出售高效预约系统 —— 您的智能找房新选择 💡 这是一款集智慧与匠心于一体的房屋出租出售预约系统,它巧妙地融合了ThinkPHP与Uniapp两大先进框架,精心打造而成。无论是小程序、H5网页,还是APP端&#xff…

线性模型 - 支持向量机

支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin&#xff09…

【算法】游艇租贷

问题 ⻓江游艇俱乐部在⻓江上设置了 n 个游艇租聘站&#xff0c;游客可以在这些租聘站租 ⽤游艇&#xff0c;然后在下游的任何⼀个租聘站归还。游艇出租站 i 到 j 的租⾦为 r(i, j)&#xff0c;1 ≤i< j≤n&#xff0c;设计⼀个算法&#xff0c;计算从出租站 i 到 j 所需的…

超导量子计算机的最新进展:走向实用化的量子革命

超导量子计算机的最新进展:走向实用化的量子革命 大家好,我是 Echo_Wish,今天我们来聊聊科技圈最炙手可热的话题之一——超导量子计算机。近年来,量子计算领域可谓是风起云涌,而超导量子计算机作为主流路线之一,已经在学术界和工业界取得了不少突破性进展。 那么,超导…

VS2022配置FFMPEG库基础教程

1 简介 1.1 起源与发展历程 FFmpeg诞生于2000年&#xff0c;由法国工程师Fabrice Bellard主导开发&#xff0c;其名称源自"Fast Forward MPEG"&#xff0c;初期定位为多媒体编解码工具。2004年后由Michael Niedermayer接任维护&#xff0c;逐步发展成为包含音视频采…

Fences 5深度解析:一键打造超高效整洁桌面

在信息爆炸的时代,电脑桌面往往成为各种文件、图标和快捷方式的“聚集地”。杂乱无章的桌面不仅影响视觉体验,还可能降低工作效率。而Fences 5,这款由Stardock公司精心打造的桌面管理工具,凭借其强大的功能和便捷的操作,成为了众多用户整理桌面的得力助手。本文将带大家深…

Python爬虫处理网页中的动态内容

文章目录 前言一、Python环境搭建1.Python安装2.选择Python开发环境 二、Python爬虫处理网页中的动态内容1. 使用 Selenium 库2. 使用 Pyppeteer 库3. 分析 API 请求 前言 在网页中&#xff0c;动态内容通常是指那些通过 JavaScript 在页面加载后动态生成或更新的内容&#xf…