指数移动平均的直观解释
指数移动平均的生动解读
理解梯度下降算法内部使用的基本算法逻辑
介绍
在时间序列分析中,通常需要通过考虑以前的值来了解序列的趋势方向。可以通过使用简单的基准线或构建高级机器学习模型等多种方法来执行序列中下一个值的近似计算。
指数(加权)移动平均是这两种方法之间的稳健折衷方案。简单的递归方法的优势使得可以高效地实现算法。同时,它非常灵活,可以成功地适用于大多数类型的序列。
本文涵盖了该方法背后的动机、工作流程的描述以及偏差修正——一种在近似计算中克服偏差障碍的有效技术。
动机
想象一下近似计算的问题,其中给定参数随时间变化。在每次迭代中,我们都知道其所有先前值。目标是预测下一个值,该值取决于先前值。
其中一个简单的策略是简单地取最后几个值的平均值。这在某些情况下可能有效,但对于更依赖于最近值的参数,不太适用。
克服这个问题的一种可能方法是给更近期的值分配更高的权重,并给以前值分配较少的权重。指数移动平均恰好是遵循这一原则的策略。 它基于这样的假设:一个变量的最近值对于形成下一个值的贡献大于先前值。
公式
为了了解指数移动平均是如何工作的,让我们看一下它的递归公式:
- vₜ 是近似给定变量的时间序列。其索引 t 对应于时间戳 t。由于该公式是递归的,因此需要初始时间戳 t = 0 的值 v₀。在实际应用中,通常将 v₀ 设为 0。
- θ 是当前迭代的观察值。
- β 是介于 0 和 1 之间的超参数,定义了在先前平均值 vₜ-₁ 和当前观察值 θ 之间如何分配权重重要性
让我们为前几个参数值写出这个公式:
结果,最终的公式如下:
我们可以看到,最近观察值 θ 的权重为 1,倒数第二个观察值为 β,倒数第三个为 β²,以此类推。由于 0 < β < 1,乘法项 βᵏ 随着 k 的增加呈指数递减,因此旧观察值变得越来越不重要。最后,每个求和项都乘以 (1 — β)。
在实践中,β 的值通常选择接近 0.9。
数学解释
使用数学分析中著名的第二个奇妙极限,可以证明以下极限:
通过取代 β = 1 – x,我们可以将其重写为以下形式:
我们还知道,在指数移动平均的方程中,每个观察值都乘以一个指标为 βᵏ 的项,其中 k 表示观察值计算前多少个时间戳。由于基数 β 在两种情况下都相等,我们可以等同于这两个公式的指数:
通过使用这个方程,对于给定的 β 值,我们可以计算出权重项达到 1 / e ≈ 0.368 时所需的时间戳数 t。这意味着最近 t 次迭代中计算的观察结果具有大于 1 / e 的权重项,而上一个 t 时间戳范围之外计算的观察结果则具有小于 1 / e 的权重项,意义上较小。
实际上,权重低于 1 / e 对指数加权平均值的影响很小。这就是为什么说对于给定的 β 值,指数加权平均值仅考虑最后 t = 1 / (1 – β) 个观察结果。
为了更好地理解这个公式,让我们为 β插入不同的值:
例如,取 β = 0.9 表示在大约 t = 10 次迭代中,权重会衰减到 1 / e,与当前观察值的权重相比。换句话说,指数加权平均值主要仅依赖于最后 t = 10 个观察结果。
偏差校正
使用指数加权平均值的常见问题是,在大多数问题中它无法很好地逼近第一个序列值。这是由于在最开始的几次迭代中缺乏足够多的数据。例如,想象一下给定以下时间序列:
目标是用指数加权平均值逼近它。然而,如果我们使用正常的公式,那么前几个值将对 v₀ 施加很大的权重,而 v₀ 是 0,而散点图上的大部分点都在 20 以上。结果,一系列第一个加权平均值将过低,无法准确逼近原始序列。
一种天真的解决方案是取第一个观察值 θ₁ 附近的值作为 v₀ 的值。虽然这种方法在某些情况下效果很好,但仍然不完美,特别是在给定的序列是波动性的情况下。例如,如果 θ₂ 与 θ₁ 相差太大,那么在计算第二个值 v₂ 时,加权平均值通常会对先前的趋势 v₁ 比当前观察值 θ₂ 更加重视。结果,逼近效果会非常差。
一种更加灵活的解决方案是使用一种称为“偏差校正”的技术。不再简单地使用计算得到的数值 vₖ,而是将它们除以 (1 — βᵏ)。假设选择的 β 接近于 0.9–1,这个表达式在 k 较小的情况下趋近于 0。因此,不再缓慢累积前几个值,其中 v₀ = 0,而是将它们除以一个相对较小的数,使其变得更大。
总的来说,这种缩放方法非常有效,可以精确地适应最初的几个术语。当k变得更大时,分母逐渐趋近于1,从而逐渐省略了不再需要的这种缩放效果,因为从某个迭代开始,算法可以高度自信地依赖于其最近的值,而无需任何额外的缩放。
结论
在本文中,我们介绍了一种非常有用的近似时间序列的技术。指数加权平均算法的鲁棒性主要通过其超参数β来实现,可以针对特定类型的序列进行调整。除此之外,引入的偏差修正机制使得即使在早期时间戳上信息很少的情况下,也能够有效地近似数据。
指数加权平均在时间序列分析中具有广泛的应用范围。此外,它还用于梯度下降算法的变体,以加速收敛。其中最流行的之一是深度学习中的动量优化器,它可以消除优化函数的不必要的振荡,使其更准确地趋向局部最小值。
除非另有注明,所有图片均为作者所创作。