加权平均:
我们常用的算术平均属于加权平均的特殊形式,只不过算术平均各项权重都相等。
加权滑动平均:
原理与加权平均类似,但重点在“滑动”一词,即该平均过程就好似从第一个值依次向后滑动,直到滑动到最后一个值,言外之意就是,第n个值取决于第n-1个值。

滑动平均递推公式:

一般设 v 0 v_0 v0​=0,由上述公式可知:


通过数学归纳法可知:

最终所要求得的加权滑动平均值即为 v t v_t vt​。但是问题又随之出现了,前几个 v t v_t vt​(通过递推公式得到的)与它们各自的原始值偏差很大,由于 v 0 v_0 v0​=0,而 β \beta β(又称为衰减率)的值在区间[0,1)内,所以通过递推公式得到的 v 1 v_1 v1​的值会远远小于原始值 θ 1 \theta_1 θ1​, v 2 v_2 v2​和 v 3 v_3 v3​的值也会较 θ 2 \theta_2 θ2​和 θ 3 \theta_3 θ3​有所偏差。为此在上述公式的基础之上做了改进,即

该式即为指数加权滑动平均的公式。
当t=1时,对应 v t v_t vt​= v 1 v_1 v1​,1- β t \beta^t βt=1- β \beta β,通过递推公式我们发现此时 v 1 v_1 v1​= θ 1 \theta_1 θ1​,很好地解决了偏差较大的问题。而且由于 β \beta β在区间[0,1)内,所以随着t的增大,指数加权滑动平均公式的分母越来越趋近于1,对于偏差很小的数又减弱了该指数项的影响。

import numpy as np
import matplotlib.pyplot as plt
import maththeta = [0, 10, 20, 10, 0, 10, 20, 30, 5, 0, 10, 20, 10, 0, 10, 20,30, 5, 0, 10, 20, 10, 0, 10, 20, 30, 5, 0, 10, 20, 10, 0,10, 20, 30, 5]def moving_ave(theta, beta):theta = np.array(theta).reshape((-1, 1))m, n = theta.shapev = np.zeros((m, 1))for i in range(1, m):v[i, :] = beta * v[i-1, :] + (1 - beta) * theta[i, :]return vdef exp_moving_ave(theta, beta):theta = np.array(theta).reshape((-1, 1))m, n = theta.shapev = np.zeros((m, 1))for i in range(1, m):v[i, :] = (beta * v[i-1, :] + (1 - beta) * theta[i, :])for i in range(1, m):v[i, :] /= (1 - beta**i)return vv = moving_ave(theta, 0.9)
v_exp = exp_moving_ave(theta, 0.9)plt.plot(theta, lw=2, marker='*', label=r'$v_t$=$\theta_t$')
plt.plot(v[:, 0], lw=2, color='darkorange', marker='*', label=r'$v_t$=$\beta$$v_{t-1}$+(1-$\beta$)$\theta_t$')
plt.plot(v_exp[:, 0], lw=2, color='green', marker='*', label=r'$v_t$=$v_t$/(1-$\beta^t$)')
plt.legend()
plt.show()


通过上图可以明显地看出加权滑动平均和指数加权滑动平均之间的差别。
kerasBatchNormalization函数(批次归一化)中的momentum参数即为加权滑动平均的 β \beta β(初始值为0.99)。 β \beta β的值越接近1,前几个数值的权重越高,滑动平均的结果越取决于前t个值。若 β \beta β的值越接近0,前几个数值权重越低,滑动平均的结果越取决于距离 v t v_t vt​最近的几个数值。

tf.keras.layers.BatchNormalization(axis=-1,momentum=0.99,epsilon=0.001,center=True,scale=True,beta_initializer="zeros",gamma_initializer="ones",moving_mean_initializer="zeros",moving_variance_initializer="ones",beta_regularizer=None,gamma_regularizer=None,beta_constraint=None,gamma_constraint=None,renorm=False,renorm_clipping=None,renorm_momentum=0.99,fused=None,trainable=True,virtual_batch_size=None,adjustment=None,name=None,**kwargs
)

使用指数加权滑动平均可以有效避免数据抖动,使得数据更加平稳、平滑,使得测试过程更加鲁棒。

