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

目录

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 pltdef 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.1epochs = 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.mzph.cn/diannao/34337.shtml

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

相关文章

Docker镜像仓库:存储与分发Docker镜像的中央仓库

探索Docker镜像仓库:存储与分发Docker镜像的中央仓库 如果你是Docker的新手,或者已经在使用Docker但还不太了解Docker镜像仓库,那么这篇博客将是你的最佳指南。我们将从基础概念开始,逐步深入,帮助你全面掌握Docker注…

JS中的三种事件模型

JavaScript 中的事件模型主要有三种: 传统事件模型(DOM Level 0)标准事件模型(DOM Level 2)IE 事件模型(非标准,仅限于旧版本的 Internet Explorer) 下面分别介绍这三种事件模型&…

【JavaScript 小工具】——获取 URL 中的参数

要从 location.href 中获取指定参数,你可以使用 JavaScript 来解析 URL 并提取参数值。以下是一种常见的方法: // 获取当前页面的 URL var urlString window.location.href;// 解析 URL,获取参数部分 var url new URL(urlString);// 获取参…

C#写一个WebService服务器

首先在NuGet中下载Fleck动态库 创建一个WebSocketHelper类 public class WebSocketHelper {//客户端url以及其对应的Socket对象字典IDictionary<string, IWebSocketConnection> dic_Sockets new Dictionary<string, IWebSocketConnection>();//创建一个 websock…

软件测试计划审核表、试运行审核、试运行申请表、开工申请表

1、系统测试计划审核表 2、系统试运行审核表 3、系统试运行申请表 4、开工申请表 5、开工令 6、项目经理授权书 软件全套资料获取&#xff1a;本文末个人名片直接获取或者进主页。 系统测试计划审核表 系统试运行审核表 系统试运行申请表 开工申请表 开工令 项目经理授权书

青否数字人实时直播带货手机版发布!

青否数字人6大核心 AIGC 技术&#xff0c;让新手小白也能轻松搞定数字人在全平台的稳定直播&#xff0c;并有效规避违规风险&#xff0c;赋能商家开播即赚钱&#xff01; AI主播 只需要录制主播1分钟的绿幕视频&#xff0c;1秒钟就能克隆出一个数字人主播形象。S级真人深度学习…

快速鲁棒的 ICP (Fast and Robust Iterative Closest Point)

迭代最近点&#xff08;Iterative Closet Point&#xff0c;ICP&#xff09;算法及其变体是两个点集之间刚性配准的基本技术&#xff0c;在机器人技术和三维重建等领域有着广泛的应用。ICP的主要缺点是&#xff1a;收敛速度慢&#xff0c;以及对异常值、缺失数据和部分重叠的敏…

未来已来!GPT-5震撼登场,工作与生活面临新变革!

随着科技界领袖对AI系统发展之快的惊叹&#xff0c;新一代大语言模型GPT-5即将登场&#xff0c;引发了我们对工作和日常生活的新一轮思考。微软CTO Kevin Scott和阿里巴巴董事长蔡崇信等人的言论为我们描绘了一幅生动的未来图景&#xff0c;即AI将在我们的生活中扮演越来越重要…

力扣刷题总结 -- 数组28

82. 无法吃午餐的学生数量&#xff08;简单&#xff09; 题目要求&#xff1a; 学校的自助午餐提供圆形和方形的三明治&#xff0c;分别用数字 0 和 1 表示。所有学生站在一个队列里&#xff0c;每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。…

el-form-item的label设置两端对齐

<style scoped> ::v-deep .el-form-item__label {display: inline;text-align-last: justify; } </style>效果如图所示

数据分析必备:一步步教你如何用matplotlib做数据可视化(11)

1、Matplotlib 三维绘图 尽管Matplotlib最初设计时只考虑了二维绘图&#xff0c;但是在后来的版本中&#xff0c;Matplotlib的二维显示器上构建了一些三维绘图实用程序&#xff0c;以提供一组三维数据可视化工具。通过导入Matplotlib包中包含的mplot3d工具包&#xff0c;可以启…

双 μC 的 PWM 频率和分辨率

该方法是过滤 PWM 信号的 HF 分量&#xff0c;只留下与占空比成正比的 LF 或 DC 分量。然而&#xff0c;低通滤波器并不能完全滤除PWM频率&#xff0c;因此LF/DC信号一般会有一些纹波。 有两种方法可以降低 PWM DAC 的纹波。可以降低低通滤波器的截止频率&#xff0c;或者提高…

数据结构-顺序表的插入排序

顺序表的排序可以看作数组排序的拓展。基本逻辑和数组排序的逻辑大同小异。 由于顺序表中可以存放不同种的数据类型&#xff0c;进而和结构体排序又有相似之处。其中要注意的是&#xff08;->&#xff09;和&#xff08;.&#xff09;的区别。 -> 符号是针对指针进行的操…

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

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

明白这6个阶段,让你开启从普通员工到管理岗的进阶之路

面对职场的晋升通道&#xff0c;转型管理岗是很多普通职场人实现职业转型的一个可选项。然而&#xff0c;这条道路并非一蹴而就&#xff0c;而是需要经过一系列的阶段和努力&#xff0c;明白这些阶段将有助于职场人顺利走上管理岗位。 一、自我管理阶段。在这一阶段&#xff0…

中文域名费用是多少?

随着互联网的全球化和本地化趋势&#xff0c;中文域名作为文化多样性的体现&#xff0c;越来越受到企业和个人的欢迎。中文域名不仅便于中国用户的记忆和输入&#xff0c;而且也有助于提升品牌的本地化形象。本文将深入探讨中文域名的费用构成&#xff0c;以及在购买中文域名时…

设计软件有哪些?贴图插件篇(2),渲染100邀请码1a12

这次我们继续介绍一些贴图插件。 1、Texporter Texporter是3ds Max的一个插件&#xff0c;用于快速导出贴图。它允许用户一次性导出多个贴图通道&#xff0c;如漫反射、法线、置换等&#xff0c;以各种格式&#xff0c;如TGA、BMP、JPEG等。Texporter提供了简单易用的界面和灵…

react-native在IOS上集成百度地图详解

export default class BaiDuMapTest extends Component { render() { return ( ); } } const styles StyleSheet.create({ container: { flex: 1, justifyContent: ‘center’, alignItems: ‘center’, backgroundColor: ‘#F5FCFF’, }, welcome: { fontSize:…

告别手动邮件处理:使用imbox库轻松管理你的收件箱

imbox库简介&#xff1a; imbox是一个强大的Python库,专为与IMAP服务器交互而设计.IMAP&#xff08;Internet Message Access Protocol&#xff09;是一种用于电子邮件的标准协议,允许用户在远程服务器上管理邮件.imbox库通过IMAP协议与邮件服务器通信,帮助用户轻松地读取、搜索…