【深度学习】03-神经网络3-1梯度下降网络优化方法

news2024/11/16 22:49:34

每一条线是一个权重,每个神经元由一个加权和还有一个 激活函数组成。每一层可以理解是一个函数,最终形成一个复合函数,因此求梯度的时候,是一层一层的求解,所以叫做反向传播。

  

只会考虑当前数据之前的数据,之后的数据就不考虑了。

import torch
import matplotlib.pyplot as plt
ELEMENT_NUMBER = 30
# 1. 实际平均温度 def test01():
# 固定随机数种子
torch.manual_seed(0)
# 产生30天的随机温度
temperature = torch.randn(size=[ELEMENT_NUMBER,]) * 10 
print(temperature)
# 绘制平均温度
days = torch.arange(1, ELEMENT_NUMBER + 1, 1) 
plt.plot(days, temperature, color='r') 
plt.scatter(days, temperature)
plt.show()

# 2. 指数加权平均温度 def test02(beta=0.9):
torch.manual_seed(0) # 固定随机数种子
temperature = torch.randn(size=[ELEMENT_NUMBER,]) * 10 # 产生30天的随机温度
exp_weight_avg = []
for idx, temp in enumerate(temperature, 1): # 从下标1开始
    # 第一个元素的的 EWA 值等于自身 if idx == 1:
    exp_weight_avg.append(temp)
    continue
    # 第二个元素的 EWA 值等于上一个 EWA 乘以 β + 当前气温乘以 (1-β) new_temp = exp_weight_avg[idx - 2] * beta + (1 - beta) * temp exp_weight_avg.append(new_temp)
    days = torch.arange(1, ELEMENT_NUMBER + 1, 1) 
plt.plot(days, exp_weight_avg, color='r') 
plt.scatter(days, temperature)
plt.show()

什么是指数加权平均?

指数加权平均(Exponentially Weighted Moving Average, EWMA)是一种对时间序列数据进行平滑的技术,强调新数据的重要性,同时不完全忽略旧数据。它在时间序列分析中常用于减少数据中的短期波动,突出长期趋势。

指数加权平均背后的思想是,对数据的权重按指数衰减,越新的数据权重越大,越老的数据权重越小。相比简单的移动平均,指数加权平均能够更快响应新的数据变化,同时保留历史数据的信息。

背景

在数据分析或时间序列处理时,经常遇到噪声或短期波动的问题。为了避免这些问题干扰对趋势的判断,平滑技术(如移动平均)被广泛应用。传统的简单移动平均法对所有时间点的数据赋予相同的权重,而这并不总是合理的,因为新数据可能比旧数据更重要。因此,指数加权平均诞生了,它通过加权的方法,赋予新数据更大的权重,从而更准确地捕捉趋势。

作用

  1. 平滑数据:通过减少噪声和短期波动,帮助观察数据的长期趋势。

  2. 预测趋势:常用于金融市场和物理系统中的趋势预测,比如股票价格的预测。

  3. 动态信号处理:适用于信号处理、数据流分析等场景,尤其是需要快速响应新数据的场合。

  4. 机器学习优化:在优化算法中,如动量梯度下降算法(Momentum SGD),指数加权平均用来平滑梯度的变化,防止过度振荡。

计算过程

指数加权平均的核心公式为:[ S_t = \beta S_{t-1} + (1 - \beta) x_t ]

其中:

  • ( S_t ) 是第 ( t ) 时刻的指数加权平均值。

  • ( S_{t-1} ) 是上一时刻的指数加权平均值。

  • ( x_t ) 是第 ( t ) 时刻的原始数据值。

  • ( \beta ) 是平滑参数,范围在 ( [0, 1] ) 之间。它决定了新数据与旧数据的权重比重。

参数解释:
  • ( \beta) 越大,历史数据的权重越高,平滑效果越强,响应新数据的速度越慢。相当于对过去的变化保留更多信息。

  • ( \beta ) 越小,新数据的权重越高,平滑效果越弱,但能更快反映当前数据的变化。

初始值:
  • 通常,指数加权平均的初始值可以取为第一个数据点,即 ( S_0 = x_0 ),从而保证整个序列有一个合理的初始平滑值。

