【从零开始认识AI】梯度下降法

news2024/12/27 13:01:29

目录

1. 原理介绍

2. 代码实现


1. 原理介绍

梯度下降法(Gradient Descent)是一种用于优化函数的迭代算法,广泛应用于机器学习和深度学习中,用来最小化一个目标函数。该目标函数通常代表模型误差或损失。

基本思想是从一个初始点出发,通过不断沿着目标函数的负梯度方向更新参数,逐步逼近函数的局部最小值(或者全局最小值)。梯度是目标函数相对于参数的导数,因此,负梯度方向是函数值下降最快的方向。

具体步骤如下:

1. **初始化参数**:随机选择模型初始参数 \( \theta_0 \)。

2. **计算梯度**:计算目标函数关于当前参数的梯度 \( \nabla J(\theta) \),这里 \( J(\theta) \) 是目标函数。

3. **更新参数**:根据梯度和学习率 \( \alpha \) 更新参数:

\[

\theta := \theta - \alpha \nabla J(\theta)

\]

其中,学习率 \( \alpha \) 是一个预先设置的超参数,决定了每一步更新的大小。

4. **重复**:重复步骤 2 和 3 直到收敛,即参数不再发生显著变化或者达到预设的迭代次数。

  • 变种

梯度下降法有几种常见变种:

1. **批量梯度下降(Batch Gradient Descent)**:每一步更新使用整个训练数据集计算梯度。这对于大规模数据集可能会非常耗时。

2. **随机梯度下降(Stochastic Gradient Descent, SGD)**:每一步更新使用单个样本计算梯度,通过不断地用单个样本更新,效率较高但引入了较大的波动。

3. **小批量梯度下降(Mini-batch Gradient Descent)**:每一步更新使用一个小批量的样本来计算梯度,结合了批量梯度下降和随机梯度下降的优点。

  • 优化

为了提高梯度下降的效率和效果,可以结合一些优化方法,如:

- **动量法**:在每一步更新中添加动量,帮助跳出局部最小值。

- **AdaGrad**、**RMSprop**、**Adam**:这些算法通过自适应调整学习率,以适应不同参数和不同迭代阶段。

梯度下降法是机器学习和深度学习中的关键技术之一,通过梯度下降可以有效地训练模型并优化目标函数。

2. 代码实现

以下用梯度下降法求解函数的最小值:

import numpy as np
import matplotlib.pyplot as plt


def f(x):
    return x ** 2 + 5 * np.sin(x)


def df(x):
    return 2 * x + 5 * np.cos(x)


# initialize parameter and learning rate
x = 4
lr = 0.1

epochs = 1000
history = [x]
for _ in range(epochs):
    x = x - lr * df(x)
    history.append(x)
    

xs = np.linspace(-5, 5, 200)
ys = f(xs)

plt.plot(xs, ys, label="f(x)")
plt.xlabel("x")
plt.ylabel("f(x)")

plt.scatter(history, f(np.array(history)), c="g", alpha=0.5, label="Gradient Descent Point")
plt.scatter(history[-1], f(history[-1]), c="r", label="Minimal Point")
plt.legend()

plt.show()

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

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

相关文章

多路h265监控录放开发-(14)

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

「动态规划」如何求最长摆动子序列的长度?

376. 摆动序列https://leetcode.cn/problems/wiggle-subsequence/description/ 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也…

【鸿蒙】ArkTS语言

HarmonyOS 应⽤的主要开发语⾔是 ArkTS&#xff0c;它由 TypeScript&#xff08;简称TS&#xff09;扩展⽽来&#xff0c;在继承 TypeScript语法的基础上进⾏了⼀系列优化&#xff0c;使开发者能够以更简洁、更⾃然的⽅式开发应⽤。 值得注意的是&#xff0c;TypeScript 本身也…

练习实践:ubuntu18.04安装、配置Nginx+PHP环境,两种配置方式,多站点

参考来源&#xff1a; https://help.aliyun.com/document_detail/464753.html https://www.cnblogs.com/laosan007/p/12803287.html https://blog.csdn.net/qq_55364077/article/details/132207083 【安装同版本7.2的php】 需要知道对应php和nginx的安装版本 需要安装php-fpm…

持续增强国产适配 | 宁盾身份域管与南大通用、飞腾完成产品兼容性认证

随着党政、央国企、金融信创国产化改造日益深入&#xff0c;企业对国产 IT 基础设施生态兼容适配的需求日益迫切。为践行给企业提供“开箱即用”的交付体验承诺&#xff0c;宁盾身份域管持续增强多元异构产品的兼容适配。近日&#xff0c;宁盾身份域管与天津南大通用数据技术股…

基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

我的大学生活-人面桃花相映红(大二篇)

