当前位置: 首页 > news >正文

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

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

  

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

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_tS.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 ,因为有问题。可以调用其他的包。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在Java中 String能存储多少个字符?
  • 前端——表单标签样式
  • 使用Python实现图形学曲线和曲面的B样条曲线算法
  • 通过 Xshell 无法连接到 Ubuntu
  • 计算机二级C语言练习题
  • 【AI写代码】使用 ChatGPT 写 ila
  • 【Oauth2整合gateway网关实现微服务单点登录】
  • pycharm恢复两边侧边栏常驻显示
  • 【QML 基础】QML ——描述性脚本语言,用于用户界面的编写
  • [深度学习]Pytorch框架
  • Windows11系统安装,配置CUDA、cuDNN等
  • 力扣206.反转链表
  • 【既约分数 / B】
  • 虚拟摄像头抓屏
  • Go语言中的Mutex实现探讨
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 「译」Node.js Streams 基础
  • 【前端学习】-粗谈选择器
  • ES6 学习笔记(一)let,const和解构赋值
  • ES学习笔记(12)--Symbol
  • github指令
  • Java读取Properties文件的六种方法
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • nodejs实现webservice问题总结
  • PHP的类修饰符与访问修饰符
  • React的组件模式
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • uni-app项目数字滚动
  • 创建一个Struts2项目maven 方式
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 人脸识别最新开发经验demo
  • 使用Swoole加速Laravel(正式环境中)
  • -- 数据结构 顺序表 --Java
  • 微服务核心架构梳理
  • 函数计算新功能-----支持C#函数
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #etcd#安装时出错
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (bean配置类的注解开发)学习Spring的第十三天
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (十六)视图变换 正交投影 透视投影
  • (五)activiti-modeler 编辑器初步优化
  • (一)80c52学习之旅-起始篇
  • (一)Java算法:二分查找
  • (转)创业家杂志:UCWEB天使第一步
  • *1 计算机基础和操作系统基础及几大协议
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net反编译工具
  • @Async注解的坑,小心