【Matlab算法】随机梯度下降法 (Stochastic Gradient Descent,SGD) (附MATLAB完整代码)

随机梯度下降法

  • 前言
  • 正文
  • 代码实现
    • 可运行代码
    • 结果

前言

随机梯度下降法 (Stochastic Gradient Descent,SGD) 是一种梯度下降法的变种,用于优化损失函数并更新模型参数。与传统的梯度下降法不同,SGD每次只使用一个样本来计算梯度和更新参数,而不是使用整个数据集。这种随机性使得SGD在大型数据集上更加高效,因为它在每次迭代中只需要处理一个样本。

以下是关于随机梯度下降法的详细描述:

  1. 初姶化参数:与梯度下降法类似,首先需要初始化模型的参数,通常使用随机的初始值。
  2. 选代过程:
  • 对于每个训练样本 i i i :
  • 计算损失函数关于当前参数的梯度,即 ∇ f i ( θ ) \nabla f_i(\theta) fi(θ) ,其中 f i ( θ ) f_i(\theta) fi(θ) 是针对第 i i i 个样本的损失。
  • 使用计算得到的梯度来更新模型参数: θ = θ − η ⋅ ∇ f i ( θ ) \theta=\theta-\eta \cdot \nabla f_i(\theta) θ=θηfi(θ) ,其中 η \eta η 是学习率。
  1. 重复迭代: 重复以上过程,直到达到预定的迭代次数或满足停止条件(例如梯度的范数足够小)。
    相比于传统的梯度下降法,SGD的优点包括:
  • 高效:特别适用于大型数据集,因为每次迭代只使用一个样本。
  • 在线学习: 可以用于在线学习,即在接收到新数据时立即更新模型。

然而,由于随机性的引入,SGD的参数更新可能会更加不稳定,因此学习率的选择变得尤为重要。为了解决这个问题,有一些SGD的变种,如Mini-batch SGD,它在每次迭代中使用小批量的样本来计算梯度。这样可以在保持高效性的同时减小参数更新的方差。

正文

对于给出的函数 f ( x ) f(x) f(x) :
f ( x ) = x ( 1 ) 2 + x ( 2 ) 2 − 2 ⋅ x ( 1 ) ⋅ x ( 2 ) + sin ⁡ ( x ( 1 ) ) + cos ⁡ ( x ( 2 ) ) f(x)=x(1)^2+x(2)^2-2 \cdot x(1) \cdot x(2)+\sin (x(1))+\cos (x(2)) f(x)=x(1)2+x(2)22x(1)x(2)+sin(x(1))+cos(x(2))

  1. 初始化参数: 随机选择初始参数 x x x ,通常使用某种随机的初始值。
  2. 选择学习率: 选择一个适当的学习率 η \eta η ,这是一个重要的超参数,影响着参数更新的步长。
  3. 设置迭代次数和停止条件: 确定迭代次数的上限或设置停止条件,例如当梯度的范数小于某个容许误差时停止迭代。
  4. 随机梯度下降选代:
  • 对于每次迭代 t t t ,从训练集中随机选择一个样本 i i i
  • 计算该样本的梯度: ∇ f i ( x ( t ) ) \nabla f_i\left(x^{(t)}\right) fi(x(t))
  • 使用梯度更新参数: x ( t + 1 ) = x ( t ) − η ⋅ ∇ f i ( x ( t ) ) x^{(t+1)}=x^{(t)}-\eta \cdot \nabla f_i\left(x^{(t)}\right) x(t+1)=x(t)ηfi(x(t))
  • 检查是否满足停止条件。如果满足,停止迭代;否则,继续下一次迭代。
  1. 输出结果: 输出最终的参数 x x x ,以及在最优点的目标函数值 f ( x ) f(x) f(x)

代码实现

可运行代码

% 定义目标函数
f = @(x) x(1)^2 + x(2)^2 - 2*x(1)*x(2) + sin(x(1)) + cos(x(2));% 定义目标函数的梯度
grad_f = @(x) [2*x(1) - 2*x(2) + cos(x(1)); 2*x(2) - 2*x(1) - sin(x(2))];% 设置参数
learning_rate = 0.01;
max_iterations = 1000;
tolerance = 1e-6;% 初始化起始点
x = [0; 0];% 随机梯度下降
for iteration = 1:max_iterations% 随机选择一个样本i = randi(2);% 计算梯度gradient = grad_f(x);% 更新参数x = x - learning_rate * gradient;% 检查收敛性if norm(gradient) < tolerancebreak;end
end% 显示结果
fprintf('Optimal solution: x = [%f, %f]\n', x(1), x(2));
fprintf('Optimal value of f(x): %f\n', f(x));
fprintf('Number of iterations: %d\n', iteration);