示例代码讲解:
S= []
beta=.9
for idx,temp in enumerate(data):
 if idx==0:
   S.append(temp) # 初始化第一个平滑值
   continue
 # 使用公式 S_t = beta * S_{t-1} + (1 - beta) * x_t
 S.append(beta*S[idx-1]+(1-beta)*temp)

plt.plot(range(30),S) # 绘制平滑后的曲线
plt.scatter(range(len(data)),data) # 绘制原始数据点
plt.grid()
plt.show()

​​​​​​​

  • data 是你的原始时间序列数据。

  • beta = 0.9 意味着历史数据占比 90%,而新数据占比 10%。

  • 初始时,平滑值是 S.append(temp),即第一个数据点作为起始点。

  • 接下来,每一个新时刻的平滑值 ( S_t ) 都是依据上一时刻的平滑值和当前时刻的数据按加权公式计算出来的。

指数加权平均的逐步演变:
  1. 初始时刻:直接取第一个数据点作为平滑值。

  2. 后续时刻:当前的平滑值由上一时刻的平滑值和当前数据按加权比例决定。

    • 例如,假设 ( \beta = 0.9 ),每次新数据 ( x_t) 的影响是 10%,上一时刻的影响是 90%。

举例:

假设有以下数据序列:

data = [2, 4, 6, 8, 10]

如果我们使用 ( \beta = 0.9 ) 来计算指数加权平均,初始时:

  • ( S_0 = 2 )

  • ( S_1 = 0.9 \times 2 + 0.1 \times 4 = 2.2 )

  • ( S_2 = 0.9 \times 2.2 + 0.1 \times 6 = 2.58 )

  • ( S_3 = 0.9 \times 2.58 + 0.1 \times 8 = 3.122 )

如此类推,可以看到每个时刻的平滑值。

小结

指数加权平均通过赋予新数据更多权重,有效解决了传统简单移动平均中对新数据反应不敏感的问题。它广泛应用于时间序列分析、金融市场预测、信号处理和机器学习优化中。

不要使用 pytorch 中的,adam ,因为有问题。可以调用其他的包。

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

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

相关文章

潮玩宇宙大逃杀宝石游戏搭建开发

潮玩宇宙大逃杀的开发主要涉及以下方面: 1. 游戏概念和设计: 核心概念定义:确定以潮玩为主题的宇宙背景、游戏的基本规则和目标。例如,玩家在宇宙场景中参与大逃杀竞技,目标是成为最后存活的玩家。 玩法模式设计&a…

k8s上安装prometheus

一、下载对应的kube-prometheus源码 github地址:GitHub - prometheus-operator/kube-prometheus: Use Prometheus to monitor Kubernetes and applications running on Kubernetes 1)进入目录 [rootk8s-master ~]# cd kube-prometheus [rootk8s-master…

商城小程序源码搭建部署,商城购物小程序开发流程(php框架)

关于商城小程序 商城小程序作为一种基于移动互联网的在线购物平台,商家可以上架所销售的产品,定价,以及营运营的在线售货平台。买家无需下载应用,在小程序搜索打开即可浏览下单商品。 技术栈 前端: vue uniapp 后端&#xff1a…

嵌入式Linux学习笔记(7)-Socket网络编程

一、什么是Socket网络编程 Socket是一种抽象的编程接口,可以用于在不同主机之间进行数据通信。Socket API提供了一系列函数来创建、连接、发送和接收数据等操作。嵌入式 Linux 系统中的 Socket 网络编程是指在嵌入式系统中使用 Socket API 进行网络通信。 Socket 网…

HTTP协议1.1请求头和keep-alive

请求头分类 End-to-end(端对端) 必须全部带给目标服务器,不会被中途变化或去掉 Hop-by-hop(逐跳头) 比如客户端发请求,要路过代理(例如Nginx),头可以被自动删掉,来到真正服务器上…

vue/配置axios(前后端数据连通/api接口的调用)

