梯度下降算法(Gradient Descent)

注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

算法引言

梯度下降算法,这个在机器学习中非常常见的算法,可以用下山的例子来形象地解释。想象一下,你在一座山的顶端,目标是要以最快的速度下到山底。但由于浓雾遮挡,你看不清整座山的轮廓,只能感觉到脚下的坡度。这时候,你会选择沿着最陡峭的坡度方向走,因为那很可能是下山最快的路线。在梯度下降算法中,”下山”就是寻找损失函数的最小值,”最陡峭的坡度”则对应着梯度,我们通过计算梯度并不断调整参数,来逐渐接近这个最小值。

算法应用

梯度下降算法的应用非常广泛。在机器学习领域,尤其是在训练神经网络时,它是最常用的优化算法之一。通过调整模型的参数以最小化损失函数,梯度下降帮助模型学习从数据中提取模式。

梯度下降算法的潜在价值在于它的通用性和效率。它可以应用于几乎任何可以微分的损失函数,适用于大规模数据集和复杂的模型。虽然它有一些局限性,比如容易陷入局部最小值,或者在高维空间中效率降低,但通过各种改进的版本(如随机梯度下降、小批量梯度下降)以及与其他技术(如动量法或自适应学习率算法)的结合,这些问题可以得到有效缓解。

算法计算流程

梯度下降算法是一种用于寻找函数最小值的优化算法。它通过不断迭代,更新参数值以减少函数值。以下是梯度下降算法的详细计算流程,以函数y=x^{2}为例:
1. 定义:
梯度下降算法通过计算函数的梯度来找到该函数的局部最小值。在多维空间中,梯度是函数在某一点上升最快的方向,而梯度的负方向就是下降最快的方向。通过在梯度的负方向上调整变量,可以使函数值逐渐减小。
2. 公式:
一般的梯度下降公式为:
                                               x_{\mathrm{new~}}=x_{\mathrm{old~}}-\alpha\cdot\nabla f(x)
其中, xold 是当前点的坐标, xnew 是更新后的坐标, α 是学习率 (步长), ∇f(x)是函数在 x 点的梯度。

3. 例子:
对于函数 y=x^{2},它的梯度 (导数) 为\frac{dy}{dx}=2x
假设初始点 x_o=3 ,学习率 α=0.1 。
计算过程如下:
– 第1次迭代:

                                              \begin{aligned}x_1&=x_0-\alpha\cdot\left.\frac{dy}{dx}\right|_{x=x_0}=3-0.1\cdot2\cdot3=2.4\\y_1&=x_1^2=2.4^2=5.76\end{aligned}
– 第2次迭代:

                            \begin{aligned}&x_2=x_1-\alpha\cdot\left.\frac{dy}{dx}\right|_{x=x_1}=2.4-0.1\cdot2\cdot2.4=1.92\\&y_2=x_2^2=1.92^2=3.6864\end{aligned}                    

以此类推,每次迭代后 x 的值都会更新, y 的值逐渐减小。
4. 注意事项:
– 学习率的选择至关重要,过大可能导致超调,过小可能导致收敛速度缓慢。
– 梯度下降可能只能找到局部最小值而非全局最小值。
– 初始点的选择可能影响最终结果。

5. 关键点使用:
– 在实际应用中,如机器学习的参数优化,首先需要确定损失函数,然后通过梯度下降来最小化这个损失函数。
– 在每次迭代中计算损失函数的梯度,并更新参数。
– 监控损失函数的变化情况,直到损失函数收敛或达到一定的迭代次数后停止迭代。

代码示例

现在,让我们来生成一段解决这个问题的代码。我们将模拟梯度下降算法来寻找一个函数的最小值。为了简化问题,我们可以假设这个函数是一个简单的二次函数,比如f(x)=x^{2}。我们的目标是找到使得 f(x) 最小的 x 值。在这个例子中,显然答案是 x=0 ,但我们将通过梯度下降算法来逼近这个解。

import numpy as np
import matplotlib.pyplot as plt

# 定义函数和它的导数
def f(x):
    return x ** 2

def df(x):
    return 2 * x

# 梯度下降算法
def gradient_descent(starting_point, learning_rate, n_iterations):
    x = starting_point
    trajectory = [x]
    for _ in range(n_iterations):
        gradient = df(x)
        x = x - learning_rate * gradient
        trajectory.append(x)
    return np.array(trajectory)

# 参数设置
starting_point = 10  # 起始点
learning_rate = 0.1  # 学习率
n_iterations = 50    # 迭代次数

# 执行梯度下降
trajectory = gradient_descent(starting_point, learning_rate, n_iterations)

# 绘制结果
x = np.linspace(-11, 11, 400)
y = f(x)

plt.figure(figsize=(10, 6))
plt.plot(x, y, label='f(x) = x^2')
plt.scatter(trajectory, f(trajectory), color='red', marker='o', label='Gradient Descent Steps')
plt.title('Gradient Descent Optimization')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.grid()
plt.show()

代码的运行结果如下:

图片[1]-梯度下降算法(Gradient Descent)-VenusAI

总的来说,梯度下降算法是机器学习和深度学习中不可或缺的工具,它的应用促进了这些领域的许多重大进展。 ​

反向传播

反向传播是一种有效的计算梯度的方法,在深度学习的模型训练中被广泛使用,原理详解博文:《反向传播》。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Type-c转USBA3.0芯片 USBA3.0转Type-c芯片(USB3.1GEN2 多路切换Switch芯片) VL162

VL162具有CC功能的USB Type-C数据开关USB 3.1 Gen2 (10Gbps) VL162 带CC功能的USB Type-C数据开关 支持最高10Gbps 2差分通道,2:1 MUX/DeMUX 兼容10Gbps USB3.1 Gen2 低功耗,6mW在设备模式下有效 高直流共模电压,支持2.0V 28针QFN 3.5 x 4.5m…