结果

在这里插入图片描述

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

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

相关文章

在极狐GitLab 上使用 DVC 实现简单机器学习

前言 之前我们已经讨论过机器学习领域的相关概念和细节&#xff08;参考公众号文章 MLOps在极狐GitLab 的现状和前瞻)&#xff0c;我们知道构建一个机器学习驱动的应用程序面临许多困难和挑战&#xff0c;比如&#xff1a;数据漂移、模型架构的变化或推理延迟等等。这些都是模…

企业u盘禁止访问如何解锁

如果您遇到了U盘禁止访问的问题&#xff0c;可能是由于系统设置、安全策略或第三方工具导致的。以下是一些可能的解锁方法&#xff0c;具体的操作可能因具体情况而异&#xff1a; 管理员权限&#xff1a; 确保您有足够的管理员权限来解锁U盘。有时&#xff0c;系统管理员或安全…

VMware Workstation Pro16安装centos7.8教程,centos7.8全程安装记录

1、创建虚拟机 2、选择操作系统安装包&#xff0c;勾选稍后再安装系统或者立即安装 3、选择客户机操作系统&#xff0c;选择linux和系统版本centos7 64位 4、命名虚拟机和选择安装位置&#xff0c;这里不建议安装在默认的系统盘c盘 5、点击下一步&#xff0c;指定磁盘大小&…

高性能3D Web轻量引擎HOOPS SDK助力制造业信息共享与协同!

工程软件开发工具包的提供者Tech Soft 3D宣布&#xff0c;Eurostep已将HOOPS Communicator和HOOPS Exchange集成到其旗舰制造协作产品ShareAspace Design to Manufacturing中&#xff0c;旨在为客户提供更多3D功能。 “我们与ShareAspace Design to Manufacturing的共同目标是…

变分自编码器【02/3】:训练过程

一、说明 欢迎来到我们的变分自编码器 (VAE) 系列三部分的第二部分。基于第 1 部分中介绍的介绍和实施细节&#xff0c;本部分将重点关注微调这些模型不可或缺的培训程序。我们将深入探讨每个参数的重要性以及它们对训练过程的贡献。要访问本系列的完整代码&#xff0c;请访问我…

Android的基础开发

基础开发 listView ListView就是列表条目&#xff0c;可以向下滚动&#xff0c;也可以点击。 首先设置两个视图布局 activity_main2.xml【充当容器{ListView}】 <ListViewandroid:layout_width"match_parent"android:layout_height"match_parent"a…

邮政快递单号查询入口,标记需要的单号记录

批量查询邮政快递单号的物流信息&#xff0c;对需要的单号记录进行标记。 所需工具&#xff1a; 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角…

生信学院|12月22日《快速产品图像渲染》

课程主题&#xff1a;快速产品图像渲染 课程时间&#xff1a;2023年12月22日 14:00-14:30 主讲人&#xff1a;陈伟 生信科技 售后服务工程师 1、SOLIDWORKS Visualize介绍 2、操作演示 3、答疑 请安装腾讯会议客户端或APP&#xff0c;微信扫描海报中的二维码报名哦~~~ 或…

基于SSM的视康眼镜网店销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

PyQt6 QFontDialog字体对话框控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法

slavahead 一、介绍 BERT模型的出现BERT模型带来了NLP的重大进展。 BERT 的架构源自 Transformer&#xff0c;它在各种下游任务上取得了最先进的结果&#xff1a;语言建模、下一句预测、问答、NER标记等。 尽管 BERT 性能出色&#xff0c;研究人员仍在继续尝试其配置&#xff0…

【MySQL】Sql优化之索引的使用方式(145)

索引分类 1.单值索引 单的意思就是单列的值&#xff0c;比如说有一张数据库表&#xff0c;表内有三个字段&#xff0c;分别是 id name numberNo&#xff0c;我给name 这个字段加一个索引&#xff0c;这就是单值索引&#xff0c;因为只有name 这一列是索引&#xff1b; 一个表…