1.创建apis文件 2.写入调用的api地址且暴露出去。 import httpInstance from /utils/http;export function getHomeNav() {return httpInstance({url: http://10.0.11.91:91/dailyreport/getdailyreportall,}) }3.创建文件编写拦截器 代码部分 //axios基础封装 import axio…

Thinkphp5x远程命令执行 靶场攻略

环境配置 靶场:vulhub/thinkphp/5-rce docker-compose up -d #启动环境 漏洞复现 1.访问靶场:http://172.16.1.198:8080/ 2.远程命令执⾏ POC: ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system…

Bytebase 2.23.0 - 支持 Entra (Azure AD) 用户/组同步

🚀 新功能 支持从 Entra ID(前 Azure AD)同步用户和群组。 支持 CockroachDB。 支持项目级别的默认备份设置,包含自动启用和跳过错误选项。 SQL 编辑器支持实时语法检查。 支持配置密码限制策略。 🔔 重大变更 分类…

初试AngularJS前端框架

文章目录 一、框架概述二、实例演示(一)创建网页(二)编写代码(三)浏览网页(四)运行结果 三、实战小结 一、框架概述 AngularJS 是一个由 Google 维护的开源前端 JavaScript 框架&am…

输电线塔目标检测数据集yolo格式该数据集包括2644张输电线塔高清图像,该数据集已经过yolo格式标注,具有完整的txt标注文件和yaml配置文件。

输电线塔目标检测数据集yolo格式 该数据集包括2644张输电线塔高清图像,该数据集已经过yolo格式标注,具有完整的txt标注文件和yaml配置文件。 输电线塔目标检测数据集 数据集名称 输电线塔目标检测数据集(Transmission Tower Object Detecti…

从视觉到现实:掌握计算机视觉技术学习路线的十大步骤

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于【计算机视…

【第十五章:Sentosa_DSML社区版-机器学习之关联规则】

目录 15.1 频繁模式增长 15.2 PrefixSpan 【第十五章:Sentosa_DSML社区版-机器学习之关联规则】 机器学习关联规则是一种用于发现数据集中项之间有趣关系的方法。它基于统计和概率理论,通过分析大量数据来识别项之间的频繁共现模式。 15.1 频繁模式增…

Linux-DHCP服务器搭建

环境 服务端:192.168.85.136 客户端:192.168.85.138 1. DHCP工作原理 DHCP动态分配IP地址。 2. DHCP服务器安装 2.1前提准备 # systemctl disable --now firewalld // 关闭firewalld自启动 # setenforce 0 # vim /etc/selinux/config SELINU…

学生管理系统模块化编程

项目介绍:Java基础mysql的一个简单练习 一.数据库 二.项目结构 lib下的jar包下载地址:Maven Repository: mysql mysql-connector-java (mvnrepository.com) 1.db.properties drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/student?u…

【Unity3d Shader】毛玻璃效果

毛玻璃也叫​磨砂玻璃​:是用物理或化学方法处理过的一种表面粗糙不平整的半透明玻璃。 毛玻璃成像原理:毛玻璃表面不平整,光线通过毛玻璃被反射后向四面八方射出去(因为毛玻璃表面不是光滑的平面,使光产生了漫反射),折射到视网膜上已经是不完整的像,于是就看不清楚(…

基于OpenCV的单目测距

随着计算机视觉技术的发展,单目测距作为一种重要的视觉测量手段,在众多领域得到了广泛的应用。本文将探讨基于OpenCV的单目测距原理、局限性、实际应用场景以及一些优化方案。 单目测距的原理 单目测距是指利用一台摄像机拍摄到的单一图像来进行距离测量…

2016年国赛高教杯数学建模D题风电场运行状况分析及优化解题全过程文档及程序

2016年国赛高教杯数学建模 D题风电场运行状况分析及优化 风能是一种最具活力的可再生能源,风力发电是风能最主要的应用形式。我国某风电场已先后进行了一、二期建设,现有风机124台,总装机容量约20万千瓦。请建立数学模型,解决以下…

【Python报错已解决】ValueError: cannot convert float NaN to integer

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

网页设计html心得

一,认识网页 说到网页,其实大家并不陌生 1.1网页究竟是什么? 网页主要由文字、图像和超链接等元素构成。当然,除了这些元素,网页中还可以包含音频、视频以及Flash等。 1.2网页是如何形成的呢? 1.特殊的…

C++读取txt文件中的句子在终端显示,同时操控鼠标滚轮(涉及:多线程,产生随机数,文件操作等)

文章目录 运行效果功能描述代码mian.cppincludeMouseKeyControl.hTipsManagement.h srcMouseControl.cppTipsManagement.cpp 运行效果 功能描述 线程一:每隔n随机秒,动一下鼠标滚轮,防止屏幕息屏。 线程二:运行时加载txt文件中的…