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

news2024/9/25 23:17:21

随机梯度下降法

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

前言

随机梯度下降法 (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) < tolerance
        break;
    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.coloradmin.cn/o/1324022.html

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

相关文章

Nginx主配置文件详解【笔记】

1 Nginx配置文件目录结构 最近使用Nginx做负载均衡&#xff0c;顺便整理Nginx配置文件笔记如下所述&#xff0c;本文主要梳理主配置文件各属性的作用。使用yum安装好Nginx后&#xff0c;可以在默认路径&#xff08;/etc/nginx&#xff09;看到如下配置文件。 /etc/nginx/ ├─…

layui 树组件tree 通过API获取数据

一、简单 var treedata[];tree.render({elem: #addLeftType,id: demoId,data: treedata,showCheckbox: true,oncheck: function(obj){console.log(obj.data); // 得到当前点击的节点数据console.log(obj.checked); // 节点是否被选中console.log(obj.elem); // 得到当前节点元素…

diffusers-Inpainting

原文链接&#xff1a;添加链接描述 白色mask区域仅使用生成出来的&#xff0c;非白色mask区域使用原始影像&#xff0c;但是图像有点不平滑 import PIL import numpy as np import torchfrom diffusers import AutoPipelineForInpainting from diffusers.utils i…

一文为您解决:Ozon服装尺码表怎么上?Ozon富文本图片怎么处理等产品优化问题

近日&#xff0c;不少Ozon卖家反馈在编辑产品时遇到&#xff1a;中俄服装/鞋类尺码不匹配、富文本文案及图片编辑较繁琐、详描图片质量不佳、富文本图片上传效率慢等问题。 针对以上问题&#xff0c;妙手ERP在Ozon采集箱及在线产品的产品编辑模块优化了以下功能&#xff0c;全…

了解C++工作机制

基于hello.cpp对C的运行进行一个初步认识&#xff0c;并介绍国外C大佬Cherno常用的项目结构和调试Tips C是如何工作的 C工作流程1.实用工程&#xff08;project&#xff09;结构&#xff08;1&#xff09;Microsoft Visual Studio2022新建项目后&#xff0c;自动生成的原始文件…

【机器学习】密度聚类:从底层手写实现DBSCAN

【机器学习】Building-DBSCAN-from-Scratch 概念代码数据导入实现DBSCAN使用样例及其可视化 补充资料 概念 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算…

脉冲水表计量方法有哪些?

随着社会的发展和人们对资源的需求不断增长&#xff0c;水资源的有效利用显得尤为重要。而水表作为测量家庭和工业用水的关键设备&#xff0c;其准确性和稳定性对于水资源管理至关重要。本文将重点介绍水表脉冲数计量方法&#xff0c;以帮助读者更好地理解和应用水资源。 一、机…

Magnific AI:彻底改变 AI 生成图像的升级

在我最近与 Magnific AI 的讨论中&#xff0c;我不仅感到惊讶&#xff0c;而且对该工具提供的质量和可能性着迷。我发现 Magnific AI 能够转换人工智能生成的图像&#xff08;这些图像通常只能以低分辨率提供&#xff09;&#xff0c;尤其令人印象深刻&#xff0c;不仅在可打印…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别&#xff1a; 1.sobol计算依赖于验证集样本&#xff0c;无需定义变量上下限。 2.SW-ELM自带激活函数&#xff0c;计算具有phi&#xff08;x&#xff09;e^x激…

Kafka基本原理及使用

目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic&#xff08;主题&#xff09;&#xff1a; 2. Partition&#xff08;分区&#xff09;&#xff1a; 3. Producer&#xff08;生产者&#xff09;&#xff1a; 4. Consumer&#xff08;…

多任务学习(Multi-task Learning)的详细过程和具体示例

多任务学习 1.多任务学习的基本思想2. 多任务学习的过程包括:3. 多任务学习的具体例子: 1.多任务学习的基本思想 多任务学习(Multi-task Learning)是一种机器学习的方法,它可以同时解决多个相关任务。 多任务学习的基本思想是:多个任务之间存在一定的相关性或公共特征,我们可…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中&#xff0c;我们⼀般谈的⽂件有两种&#xff1a; 程序⽂件、数据⽂件 &#xff08;从⽂件功能的⻆度来分类 的&#xff09;。 程序⽂件 &#xff1a; 程序⽂件包括源 程序⽂件&#xff08;后缀为.c&#xff09; , ⽬标⽂件&#xff0…

虚幻学习笔记16—C++和3DUI(二)

一、前言 上一篇虚幻学习笔记15—C和UI&#xff08;一&#xff09;中介绍了通过C代码创建2D的ui&#xff0c;本章主要讲解怎么用C代码创建3D的UI&#xff0c;在虚幻学习笔记3—UI跟随弹窗这章中讲解了怎样用蓝图创建一个3D的UI&#xff0c;并且和其交互。 本系列使用的虚幻5.2.…

Hive参数操作和运行方式

Hive参数操作和运行方式 1、Hive参数操作 1、hive参数介绍 ​ hive当中的参数、变量都是以命名空间开头的&#xff0c;详情如下表所示&#xff1a; 命名空间读写权限含义hiveconf可读写hive-site.xml当中的各配置变量例&#xff1a;hive --hiveconf hive.cli.print.headert…

abpvnext框架的项目部署到linux arm64版的docker中

参考&#xff1a; windows10下安装的docker 导出镜像到另一个电脑_docker镜像拷贝另一台机器的镜像-CSDN博客 前提条件&#xff1a; 1、vs2022&#xff0c;我的电脑本机安装有windows版docker desktop 。 2、linux中已经安装好docker&#xff0c;安装了sftp。这部分可以自行…

vue proxy代理 和 Nginx 配置跨域

vue.config.js文件中配置的代理&#xff1a; devServer: {port: 9095,// open: true, // 配置项目在启动时自动在浏览器打开proxy: {/yh: { // /api是代理标识&#xff0c;一般是每个接口前的相同部分target: "http://192.168.5.58:8002", // 请求地址&#xff0c;一…

2023年12月GESP认证Scratch图形化等级考试(四级)真题试卷

2023年12月GESP认证Scratch图形化等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;27 总分数&#xff1a;100 选择题 第 1 题 单选题 现代计算机是指电子计算机&#xff0c;它所基于的是&#xff08; &#xff09;体系结构 A. 艾伦图灵 B. …

Kafka为什么能高效读写数据

1&#xff09;Kafka 本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高&#xff08;生产消费方并行度高&#xff09;&#xff1b; 2&#xff09;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff1b; 3&#xff09;顺序写磁盘&#xff1b; …

vue3项目引入电子签名(可横屏竖屏)

实现效果&#xff1a;&#xff08;左边横屏&#xff0c;右边竖屏&#xff09; 前言&#xff1a;【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 &#xff1a;GitHub - linjc/smooth-signature: H5带笔锋手写签名&#xff0c;支持PC端和移动端&#xff0c;任何前…

局域网其他pc如何访问宿主机虚拟机IP?

文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试 背景 使用贝瑞蒲公英异地组网&#xff0c;将家里的pc作为pgsql服务器在公司使用&#xff0c;但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 公网内其他pc连接测试 可以看到已经连接成…