** 本文内容来自于吴恩达深度学习公开课

1、概述

  加权移动平均法,是对观察值分别给予不同的权数,按不同权数求得移动平均值,并以最后的移动平均值为基础,确定预测值的方法。采用加权移动平均法,是因为观察期的近期观察值对预测值有较大影响,它更能反映近期变化的趋势。

  指数移动加权平均法,是指各数值的加权系数随时间呈指数式递减,越靠近当前时刻的数值加权系数就越大。

  指数移动加权平均较传统的平均法来说,一是不需要保存过去所有的数值;二是计算量显著减小。

2、算法理解

  引入一个例子,例子为美国一年内每天的温度分布情况,具体如下图所示

    

  EWMA 的表达式如下:

    $v_t = \beta v_{t-1} + (1 - \beta) \theta_t$

  上式中 $ \theta_t$ 为时刻 $ t$ 的实际温度;系数 $\beta$ 表示加权下降的速率,其值越小下降的越快;$v_t$ 为 $t$ 时刻 EWMA 的值。

  在上图中有两条不同颜色的线,分别对应着不同的 $\beta$ 值。

  当 $\beta = 0.9$ 时,有 $v_t = 0.9 v_{t-1} + 0.1 \theta_t$ ,对应着图中的红线,此时虽然曲线有些波动,但总体能拟合真实数据

  当 $\beta = 0.98$ 时,有 $v_t = 0.98 v_{t-1} + 0.02 \theta_t$ ,对应着图中的绿线,此时曲线较平,但却有所偏离真实数据

  在 $t=0$ 时刻,一般初始化 $v_0 = 0$ ,对 EWMA 的表达式进行归纳可以将 $t$ 时刻的表达式写成:

    $ v_t = (1-\beta)  (\theta_t + \beta\theta_{t-1}+ ... + \beta^{t-1}\theta_1) $

  从上面式子中可以看出,数值的加权系数随着时间呈指数下降。在数学中一般会以 $\frac {1} {e}$ 来作为一个临界值,小于该值的加权系数的值不作考虑,接着来分析上面 $\beta = 0.9 $ 和 $\beta = 0.98$ 的情况。

  当 $\beta = 0.9$ 时,$0.9^{10}$ 约等于 $\frac {1} {e}$ ,因此认为此时是近10个数值的加权平均。

  当 $\beta = 0.98$ 时,$0.9^{50}$ 约等于 $\frac {1} {e}$,因此认为此时是近50个数值的加权平均。这种情况也正是移动加权平均的来源。

  具体的分析如下图所示:

    

3、偏差修正

  在初始化 $ v_0 = 0$ 时实际上会存在一个问题。具体的如下图所示:

    

  从上图中可以看出有一条绿色和紫色的曲线,都是对应于 $\beta = 0.98$ 时的曲线。理想状况下应该是绿色的曲线,但当初始化 $v_0 = 0$ 时却会得到紫色的曲线,这是因为初始化的值太小,导致初期的数值都偏小,而随着时间的增长,初期的值的影响减小,紫色的曲线就慢慢和绿色的曲线重合。我们对公式做一些修改:

    $ v_t = \frac {\beta {v_{t-1}}  + {(1 - \beta)} \theta_t} {1 - \beta^t} $ 

  当 $t$ 很小时,分母可以很好的放大当前的数值;当 $t$ 很大时,分母的数值趋于1,对当前数值几乎没有影响。

  EWMA 主要是被应用在动量优化算法中,比如Adam算法中的一阶矩和二阶矩都采用了上面修改后的EWMA算法。

  

