天天看点

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

目录

1 指数加权移动平均

2 TensorFlow中滑动平均模型   

3 偏差修正

1 指数加权移动平均

        指数加权移动平均exponentially weighted moving average (EWMA),又叫指数移动平均exponential moving average (EMA)。

  • 算术平均(权重相等)—>加权平均(权重不等)—>移动平均(大约是只取最近的N次数据进行计算)—> 批量归一化(BN)及各种优化算法的基础
  • EMA:是以指数式递减加权的移动平均,各数值的加权影响力随时间呈指数式递减,时间越靠近当前时刻的数据加权影响力越大

        对于序列Y,EMA公式为:

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        这里,α是一个介于(0,1)之间的权重系数;Yt是当前时刻t的值;St是当前时刻序列Y的指数移动平均值(EMA);S(t-1)是上一个时刻Y的EMA。

        由该公式可以看出,EMA的一个好处就是,可以由当前时刻的Y值和上一时刻的EMA值,计算出当前时刻的EMA值,相比需要知道所有序列值,才能计算出的算术平均值,EMA节省了很多存储空间,且计算简单。

        将EMA公式对Y序列展开,如下:

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        可以看出离当前时刻 t 越远的Y值,其权重(1-α)成指数型衰减。

        从这里可以看出EMA名字的来源。   

2 TensorFlow中滑动平均模型   

        TensorFlow中的滑动平均模型使用的是滑动平均(Moving Average)算法,又称为指数加权移动平均算法(exponenentially weighted average),这也是ExponentialMovingAverage()函数的名称由来。

        先来看一个简单的例子,这个例子来自吴恩达老师的DeepLearning课程。

        首先这是一年365天的温度散点图,以天数为横坐标,温度为纵坐标,你可以看见各个小点分布在图上,有一定的曲线趋势,但是并不明显:

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        接着,如果我们要看出这个温度的变化趋势,很明显需要做一点处理,也即是我们的主题,用滑动平均算法处理。

        首先给定一个值 v0,然后我们定义每一天的温度是 a1,a2,a3·····,接着,我们计算出v1,v2,v3····来代替每一天的温度,也就是上面的a1,a2,a3。

        EWMA 的表达式如下: 

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        上式中 θt 为时刻 t 的实际温度;系数 β 表示加权下降的速率,其值越小下降的越快;vt 为 t 时刻 EWMA 的值。

        在下图中有两条不同颜色的线,分别对应着不同的 β 值。

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        当 β=0.9 时,有 

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

,对应着图中的红线,此时虽然曲线有些波动,但总体能拟合真实数据

  当 β=0.98β=0.98 时,有 

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

,对应着图中的绿线,此时曲线较平,但却有所偏离真实数据

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

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        从上面式子中可以看出,数值的加权系数随着时间呈指数下降。在数学中一般会以 

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

 来作为一个临界值,小于该值的加权系数的值不作考虑,接着来分析上面 β=0.9 和 β=0.98 的情况。

        当 β=0.9 时,

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

 约等于 

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

 ,因此认为此时是近10个数值的加权平均。

  当 β=0.98 时,

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

约等于 

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

,因此认为此时是近50个数值的加权平均。这种情况也正是移动加权平均的来源。

        具体的分析如下图所示:

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

        然后说一下这个滑动平均模型和深度学习有什么关系:通常来说,我们的数据也会像上面的温度一样,具有不同的值,如果使用滑动平均模型,就可以使得整体数据变得更加平滑——这意味着数据的噪音会更少,而且不会出现异常值。但是同时β太大也会使得数据的曲线右移,和数据不拟合。需要不断尝试出一个β值,既可以拟合数据集,又可以减少噪音。

        滑动平均模型在深度学习中还有另一个优点:它只占用极少的内存。当你在模型中计算最近十天(有些情况下远大于十天)的平均值的时候,你需要在内存中加载这十天的数据然后进行计算,但是指数加权平均值约等于最近十天的平均值,而且根据vt = v(t-1) * β + at * (1-β),你只需要提供at这一天的数据,再加上v(t-1)的值和β值,相比起十天的数据这是相当小的数据量,同时占用更少的内存。

3 偏差修正

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

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

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

指数加权移动平均1 指数加权移动平均2 TensorFlow中滑动平均模型   3 偏差修正

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

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

指数加权移动平均法(EWMA):https://www.pianshen.com/article/6077318422/

AI数学基础21——指数加权移动平均:https://www.jianshu.com/p/c1c5c5be02dc

指数加权移动平均法(EWMA):https://www.cnblogs.com/jiangxinyang/p/9705198.html

继续阅读