【深度学习】指数加权滑动平均相关推荐

  1. 深度学习_深度学习基础_滑动平均详解

    滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving avergae),可以用来估计变量的局部均值,使得变 ...

  2. 算法学习笔记之滑动平均滤波算法

    滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用.如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区.每新采集一个数据便存入暂存区中,同时去掉 ...

  3. 深度学习指数的使用——np.exp(-4)和1e-4的区别

  4. Stanford CS230深度学习(四)TensorFlow2.1

    本周CS230的课程主要是介绍了GAN相关的一些东西,但是这个需要深入了解,所以本次博客主要对coursera上的课程以及作业进行总结. 目录 一.一些重要的概念 1.深度学习中的超参数 2.Batc ...

  5. Stanford CS230深度学习(三)调参、正则化和优化算法

    lecture3中主要讲了如何构建一个ML/DL任务,主要包括:选择问题.获得数据.设计模型.训练模型.测试模型.部署以及维护.然后coursera中的课程主要讲实际的应用例如调参.正则化等,以及几个 ...

  6. 增强版!如何深度学习识别滑动验证码缺口

    这是「进击的Coder」的第 394 篇技术分享 作者:崔庆才 来源:崔庆才丨静觅 之前的文章中其实已经提到过如何使用深度学习来识别滑动验证码缺口,文章见利用 Python 深度学习识别滑动验证码缺口 ...

  7. 黄金时代 —— 深度学习 (基础)

    文章目录 1 优化方法 梯度下降 SGD SGD+Momentum (动量项) SGD+Nesterov (前瞻动量) AdaGrad (梯度平方累计) AdaDelta (梯度平方平均值+自适应学习 ...

  8. 深度学习中的优化问题

    文章目录 一.优化问题简介及挑战 1.优化问题简介 2.优化问题中的两个挑战 (a).局部最小值 (b).鞍点 二.各种参数优化算法 1.Mini-batch SGD + LR Decay 2.Ada ...

  9. 机器学习笔记:时间序列分解(滑动平均)

    0 前言 时间序列数据可以表现出多种模式,将时间序列拆分为多个组件通常很有帮助,每个组件代表一个基础模式类别. 在机器学习笔记(时间序列):不同类型的图示_UQI-LIUWJ的博客-CSDN博客中,我 ...

最新文章

  1. 实践教程 | 浅谈 PyTorch 中的 tensor 及使用
  2. 检测不到信号,是加点噪声?还是滤除噪声?
  3. Markdown = PPT ?这个工具给力!
  4. 2021夏季每日一题 【week6 完结】
  5. 云图说 | 3分钟创建一个游戏类工作负载
  6. APP提示框设计模板|UI设计师灵感好帮手
  7. 在linux环境下模拟实现简单命令解释器_git bash 竟然不支持 tree 命令
  8. 计算机没wps云档怎么办,WPS云空间多大?WPS云文档空间已经用满怎么办?删数据或买VIP-太平洋电脑网...
  9. WAV音频文件的分析
  10. VMware卸载干净
  11. Linux终端解压压缩文件,如何从终端解压zip文件?
  12. 模块三 day22 并发编程(上)
  13. IT售前工程师需要掌握哪些技术
  14. 混合策略与混合策略纳什均衡
  15. linux系统查看电脑cpu,linux系统怎么查看自己电脑的cpu位数
  16. Jsp页面使用JavaBeans
  17. while和do while 循环
  18. 无需设置权限您照样可以访问OBS桶中的数据?
  19. Vue开发Web阅读器(一)
  20. 【Echarts】在Vue中使用Echarts

热门文章

  1. java计算机毕业设计律师事务管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  2. 计算机考证说的剪贴画
  3. 机器人运动控制-上位机通讯
  4. 基于机器视觉的移动消防机器人(三)--软件设计
  5. 最完美打开三星a9 liteusb调试模式的步骤
  6. ERROR: No .egg-info directory found in C:\Users\ybliu\AppData\Local\Temp\pip-pip-egg-info-_zbac78z
  7. 企业员工电脑监控软件的实用之处
  8. Win10安装IE浏览器教程
  9. asf与vga同步播放
  10. 大势所趋!十大令人振奋的移动端APP设计趋势