[RK3128_LINUX5.1] 关于 RetroArch 使用

问题描述 查看文档 docs\cn\Linux\ApplicationNote\Rockchip_Use_Guide_Linux_RetroArch_CN.pdf,描述为实验 make menuconfig 后勾选选项 Libretro cores and retroarch -> retroarch 但是SDK中并没有这个选项 解决方案: 目前发布的buildroot SDK…

MySQL -- 08_最流行的查询需求分析(日期相关、生日、年份距离等~)

目录 最流行的查询需求分析08演示数据准备的SQL需求演示日期相关的查询函数46、查询各学生的年龄使用 timestampdiff() 函数更精准 47、查询本周过生日的学生简单写法:weekofyear针对不规范日期格式的判断写法: 48、查询下周过生日的学生49、查询本月过生…

STC89C51学习笔记(四)

STC89C51学习笔记(四) 综述:本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选:对74HC138芯片的输入端的配置(P22、P23、P24),来选择实现位选&…

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--创建新主题

前言 你可以在wordpress里面下载使用人家打包好的主题,但可能不是很好用,接下来就自己做一个自己的主题。你需要先找到xampp文件夹–htdocs–wordpress(我给更名为wplocal)–wp-content–themes 进入该文件夹之后你可以看到你之前下载导入的所有主题文件…

深度学习十大算法之深度Q网络(DQN)

一、简介 深度Q网络(DQN)是一种结合了深度学习和强化学习的算法,它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年,由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN的…

Redis -- 缓存穿透问题解决思路

缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的解决方案有两种: 缓存空对象 优点:实现简单,维护方便 缺点: 额外…

Web大并发集群部署之集群介绍

一、传统web访问模型 传统web访问模型完成一次请求的步骤 1)用户发起请求 2)服务器接受请求 3)服务器处理请求(压力最大) 4)服务器响应请求 传统模型缺点 单点故障; 单台服务器资源有限&…

如何用putty通过ssh连接ubuntu

1. 下载和安装PuTTY 访问PuTTY官网下载PuTTY的最新版本。 2. 打开PuTTY 解压下载的文件后,找到PuTTY文件并双击打开。 3. 配置SSH连接 在ubuntu下安装ssh服务在安装ssh时,我一直遇到一个问题,原因是我的虚拟机连不上网,反复实…

Spark-Scala语言实战(13)

在之前的文章中,我们学习了如何在spark中使用键值对中的keys和values,reduceByKey,groupByKey三种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢…

海康摄像头插件嵌入iframe时视频播放插件位置问题

参考:https://juejin.cn/post/6857670423971758094 原因:没有按照iframe相对位置计算视频插件位置。 解决: $(window).on(resize, resize);function resize(){// 解决iframe中嵌入海康插件初始化问题:// 1. 获取iframe相比于窗口的偏移量;c…

第二节课《轻松玩转书生·浦语大模型趣味 Demo》

比较匆忙,假期前仿照第一期课程的内容好像被清空了,重新搭建一次。 https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 按照那老师写好的,一步步复制就好了 浦语灵笔2的大概率是会超出显存,先不测试了…

水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型

水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型。水泥5G智能制造工厂数字孪生可视化平台,是水泥行业数字化转型的关键推手。数字孪生平台运用先进的信息技术和数字化手段,实现水泥生产过程的数字化模拟、可视化监控和智能化管…

泰坦尼克号幸存者数据分析

泰坦尼克号幸存者数据分析 1、泰坦尼克号数据集2、数据集加载与概览3、泰坦尼克号幸存者数据分析4、哪些人可能成为幸存者? 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一,造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…

LoRa自组网络设计 6

1 深入了解LoRaWan 1.1 LoRaWan概述 LoRaWAN采用星型无线拓扑 End Nodes 节点 Gateway 网关 Network Server 网络服务器 Application Server 应用服务器 LoRa联盟是2015年3月Semtech牵头成立的一个开放的、非盈利的组织,发起成员还有法国Actility,中国…

[C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体

关于C版本帧差法可以参考博客 [C]OpenCV基于帧差法的运动检测-CSDN博客https://blog.csdn.net/FL1768317420/article/details/137397811?spm1001.2014.3001.5501 我们将参考C版本转成opencvsharp版本。 帧差法,也叫做帧间差分法,这里引用百度百科上的…

C语言数据结构专题(3应用-通讯录的实现)

前言 前面的两节我们弄清了顺序表是什么?顺序表是怎么实现的?此时大家可能有疑问了:顺序表被创造出来具体有什么用呢?那么本节就给大家带来顺序表的应用--通讯录的实现,废话不多说,我们正式进入本节的学习 …

探寻马来西亚服务器托管的优势与魅力

随着全球跨境业务的不断增加,境外服务器成为越来越受欢迎的选择。在这其中,马来西亚服务器备受关注,其机房通常位于马来西亚首都吉隆坡。对于客户群体主要分布在东南亚、澳大利亚和新西兰等地区的用户来说,马来西亚服务器是一个理…

MATLAB近红外光谱分析技术应用

郁磊副教授,主要从事MATLAB编程、机器学习与数据挖掘、数据可视化和软件开发、生理系统建模与仿真、生物医学信号处理,具有丰富的实战应用经验,主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发表多篇高水…

JVM基础:类的生命周期详解

JDK版本:jdk8 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 一. 生命周期概述二. 加载阶段(Loading)2.1 加载步骤2.2 查看内存中的对象 三. 连接阶段(Linking)3.1 连接之验证3.2 连接之准备3.3 连接阶段之解析 四. 初始化阶段(Initialization)4.1 单个类的…