【深度学习基础】第十六课:指数加权平均

指数加权平均,偏差修正

1132 Views | 2548 Words

Posted by x-jeff on February 25, 2020

【深度学习基础】系列博客为学习Coursera上吴恩达深度学习课程所做的课程笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.指数加权平均

指数加权平均在统计中也叫做指数加权移动平均。通过它可以计算局部的平均值,来描述数值的变化趋势。

接下来通过一个例子来了解指数加权平均。

假设我们现在有一年中每一天的温度数据,将其绘制为散点图如下:

构造等式如下:

  • V0=0
  • V1=0.9V0+0.1θ1
  • V2=0.9V1+0.1θ2
  • V3=0.9V2+0.1θ3
  • ……
  • Vt=0.9Vt1+0.1θt

其中,θt表示第t天的温度。

然后依旧以天数作为横轴,求得的指数加权平均Vt作为纵坐标,得到如下红线:

我们将上述公式写的更加泛化一点:

Vt=βVt1+(1β)θt

在之前的例子中,β=0.9。其中Vt可近似理解为最近(11β)天的平均温度。

现在我们来考虑下β过大和过小时的情况。

👉如果有β=0.98,会得到下图的绿线:

因为β=0.98相当于可近似为近(110.98=)50天的平均温度,所以绿线要比红线更为平滑。

此外,因为当天温度的权值只有0.02,所以在温度变化时,绿线适应数据也更缓慢一些,会有一定延迟,因此绿线相比红线出现了右移的情况。

👉如果有β=0.5,会得到下图的黄线:

由于仅平均了两天的温度,所以得到的曲线有更多的噪声,更有可能出现异常值。但是这个曲线能够更快适应温度变化。

综上所述,选择一个不大不小的、合适的β能够更好的计算平均。

2.指数加权平均的作用

假设我们现在计算近100天温度的指数加权平均(β=0.9):

  • V100=0.9V99+0.1θ100
  • V99=0.9V98+0.1θ99
  • V98=0.9V97+0.1θ98
  • V97=0.9V96+0.1θ97
  • ……

带入可求得:

V100=0.1θ100+0.9V99=0.1θ100+0.10.9θ99+0.92V98=0.1θ100+0.10.9θ99+0.10.92θ98+0.93V97=0.1θ100+0.10.9θ99+0.10.92θ98+......+0.10.999θ1

我们可以看到V100是对过去一百天温度的指数加权平均。其权值呈指数衰减:

并且这些权值加起来等于1或接近于1。

但是距离越远的天数权值越小,计算时意义不大,因此通常省略权值小于e的项。

本例中最大权值为0.1,则:

0.11e0.10.910

即省略θ90之前的天数,所以对应于第1部分中提到的,V100通常被近似为近(110.9=)10天的加权平均温度。

同理,当β=0.98时,有0.98501e,此时,V100被近似为近50天内的气温加权平均值。

根据极限的公式:limx0(1x)1x=1e,当x=1β时,有β11β1e。因此我们就可以总结出指数加权平均可近似为近11β天的平均温度。

2.1.指数加权平均的优势

相比使用算术平均计算局部平均值,指数加权平均不需要太多存储空间,只需在计算机内存中保留一行数字,并且基本一行代码即可实现,更为高效。虽然算数平均估计的均值更为准确,例如可以直接算出近十天或五十天的气温均值,但这样做的缺点是要保存所有的气温值及其气温值总和,需要更多的内存,更难实现,花费也更高。

因此,指数加权平均在机器学习中被广泛应用。

3.偏差修正

偏差修正会使得指数加权平均估计的更为准确。

在第1部分β=0.98时的例子中,绿线就是做完偏差修正之后的效果。如果没有偏差修正,得到的应该是下图中的紫线:

能注意到紫线的起点较低,但是后续趋势基本和绿线重合。

那为什么会出现这种情况呢?我们来分析一下。

假设第一天的温度是40华氏度,第二天的温度是55华氏度。假设β=0.98,则有:

  • V0=0
  • V1=0.98V0+0.02θ1=0.02×40=0.8
  • V2=0.98V1+0.02θ2=0.98×0.8+0.02×55=1.884
  • ……

能看出前几天的估计有很大的偏差。因此我们需要对其进行修正:

Vt1βt

V1修正之后的结果为(0.810.981=)40;V2修正之后的结果为(1.88410.982)47.58。很明显,修正之后的结果更为准确。

并且随着t增加,βt将接近于0,所以当t很大的时候,偏差修正几乎没有作用。这也就是当t很大的时候,紫线基本和绿线重合的原因。但是在初始阶段,偏差修正可以帮助我们更好的预测温度。当然也有部分人不注重初始阶段,因此也可以不使用偏差修正。


0 comments
Anonymous
Markdown is supported

Be the first person to leave a comment!