指数加权移动平均法(EWMA)的更多相关文章

  1. ubuntu之路——day8.2 深度学习优化算法之指数加权平均与偏差修正,以及基于指数加权移动平均法的动量梯度下降法

    首先感谢吴恩达老师的免费公开课,以下图片均来自于Andrew Ng的公开课 指数加权平均法 在统计学中被称为指数加权移动平均法,来看下面一个例子: 这是伦敦在一些天数中的气温分布图 Vt = βVt- ...

  2. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  3. pandas处理时间序列(4): 移动窗口函数

    六.移动窗口函数 移动窗口和指数加权函数类别如↓: rolling_mean 移动窗口的均值 pandas.rolling_mean(arg, window, min_periods=None, fr ...

  4. 面向初学者的指南:创建时间序列预测 (使用Python)

    https://blog.csdn.net/orDream/article/details/100013682 上面这一篇是对 https://www.analyticsvidhya.com/blog ...

  5. 流量控制--6.Classful Queuing Disciplines (qdiscs)

    Classful Queuing Disciplines 可以使用classful qdisc的代理来解锁Linux流量控制的灵活性和控制力.classful qdisc可以附加过滤器,允许将报文重定 ...

  6. Python:pandas(三)——DataFrame

    官方文档:pandas之DataFrame 1.构造函数 用法 pandas.DataFrame( data=None, index=None, columns=None, dtype=None, ) ...

  7. [DeeplearningAI笔记]改善深层神经网络_优化算法2.3_2.5_带修正偏差的指数加权平均

    Optimization Algorithms优化算法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.3 指数加权平均 举个例子,对于图中英国的温度数据计算移动平均值或者说是移动平均值( ...

  8. 改善深层神经网络_优化算法_mini-batch梯度下降、指数加权平均、动量梯度下降、RMSprop、Adam优化、学习率衰减

    1.mini-batch梯度下降 在前面学习向量化时,知道了可以将训练样本横向堆叠,形成一个输入矩阵和对应的输出矩阵: 当数据量不是太大时,这样做当然会充分利用向量化的优点,一次训练中就可以将所有训练 ...

  9. 跟我学算法-吴恩达老师(mini-batchsize,指数加权平均,Momentum 梯度下降法,RMS prop, Adam 优化算法, Learning rate decay)

    1.mini-batch size 表示每次都只筛选一部分作为训练的样本,进行训练,遍历一次样本的次数为(样本数/单次样本数目) 当mini-batch size 的数量通常介于1,m 之间    当 ...

随机推荐

  1. 支持MySelf

    编程思路分享,BUG上报,主推Java Web方向与软件架构设计,不定期推出系列针对性基础教程,项目均放置于GitHub,个人运营精力有限,感谢支持. 交流群:628793702 个人技术公众,欢迎关 ...

  2. C#设计模式之五原型模式(Prototype Pattern)【创建型】

    一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...

  3. 2018-12-09 疑似bug_中文代码示例之Programming in Scala笔记第九十章

    续前文: 中文代码示例之Programming in Scala笔记第七八章 源文档库: program-in-chinese/Programming_in_Scala_study_notes_zh ...

  4. Tars 服务调服务

    1,创建一个 tars 服务工程 2,把需要调用的服务的 客户端接口文件 拷贝到当前服务 3,构建通信器 CommunicatorConfig 调用,如果是 springboot 开发客户端可以使用注 ...

  5. C# 过滤特殊字符,保留中文,字母,数字,和-

    #region public static string FilterChar(string inputValue) 过滤特殊字符,保留中文,字母,数字,和- /// <summary> ...

  6. JPTabBar 详细介绍

    一个强大的TabBar,实现市面上APP基本上所拥有的功能,代码简单构造容易!只需不足5行代码就把基本的界面搭建出来了 附上效果图: 主要功能特色: 多种Tab切换的动画效果 实现底部导航中间按钮凸出 ...

  7. android默认开启adb调试方法分析

    用adb调试android时,每次接入usb线,都会提示一个确认打开usb调试功能的窗口,有时候,我们需要默认打开usb调试功能.或者无需弹出对话框,直接默认开启.这个我们需要分析adb的流程了. a ...

  8. Python 魔法方法简介

    1.什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一 ...

  9. margin塌陷与BFC总结

    只给出关键点,具体效果不做太多示范,真正的东西只有自己试了才能记住 BFC BFC触发: 1.position:absolute/fixed 2.float:left/right 3.display: ...

  10. HTTP Authentication

    PS:近期看了一本思维导图的书,实践一下.