我的大学生活&#xff08;大二篇&#xff09; 前言推荐大二&#xff08;人面桃花相映红&#xff09;2021年9月2021年10月2021年11月2021年12月2022年1月 寒假2022年2月学习Java框架 大二&#xff08;人面桃花相映红&#xff09;2022年3月2022年4月2022年5月2022年6月 暑假2022年…

【启明智显分享】HMI方案核心板选型攻略

随着全球智能制造的浪潮汹涌而来&#xff0c;人机界面&#xff08;HMI&#xff09;作为连接人与机器的关键桥梁&#xff0c;在自动化领域中正扮演着日益重要的角色。HMI不仅为操作者提供了直观、便捷的交互方式&#xff0c;还通过集成多种功能&#xff0c;实现了机器运行的高效…

Pycharm主题切换(禁用)导致UI界面显示异常解决

安装其他主题 Material Theme UI One Dark theme One Dark theme安装 (Material Theme UI主题同理) Pycharm 打开 Settings > Plugins&#xff0c;搜索One Dark theme 安装即可 One Dark theme 效果显示 问题记录 UI显示异常 安装多个主题时&#xff0c;当禁用某些主题&…

Linux--V4L2应用程序开发(一)数据采集及问题

一、V4L2介绍 Video for Linux two(Video4Linux2)简称V4L2&#xff0c;是V4L的改进版。&#xff08;Video4Linux2&#xff09;是 Linux 内核中用于捕获视频数据的框架和 API。 它提供了一套标准化的接口&#xff0c;方便开发者与各种视频硬件设备进行交互&#xff0c;并支持丰…

C语言入门课程学习笔记10:结构体联合体位域

C语言入门课程学习笔记10 第48课 - 自定义数据类型&#xff08;上&#xff09;实验-typedef实验小结 第49课 - 自定义数据类型&#xff08;中&#xff09;实验实验小结 第50课 - 自定义数据类型&#xff08;下&#xff09;实验实验小结 第51课 - 多文件程序设计实验实验实验小结…

.net core接入nacos注册服务并使用配置中心

1、安装依赖 Nuget包&#xff1a;nacos-sdk-csharp.Extensions.Configuration和nacos-sdk-csharp.AspNetCore 2、在appsettings.json中配置 "nacos": {"ServerAddresses": ["http://localhost:8848/"],"DefaultTimeOut": 15000,"…

算法课程笔记——点积叉积

算法课程笔记——点积叉积

css实现鼠标悬停在div上出现抬起元素的效果

如图所示&#xff0c;左侧为正常样式&#xff0c;右侧为添加效果后的样式 只需要给div添加以下class样式&#xff0c;主要实现效果在&:hover里面 .component-item {display: flex;align-items: center;width: 50px;height: 50px;border: 1px solid #f0f0f0;border-radius…

昇思25天学习打卡营第1天|认识MindSpore

MindSpore 基本介绍 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 易开发&#xff1a;API友好、调试难度低高效执行&#xff1a;包括计算效率、数据预处理效率和分布式训练效率全场景&#xff1a;框架同时支持云、…

海外注册 | 一分钟看懂英国医疗器械注册

英国医疗器械市场因其独特的地域划分而与其他国家有所不同。分为大不列颠市场&#xff08;包括&#xff1a;英格兰、苏格兰和威尔士&#xff09;和北爱尔兰市场&#xff0c;它们在法规要求上存在细微差别。 以下是针对这两个市场的基本要求概览&#xff1a; 监管机构&#xf…

超越招聘技术人才目标的最佳技术招聘统计数据

研究发现&#xff0c;难以找到的人才比以往任何时候都更难找到&#xff1a;根据新人才委员会招聘调查报告&#xff1a;2024年难以找到的人才的战略和战略&#xff0c;60%的受访者表示&#xff0c;熟练人才的招聘时间比一年前长。调查进一步揭示了以下关于招聘技术的关键事实&am…

行业原型:智能资产管理平台-个人资产服务

​行业原型预览链接&#xff1a;&#xff08;请与班主任联系获取原型文档&#xff09; 文件类型&#xff1a;.rp 支持版本&#xff1a;Axrure RP 8 文档名称&#xff1a;金融&#xff1a;智能资产管理平台&#xff08;个人资产服务&#xff09; 文件大小&#xff1a;1.75 MB 智…

Origin较好用的科研绘图软件

推荐自己也在用的科研绘图软件Origin图所示&#xff1a; 图1 图2 图3

【Sa-Token|4】Sa-Token微服务项目应用

若微服务数量多&#xff0c;如果每个服务都改动&#xff0c;工作量大&#xff0c;则可以只在网关和用户中心进行改动&#xff0c;也是可以实现服务之间的跳转。 这种方式可以通过在网关服务中生成和验证 Sa-Token&#xff0c;并将其与现有的 Token关联存储在 Redis 中。用户中心…